Che cos'è / usr / local / bin?


85

Prima di oggi, ho usato il terminale in misura limitata per spostarmi dentro e fuori le directory e cambiare le date dei file usando il touchcomando. Avevo realizzato l'intera estensione del terminale dopo aver installato uno script divertente su Mac e aver dovuto chmod 755il file per renderlo eseguibile in seguito.

Mi piacerebbe sapere cos'è /usr/local/bin, però. /usr/, Presumo, è l'utente del computer. Non sono sicuro del perché /local/ci sia, comunque. Ovviamente rappresenta il computer locale, ma dal momento che si trova sul computer (o su un server), sarebbe davvero necessario? Non /usr/binandrebbe bene?

E cos'è /bin? Perché questa area viene solitamente utilizzata per l'installazione di script sul terminale?

Risposte:


77

/usr/local/bin è per i programmi che un normale utente può eseguire.

  • La /usr/localgerarchia deve essere utilizzata dall'amministratore di sistema durante l'installazione del software in locale.
  • Deve essere sicuro di non essere sovrascritto quando il software di sistema viene aggiornato.
  • Può essere utilizzato per programmi e dati condivisibili tra un gruppo di host, ma non presenti in /usr.
  • Il software installato localmente deve essere posizionato all'interno /usr/localdi / usr a meno che non sia installato per sostituire o aggiornare il software /usr.

Questa fonte aiuta a spiegare lo standard della gerarchia del filesystem a un livello più profondo.

Potresti trovare questo articolo sull'uso e l'abuso anche di/usr/local/bin interessanti.


"" "a meno che non venga installato per sostituire o aggiornare il software nel significato di" usr "" "?
Pacerier

63

/ usr /, presumo sia l'utente del computer.

Vicino.

Unix è iniziato come un sistema operativo multiutente, quindi non è "l'utente", è "gli utenti ", plurale.

Prima dell'uscita di AT&T Unix System V versione 4 (SVR4) nel 1988 con i suoi strumenti di gestione utenti predefiniti nella creazione di home directory degli utenti /home, la posizione convenzionale era /usr.¹ La tua $HOMEdirectory potrebbe essere stata /usr/jfwsu un box System III .

/usrconteneva anche, allora come oggi, /usr/bin, /usr/lib, etc. L'esperienza ha mostrato che segregare le home directory è stata buona pratica di gestione del sistema, quindi con il /homecambiamento di politica in SVR4, è lasciato alle spalle tutto ciò che oggi consideriamo come appartenenti a /usr.

/usraveva ancora una buona ragione per mantenere il nome: ciò che restava indietro erano i file che non dovevano essere disponibili fino a quando il sistema non fosse stato avviato abbastanza da supportare il normale uso interattivo. Vale a dire, ciò che è stato lasciato alle spalle erano le parti del sistema operativo focalizzate dall'utente . Ciò significa che /usrpotrebbe essere su un volume fisico diverso, il che era una cosa positiva ai tempi di 92 MB di unità disco rigido delle dimensioni delle lavatrici .

I primi sistemi Unix sono stati attenti a tenere fuori i file del sistema operativo principale in /usrmodo da poter ancora avviare in modalità utente singolo² anche se il /usrvolume era smontabile per qualche motivo. Il volume di root conteneva strumenti sufficienti per riportare il /usrvolume online.

Diverse versioni di Unix ora ignorare questo vecchio principio di progettazione dal momento che anche i piccoli sistemi embedded hanno abbastanza spazio per entrambi i file di volume radice tradizionali e tutti /usrsu un unico volume.³ Red Hat Enterprise Linux, Solaris e Cygwin link simbolico /binper /usr/bine /libper /usr/libmodo che non v'è alcuna più alcuna differenza tra queste directory.

... / local / ... ovviamente significa computer locale ...

Sì. Si riferisce al fatto che i file sottostanti /usr/localdovrebbero essere particolari per quel singolo sistema. I file che sono in qualche modo generici dovrebbero vivere altrove.

Ciò ha anche radici nel modo in cui i sistemi Unix venivano comunemente usati decenni fa, quando tutto ciò era standardizzato. Ancora una volta, i dischi rigidi del tempo erano ingombranti, molto costosi e conservati poco secondo gli standard odierni. Per risparmiare denaro e spazio sui dischi, un laboratorio informatico pieno di box Unix spesso condivideva la maggior parte di /usrNFS o altri protocolli di condivisione file di rete, quindi ogni box non doveva avere una propria copia ridondante. File specifici per un singolo la casella andrebbe sotto /usr/local, che sarebbe un volume separato da /usr.

Questa eredità storica è il motivo per cui è ancora l'impostazione predefinita per la maggior parte del software Unix di terze parti da installare /usr/localquando installata a mano. La maggior parte di tali software ti consentirà di installare il pacchetto altrove, ma facendo una scelta non desiderata, otterrai il valore predefinito sicuro, che non interferisce con altri percorsi di installazione comuni con scopi più specifici.

Ci sono buoni motivi per fare installare il software altrove. Il team macOS di Apple lo fa quando costruisce, diciamo, bashdal codice sorgente GNU Bash . Usano /come prefisso di installazione, sovrascrivendo il /usr/localvalore predefinito, in modo che Bash finisca /bin.

Un altro esempio è il modo in cui i sistemi Linux più vecchi segregavano il loro software GUI /usr/X11R6, per tenerlo separato dalla riga di comando tradizionale e dal cursessoftware basato. Ciò è stato fatto semplicemente sovrascrivendo il /usr/localprefisso predefinito con /usr/X11R6.⁵

E cos'è / bin?

È l'abbreviazione di "binario", che in questo contesto significa "un file che non è un testo semplice". La maggior parte di questi file sono eseguibili su una scatola Unix, quindi questi due termini sono diventati sinonimi in alcuni ambienti. ("Per favore, costruiscimi un binario per RHEL 7, Fred.")

I file di testo su una scatola di Unix vivono altrove: /etc, /usr/include, /usr/share, etc.

Una volta, anche gli script di shell - che sono semplici file di testo - erano tenuti fuori dalle bindirectory, ma anche questa linea è sfocata. Oggi le bindirectory in genere contengono qualsiasi tipo di file eseguibile, rigorosamente "binario" o no. ⁶


Note a piè di pagina e digressioni :

  1. La natura primitiva degli strumenti di gestione degli utenti prima di SVR4 significava che lo HOME=/usr/$NAMEschema era semplicemente documentato come una convenzione, piuttosto che applicato dagli strumenti software come predefinito.

    Puoi vederlo a pagina 4-8 della " Guida dell'amministratore di sistema di AT&T Unix versione V versione 3.2 : qui vedi AT&T che raccomanda il vecchio /usr/$NAMEschema nell'ultima versione principale di Unix prima che SVR4 uscisse.

    Era abbastanza comune nei vecchi sistemi Unix per gli amministratori di sistema scegliere uno schema diverso che avesse più senso per loro. Essere persone, questo significava inventare molti schemi diversi.

    Uno schema che ho incontrato prima è /home/$NAMEdiventato lo standard /u/$NAME.

    Un altro sistema che ho usato nei primi anni 1990 ha avuto così tanti utenti che non potevano andare bene tutte le home directory in un singolo volume fisico, in modo da utilizzare uno schema simile /u1/$NAME, /u2/$NAMEe così via, come ricordo. Il disco su cui è finita la tua home directory era semplicemente una questione di cui uno aveva spazio al momento della creazione del tuo account.

  2. Puoi avviare una macOS box in modalità utente singolo tenendo premuto Cmd-Smentre si avvia. Lascia andare una volta che lo schermo diventa nero e viene visualizzato il testo grigio chiaro. È come correre sotto il Terminale, ma occupa l'intero schermo perché la GUI non è ancora iniziata.

    Stai attento, stai correndo come root.

    Digitare "esci" al prompt di root per utente singolo per uscire dalla modalità utente singolo e continuare l'avvio in modalità GUI multiutente.

  3. I sistemi operativi Unixy che sembrano ancora tenere fuori i file in modalità utente singolo critici /usrnon possono, in effetti, farlo al giorno d'oggi. Una volta ho reso non avviabile un box di FreeBSD 9 spostandomi /usrsu un volume ZFS. Ho dimenticato che le funzionalità di ZFS-on-root non sono arrivate fino a FreeBSD 10, creando un Catch 22 : il sistema operativo aveva bisogno di file /usrper poterlo montare /usr!

    Questo era abbastanza grave, ma se FreeBSD 9 avesse ancora tenuto fuori la sua roba di avvio per utente singolo /usr, avrei potuto risolverlo in posizione. Dal momento che non /usrsi avviava nemmeno in modalità utente singolo con l' essere smontabile, chiaramente quella tradizione era stata in qualche modo violata. Ho dovuto fare il boot da un CD di ripristino per riavviare il sistema.

  4. È anche qui che otteniamo /usr/share: segrega i file che potrebbero essere condivisi anche tra scatole Unix con diversi tipi di processori. Tipicamente, file di testo: pagine man, dizionario, ecc.

  5. "X11R6" si riferiva alla versione di X Window System alla base delle GUI di Linux al momento in cui questa convenzione era prevalente. I sistemi Linux in genere hanno smesso di segregare il software della GUI nel momento in cui X11R6 è stato sostituito con X.Org .

  6. I sistemi Unix originali hanno mantenuto i loro script core shell /etcal fine di evitare di mescolarli con i veri binari in /bin.


3
Adoro quella foto della lavatrice!
chiede il

@Warren, quali sono i sistemi operativi principali prima di System III?
Pacerier

@Pacerier: UNIX Versioni da 1 a 7, UNIX / 32V, da 1BSD a 4BSD, escluse le dot dot di 4BSD (4.1BSD era approssimativamente contemporaneo a AT&T Unix System III) e PWB Unix. Fonte . Perché lo chiedi e cosa c'entra con questa domanda?
Warren Young,

@Warren, beh, potrebbero aver influito in qualche modo sul defacto "sistema di denominazione delle directory"
Pacerier

@Pacerier: sarò fedele alla mia richiesta: prima del Sistema V non esistevano "standard", solo convenzioni e pratiche locali.
Warren Young,

9

Consiglierei di fare riferimento a Wikipedia per domande relative alla struttura in generale, che tratteranno le basi.

Per rispondere direttamente alla tua domanda, tuttavia:

  • / usr è, liberamente, librerie di sistema ed eseguibili non critici
  • / usr / local è, ancora una volta vagamente, per librerie ed eseguibili non di sistema

Questo è il motivo per cui tendi a trovare una struttura simile tra i due; / Usr / {, local / bin} {, sbin, lib}. Essendo nuovo nella shell, quel bit con {} è un'espansione della shell. Prova a eseguire

ls -ld /usr/{,local/}{bin,sbin,lib}

dalla tua shell locale per vedere come funziona.


9

/usr/local/bin mostra le radici in stile UNIX dell'ultimo Mac OS (il suo BSD è basato qui sotto).

  • "usr" sta per Risorse di sistema UNIX. Questa è la posizione in cui sono memorizzati i programmi e le librerie di sistema.
  • "local" rappresenta le risorse che non sono state spedite con la distribuzione standard e, di solito, compilate e gestite in base al sito.
  • "bin" rappresenta eseguibili compilati binari.

Questo si è trasformato dalle prime implementazioni di UNIX su Linux e BSD, ma la convenzione è rimasta. Ora, /usr/binsarebbe per i programmi e le librerie "principali" o core, mentre per i programmi e le librerie /usr/local/binaggiuntivi e non critici.


12
Uso Unix da poco dopo la caduta del Muro di Berlino, e non avevo mai sentito l'espansione "Unix System Resources" per "usr" fino ad oggi; è un backronym. "usr" ha preso il nome perché è dove originariamente si trovavano le home directory degli utenti. Cioè, se avessi un login su una vecchia scatola di System III, la tua directory di lavoro iniziale sarebbe /usr/nzwulfindi default. Un altro schema comune. prima /homeche subentrasse lo schema SVR4 , era /u. Un sistema che ho usato all'inizio aveva così tanti utenti che avevano bisogno di più dischi fisici per l'archiviazione dei file degli utenti, quindi avevano cose come /u/d5/tangent.
Warren Young,

3
@Warren non l'avevo sentito neanche io e cercavo Google per un po '; sembra che ci siano parecchi backronimi
Michael Mrozek

4

/usr/local/bin è il percorso predefinito più popolare per i file eseguibili, in particolare quelli open source.

Questa è tuttavia probabilmente una scelta sbagliata poiché, sui sistemi Unix, /usrè stata standardizzata nei primi anni novanta per contenere una gerarchia di file che appartengono al sistema operativo e quindi possono essere condivisi da più sistemi che utilizzano quel sistema operativo.

Poiché questi file sono statici, il /usrfile system può essere montato in sola lettura. /usr/localsta sconfiggendo questo standard così come è progettato localmente, quindi non condiviso, quindi deve essere letto / scritto per consentire la compilazione locale e non fa parte del sistema operativo. Peccato che /opt/localnon sia stato scelto qualcosa del genere ...


1

Ti consiglio di utilizzare /usr/localper programmi commerciali che potresti installare come Mathematica. Posizionalo nella sua stessa partizione al momento della configurazione. Quando aggiorni il tuo sistema operativo, questa partizione non sarà disturbata e non dovrai reinstallare i suoi contenuti. Quindi usalo per cose che vuoi conservare tra gli aggiornamenti del sistema operativo.

Separatamente, assicurati di dare la /homesua partizione anche per questo motivo.


0

Anche questa risposta potrebbe essere utile.

/ Usr / local

L'idea originale alla base /usr/localera quella di avere una directory separata ('local') '/ usr' su ogni macchina oltre /usr, che potesse essere montata in sola lettura da qualche altra parte. Copia la struttura di /usr.

In questi giorni, /usr/localè ampiamente considerato come un buon posto in cui tenere programmi compilati o di terze parti. La /usr/localgerarchia deve essere utilizzata dall'amministratore di sistema durante l'installazione del software in locale. Deve essere sicuro di non essere sovrascritto quando il software di sistema viene aggiornato.

Può essere utilizzato per programmi e dati condivisi tra un gruppo di host, ma non presenti in /usr. Il software installato localmente deve essere collocato all'interno /usr/localpiuttosto che a /usrmeno che non venga installato per sostituire o aggiornare il software /usr.

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.