Dove dovrebbe essere collocato un eseguibile locale?


63

Ho un eseguibile per il client di controllo versione perforce ( p4). Non riesco a inserirlo /opt/localperché non ho i privilegi di root. Esiste una posizione standard in cui deve essere posizionata $HOME?

La gerarchia del file system ha una convenzione in base alla quale è necessario inserire file eseguibili / binari locali $HOME/bin?

Non sono riuscito a trovare una convenzione del genere menzionata nell'articolo di Wikipedia per l'FHS .

Inoltre, se esiste davvero una convenzione, dovrei includere esplicitamente il percorso della $HOME/bindirectory o qualunque sia la posizione della bindirectory?

Risposte:


65

In generale, se un binario non di sistema installato e gestito deve essere accessibile a livello di sistema a più utenti, deve essere inserito da un amministratore /usr/local/bin. Esiste una gerarchia completa /usr/localche viene generalmente utilizzata per i pacchetti software compilati e installati localmente.

Se sei l'unico utente di un file binario, l'installazione $HOME/binè nella posizione appropriata poiché puoi installarla tu stesso e sarai l'unico consumatore. Se si compila un pacchetto software dall'origine, è anche opportuno creare una gerarchia locale parziale o completa nella propria $HOMEdirectory. L'intera gerarchia locale sarebbe simile a questa.

  • $HOME/bin Binari locali
  • $HOME/etc Configurazione di sistema specifica dell'host per i binari locali
  • $HOME/games File binari di gioco locali
  • $HOME/include File di intestazione C locali
  • $HOME/lib Biblioteche locali
  • $HOME/lib64 Librerie locali a 64 bit
  • $HOME/man Manuali online locali
  • $HOME/sbin File binari del sistema locale
  • $HOME/share Gerarchia indipendente dall'architettura locale
  • $HOME/src Codice sorgente locale

Durante l'esecuzione configure, è necessario definire la gerarchia locale per l'installazione specificando $HOMEcome prefisso le impostazioni predefinite dell'installazione.

./configure --prefix=$HOME

Ora quando make && make installvengono eseguiti, i binari compilati, i pacchetti, le pagine man e le librerie verranno installati nella $HOMEgerarchia locale. Se non è stata creata manualmente una $HOMEgerarchia locale, make installverranno create le directory necessarie per il pacchetto software.

Una volta installato $HOME/bin, puoi aggiungere $HOME/binal tuo $PATHo chiamare il binario usando l'assoluto $PATH. Alcune distribuzioni includeranno $HOME/binnel tuo $PATHdi default. Puoi testarlo sia echo $PATHvedendo se $HOME/binc'è, oppure inserendo il binario $HOME/bined eseguendolo which binaryname. Se ritorna con $HOME/bin/binaryname, allora è nel tuo $ PATH per impostazione predefinita.


5
fintanto che $ HOME non è su un filesystem montato su noexec. / tmp / di solito è montato anche noexec.
ewanm89,

3
Questo è corretto, fa parte del Filesystem Hierarchy Standard (FHS). pathname.com/fhs/pub/fhs-2.3.html#USRLOCALLOCALHIERARCHY
Patrick

29
Non consiglierei di usare $HOME. Questo inonda la tua home directory con numerose directory che non ti interessano affatto. Chi vuole avere man, libecc. In una delle home dir? Preferirei creare la gerarchia in basso $HOME/bino $HOME/local. Ciò aggiunge solo una sottodirectory alla tua home directory, anziché dieci. La PATHpuò essere facilmente adattato per includere $HOME/bin/bino $HOME/local/bin.
Marco,

18
Un'opzione è usare $ HOME / .local / {bin, lib, ecc.}, Come ad esempio usato dalle specifiche basate su XDG ( standards.freedesktop.org/basedir-spec/basedir-spec-latest.html ) e python ( python.org/dev/peps/pep-0370 )
janneb,

4
@janneb Le specifiche della directory di base XDG a cui fai riferimento solo menzioni $HOME/.local/share(versione 0.7, 24 novembre 2010).
Piotr Dobrogost,

28

Come già detto , /usr/localè inteso come prefisso, essenzialmente, per il software installato dall'amministratore di sistema, mentre /usrdovrebbe essere usato per il software installato dai pacchetti della distribuzione.

L'idea alla base è quella di evitare scontri con software distribuito (come rpme debpacchetti) e dare all'amministratore il pieno dominio sul prefisso "locale".

Ciò significa che un amministratore può installare software compilato personalizzato pur usando una distro come Debian.

Dall'FHS

Il software inserito in / o / usr può essere sovrascritto da aggiornamenti di sistema (sebbene in queste circostanze si consiglia di non sovrascrivere le distribuzioni in / etc). Per questo motivo, il software locale non deve essere posizionato al di fuori di / usr / local senza una buona ragione.

Quando si installa un software specifico dell'utente, uther suggerisce di utilizzarlo $HOMEcome prefisso poiché ciò garantisce che si disponga delle autorizzazioni di scrittura. Personalmente, mi sembra $HOME/.localdi essere una soluzione più elegante, dal momento che evita di ingombrare la tua home directory (si spera) bella e ordinata!

$HOME/.local/shareè già usato nelle specifiche della directory di base XDG di freedesktop.org , quindi non ci vuole molto a immaginare di aggiungere un $HOME/.local/bintuo $PATHe fare un $HOME/.local/lib, ecc., mentre ci sei.

Se non vuoi davvero che il tuo prefisso sia una directory nascosta, puoi facilmente creare anche un link simbolico ad essa, ad esempio:

ln -s .local ~/local

Nota a margine

Vale la pena notare che .config(no .local/etc) è il valore predefinito $XDG_CONFIG_HOMEutilizzato per i file di configurazione specifici dell'utente. Devo anche sottolineare che, sfortunatamente, una grande parte del software ignora l'XDG e crea file di configurazione dove preferiscono (di solito nella radice di $HOME). Si noti inoltre che $XDG_CONFIG_HOMEpotrebbe essere disattivato se $HOME/.configsi desidera l'impostazione predefinita .

Stranamente, non esiste una directory riservata ai file di configurazione predefiniti di una distribuzione, quindi non c'è modo di sapere se un file è /etcstato fornito dalla distribuzione o modificato dall'amministratore di sistema.


1
Non riesco a trovare alcuna menzione .localnel FHS
Daniel Serodio

@DanielSerodio È nelle specifiche della directory XDG, uno standard più recente che sta guadagnando importanza. Vedi unix.stackexchange.com/questions/316765/… e superuser.com/questions/1170793/…
ivan_pozdeev

Quella nota a margine /etcè davvero fottutamente fastidiosa quando si gestisce un server con più amministratori - è abbastanza difficile tenere traccia delle modifiche personalizzate ai file di configurazione.
naught101
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.