/ usr / bin vs / usr / local / bin su Linux


445

Perché ci sono così tanti posti dove mettere un binario in Linux? Ci sono almeno questi cinque:

  1. /bin/
  2. /sbin/
  3. /usr/bin/
  4. /usr/local/bin/
  5. /usr/local/sbin/

E sulla mia casella dell'ufficio, non ho i permessi di scrittura per alcuni di questi.

Che tipo di binario entra in quale di questi bins?


28
Hai dimenticato /usr/sbin/.
Ciao,

15
E ~/bin/per cose personali.
Calmarius,

1
Ci sono meno posti al giorno d'oggi, poiché è /binstato unito a /usr/bined è /sbinstato unito a /usr/sbin- vedi The Case for the / usr Merge .
Piotr Dobrogost,


@Calmarius, cosa? non dovresti usare /usr/local/bin?
Pacerier,

Risposte:


558
  1. /bin(e /sbin) erano destinati a programmi che dovevano essere su una piccola /partizione prima che /usrfossero montate le partizioni più grandi , ecc. Al giorno d'oggi, serve principalmente come posizione standard per programmi chiave come /bin/sh, sebbene l'intento originale possa essere ancora rilevante per es. Installazioni su piccoli dispositivi integrati.

  2. /sbin, come distinto da /bin, è per i programmi di gestione del sistema (normalmente non utilizzati dagli utenti ordinari) necessari prima del /usrmontaggio.

  3. /usr/bin è per i normali programmi utente gestiti dalla distribuzione.

  4. C'è un rapporto /usr/sbincon lo stesso a /usr/bincui /sbindeve /bin.

  5. /usr/local/binè per i normali programmi utente non gestiti dal gestore dei pacchetti di distribuzione, ad esempio pacchetti compilati localmente. Non è necessario installarli /usr/binperché i futuri aggiornamenti della distribuzione potrebbero modificarli o eliminarli senza preavviso.

  6. /usr/local/sbin, Come si può intuire, a questo punto, è quello di /usr/local/bincome /usr/sbina /usr/bin.

Inoltre, esiste anche un /optpacchetto monolitico di non distribuzione, sebbene prima che fossero adeguatamente integrate varie distribuzioni vi collocano Gnome e KDE. Generalmente dovresti riservarlo a pacchetti di terze parti di grandi dimensioni e scarsamente educati come Oracle.


37
Penso che questa risposta faccia un ottimo lavoro nel chiarire un insieme comune di convenzioni, ma questo post di Rob Landley è davvero un'ottima lettura se vuoi approfondire l'assurdità ... lists.busybox.net/pipermail/busybox/2010-December /074114.html
Sottofissione

3
refspecs.linuxfoundation.org/fhs.shtml per il riferimento corrente canonico. Il link di @kojiro è obsoleto e non ha le nuove specifiche.
Didier A.

2
Dove posso mettere un cestino scaricato da Internet? Dalla tua descrizione sembra che dovrebbe andare in / usr / local / bin o / usr / bin. / Usr / bin è qualcosa che non dovrei mai toccare manualmente e far giocare solo il gestore pacchetti?
Didier A.

3
@DidierA. inseriscilo ~/bine aggiungi quella directory al tuo PERCORSO come utente ... Grazie per la nota, ho eliminato il mio commento seriamente obsoleto.
Kojiro,

3
Ho trovato la risposta alla prima parte della mia domanda qui: superuser.com/a/238993/425838 . La precedenza si basa sull'ordine nella PATHvariabile di sistema , e echo $PATHper me mostra /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games, il che significa che gli eseguibili /usr/local/binhanno la precedenza su quelli in /usr/bincui hanno la precedenza su quelli in /bin.
Gabriel Staples,

65

Consiglio di dare un'occhiata alla pagina man della gerarchia del file system:

man hier

Che è anche disponibile online, ad esempio: http://linux.die.net/man/7/hier


1
Questo non risponde alla domanda dell'utente.
Billy ONeal

14
La pagina man contiene una voce per ciascuna delle directory bin, che spiega cosa c'è dentro, che era una delle domande.
davitenio,

34

La voce Standard della gerarchia dei filesystem in Wikipedia mi ha aiutato a rispondere alla stessa domanda quando l'avevo, inoltre ha una tabella molto esplicativa.

Estratto da quella pagina 1 :

/bin        Essential command binaries that need to be available in single user mode; for all users, e.g., cat, ls, cp.
/usr/bin    Non-essential command binaries (not needed in single user mode); for all users.
/usr/local  Tertiary hierarchy for local data, specific to this host. Typically has further subdirectories, e.g., bin, lib, share
/usr/sbin   Non-essential system binaries, e.g., daemons for various network-services.
/sbin       Essential system binaries, e.g., fsck, init, route.

1 Estratto il 19 giugno 2019; permalink .


17

Le sbindirectory contengono programmi che sono generalmente solo amministrazione di sistema. I programmi per utenti regolari non dovrebbero mai entrare in essi.

Alcuni programmi sono necessari durante l'avvio e finiscono in /bin/o /sbin/. Questi devono essere disponibili prima del montaggio dei file system. Cose come mounte fsckche sono necessarie per controllare e montare i file system devono essere lì.

La maggior parte dei programmi in pacchetto finisce in /usr/bin/e /usr/sbin/. Questi possono trovarsi su un file system diverso dal file system radice. In alcuni casi potrebbero trovarsi su un'unità montata in rete.

Programmi e script locali appartengono a /usr/local/bin/e /usr/local/sbin/. Questo li identifica come chiaramente non standard e possibilmente disponibili solo sul sito.

Per ulteriori spiegazioni, provare a eseguire il comando man hierche dovrebbe fornire una descrizione della gerarchia di file system consigliata per la distribuzione. Puoi anche leggere la Gerarchia dei file system su Wikipedia


1
+1 Una spiegazione davvero concisa se top è un po 'troppo.
CppLearner,

"I programmi e gli script locali appartengono a / usr / local / bin / e / usr / local / sbin /" - Intendi programmi locali come in "per niente parte del sistema operativo, ma ho deciso di installarli e voglio usarli "?
Jim Aho,

11

Negli anni '70, UNIXc'erano tutti gli eseguibili ufficiali /bine si /usr/bintrovava sotto le home directory degli utenti (ad es. /usr/dmr) Che era disponibile per qualsiasi utente per memorizzare i propri binari che avrebbero potuto essere di interesse anche per gli altri.

Il risultato di questa apertura è /usr/binstato un deposito di software non documentato e così ha Stephen Bournescritto un file cron scriptche controllava ogni giorno nuovi binari e rimuoveva tutti i binari che non avevano una documentazione o che erano stati aggiornati senza aggiornare anche la loro documentazione.

Alla fine degli anni '70, è /usr/binstato integrato nella distribuzione di base del sistema operativo e le persone hanno iniziato a utilizzare /usr/local/binai fini dell'apertura precedente /usr/bin.

Dopo un po ', i amministratori di sistema usavano /usr/local/binarchiviare non-localsoftware importato dalla rete (ad es. USENET) e poiché le società UNIX non volevano ripetere lo stesso errore di /usr/binnuovo, ci fu una conferenza sulla gerarchia dei file system intorno al 1987 dove tutte le società UNIX concordarono rinunciare /usr/local/bine usare /opt/<vendor>/bininvece.

Sfortunatamente, le distro Linux non hanno seguito questa decisione ...


Anche se molto interessante, niente di tutto questo cerca di rispondere alla domanda che /optnon riguardava UNIX ma Linux. È come rispondere "Perché le macchine hanno 4 ruote?" con "Le biciclette ne hanno 2! Purtroppo, le macchine no". il che non aiuta l'OP a capire perché le auto hanno 4.
terdon

2
Se non si è in grado di utilizzare la spiegazione fornita come spiegazione dello sfondo di Linux e del fatto che a Linux piace imitare UNIX, è possibile che manchi lo sfondo necessario.
schily,

1
Interessante, ma qualcosa su cui mi confondo e che forse è anche solo storica. Oggi, scaricare un cestino online e un cestino dell'azienda non è molto diverso. Se Joe Blow crea un programma e lo scarico, perché non inserirlo in / opt / JowBlow / bin anziché / usr / local / bin. È una questione di provider affidabile rispetto a non attendibile? Non sembra avere senso per me.
Didier A.

1
Vorrei aver conosciuto questa storia "esatta" qualche anno fa. a) Mi chiedevo perché AIX evitasse / usr / local, usi / opt / IBM e / opt / ibm e usi bullfreeware / opt / freeware - e perché DOVREBBE aver usato un percorso diverso (non solo / opt / * sbin). Per quanto riguarda la semi-rilevanza con Linux - migliori strumenti GNU - il predefinito --prefix in auto-tools è / usr / local. Pessimi autotools (automake, autoconf, ecc. Non seguono ... Ma sopravviviamo tutti e apprendiamo dove si trovano i distrub. || I venditori mettono i loro programmi.
Michael Felt

Potremmo avere un'altra di queste conferenze? Proprio questa volta, TUTTI ASCOLTANO!
MemphiZ,
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.