/ 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.