Qual è la logica della directory `/ usr`?


107

Qual è la logica delle "risorse di sistema unix", o /usrdirectory, come descritto qui , che duplica molti dei nomi di directory nella directory principale /?

Il mio scopo: sto installando Oracle JDK per l'ennesima volta e questa volta /home/userho deciso di metterlo sotto e sto solo leggendo un po 'per vedere se è una cattiva idea su un singolo computer dell'utente.


1
La tua home directory è il luogo perfetto per l'installazione di software di terze parti come non root.
Lekensteyn,

9
... la triste realizzazione perché pensavi /usrsignificasse una directory "utente" nascosta per così tanti anni ...
Govind Rai

6
Ho pensato seriamente che fosse "utente" per tutto questo tempo. Come i binari degli utenti
Tanner Babcock,

Risposte:


168

Esistono la versione breve e la versione lunga della tua risposta ...

Versione breve:

Come il tuo link già detto, /usrè un posto per livello di sistema , di sola lettura dei file. Quindi tutto il software installato va lì. Non duplica alcun nome di /tranne /bine /lib, ma, in origine, con uno scopo diverso: /bin, /libè solo per i binari e le librerie necessari per l'avvio , mentre /usr/bin, /usr/libè per tutti gli altri eseguibili e librerie. (ora sii un bravo ragazzo e non chiedertelo /sbin, dopo tutto questa è la versione breve)

Al giorno d'oggi, la distinzione tra "richiesto per l'avvio" e non è diminuita, dal momento che la maggior parte delle distro moderne, tra cui Ubuntu, non può avviarsi correttamente senza diversi file da /usr. Ed è per questo che c'è un forte movimento verso la fusione /usr/bine /bin, quindi probabilmente nel prossimo futuro (forse Ubuntu 12.10?) /binSarà un collegamento simbolico a /usr/bin.

Ma forse sei confuso /usre /usr/local? Perché sì, ci sono (e dovrebbero esserci) molti nomi di directory duplicati. Ne parleremo più avanti ...

Versione lunga:

Negli anni '70, in Unix (sì, Unix, molto prima di Linux), i floppy avevano poco spazio (no HD, ricordi?), E ad un certo punto i binari del sistema sono cresciuti troppo in numero e dimensioni a un punto che non avrebbero adattarsi a un singolo disco e gli sviluppatori hanno dovuto dividerli su più supporti e quindi creare nuovi punti di montaggio per loro. /binfilesystem era pieno, così hanno installato i nuovi binari a ... /usr/bin. Ed /usrera, a quel tempo, la loro ... directory utente !

Dopo che è avvenuta la divisione (quasi imbarazzante e spesso raccontata come una barzelletta / tradizione), hanno iniziato a creare giustificazioni (e criteri) "artificiali" per decidere cosa sarebbe andato /bine cosa sarebbe andato /usr/bin. La regola informale era: le cose "essenziali" vanno a /bin, "il resto" va a /usr/bin. Lo stesso con /lib. Non passò molto tempo prima che /usrdiventasse affollato di dir relativi al sistema, mescolati con dir utente. Così /homeè nato, per mantenere tutte le directory relative all'utente e mantenere /usrpulite solo le "cose" del sistema.

Questo era molto prima che esistesse FHS. Quando è stato creato, ha abbracciato (e formalizzato) la tradizione attuale e mantenuto il nome /usr, anche se a quel tempo non aveva più nulla a che fare con "utente". Quindi sì, i nomi di fantasia " U NIX s ource r epository" o " U NIX s istema r Pagine Ingrosso" sono tutti nomi inventati, ed è troppo tardi per rinominare comunque. (ma non troppo tardi per unirci /bin)

"Ok, che dire /usr/sbin?" , tu chiedi. Accidenti, speravo che ti fossi dimenticato. Ok ... /usr/sbinè per i comandi che possono essere (o sono significativi solo quando) eseguiti rootdall'utente, come mounte fdisk.

"Ma non è quasi uguale /bin?" . Sì certo, ma ...

"Aspetta, allora perché c'è /sbinanche un ? Non ha alcun senso!" . Beh, questo è a causa di ... err .. humm ..

Guarda, una scimmia a 3 teste dietro di te!

Ok, si spera, ti sei distratto abbastanza. Andare avanti...

(se pensi che io stia tradendo, sì, hai ragione. Ma lo sono anche i comandi essenziali "risposta ufficiale" che possono essere eseguiti solo da root e devono essere disponibili anche prima di montare /"). La verità è: la linea è davvero sfocata, e ci sono molti nomi legacy che sono semplicemente "bloccati" e ora è abbastanza difficile liberarsene.

Maggiori informazioni sul caso per l' /usrunione , dai systemddocumenti:

La giustificazione storica per / bin, / sbin e / lib separata da / usr non si applica più oggi. Sono stati divisi per avere strumenti selezionati su un disco rigido più veloce (che era piccolo, perché era più costoso) e per contenere tutti gli strumenti necessari per montare la partizione più lenta / usr. Oggi, una partizione / usr separata deve già essere montata dagli initramfs durante l'avvio iniziale, rendendo così la giustificazione per un moot diviso. Inoltre, molti strumenti in / bin e / sbin nello status quo hanno già perso la capacità di funzionare senza un pre-montato / usr. Non esiste più alcun motivo valido per distribuire il sistema operativo su più gerarchie, ha perso il suo scopo.

E una lettura straordinaria sulla /usrscissione e la sua logica, di Rob Landley:

Comprensione bin, sbin, usr / bin, usr / sbin split

Al giorno d'oggi

Attualmente, per quanto riguarda le directory di installazione, il modo migliore per capire è pensare in questo modo:

  • /usr - tutti i file di sola lettura e di sistema installati dal (o forniti dal) sistema operativo

  • /usr/local- file di sola lettura a livello di sistema installati dall'amministratore locale (di solito tu). Ed è per questo che la maggior parte dei nomi di directory da /usrè duplicata qui.

  • /opt- un'atrocità intesa per software a livello di sistema, di sola lettura e autonomo . Cioè, il software che non dividere i propri file su bin, lib, share, includecome ben educati software dovrebbe.

  • ~/.local- la controparte per utente di /usr/local, ovvero: software installato da (e per) ciascun utente

  • ~/.local/opt - la controparte per utente di /opt

Quindi dove installare il software?

L'elenco sopra è già metà della risposta alla tua domanda Oracle JDK, almeno fornisce diversi indizi. L'elenco di controllo per "Dove devo installare il software X?" passa per:

  • È un software completamente autonomo, a directory singola, come Eclipse IDE e altre app java scaricate, e vuoi che sia disponibile per tutti gli utenti? Quindi installare in/opt

  • Come sopra, ma non ti interessano gli altri utenti e voglio installarlo solo per il tuo utente? Quindi installare in~/.local/opt

  • I suoi file sono suddivisi su più dir, come bine share, come i software tradizionali compilati e installati ./configure && make && sudo make install, e dovrebbero essere disponibili per tutti gli utenti? Quindi installare in/usr/local

  • Come sopra, ma solo per il tuo utente? Quindi installare in~/.local

  • Software installato dal sistema operativo o tramite gestori di pacchetti (come Software Center) e, soprattutto, quali modifiche locali potrebbero essere sovrascritte quando Update Manager lo aggiorna a una nuova versione ? Va a/usr

Appunti:

  • Questo spiega perché il prefisso di installazione predefinito per il software compilato è /usr/locale perché è necessario modificarlo ./configure --prefix=$HOME/.localquando si installa il software solo per il proprio utente

  • Potresti aver notato che tutte le directory sopra sono di sola lettura (tranne, ovviamente, quando installi / rimuovi software). I file scrivibili (come i file di configurazione) di solito vanno in /etc(per il software a livello di sistema) e ~/.config(per le impostazioni per utente). Anche se molti software legacy (e, purtroppo, anche alcuni moderni) usano ~/.<software-name>, ingombra la cartella home con miliardi di dir e file.

  • ~/.locale ~/.confignon fanno parte delle specifiche FHS. FHS non si occupa della cartella principale dell'utente. Sono un tentativo di XDG, un'altra organizzazione standard orientata verso gli ambienti desktop (come Gnome, KDE e Unity), per cercare di stabilire alcune convenzioni riguardanti una struttura della casa dell'utente. Non tutto il software lo aderisce (ad esempio, ~/.local/binnon è predefinito dall'utente $PATH, mentre per logica dovrebbe) e nessun utente è costretto a seguirlo, ma entrambi ottengono molti vantaggi di interoperabilità se lo fanno.

Spero che questo aiuti a chiarire un po 'le cose. Sentiti libero di chiedere qualsiasi cosa così posso migliorare la risposta!

(e spero anche che i puristi non mi uccidano per un linguaggio e una spiegazione estremamente informali. Era intenzionale e sicuramente ha molte inesattezze, ma credo che sia un buon modo per fare in modo che un nuovo arrivato abbia una breve visione d'insieme sull'installazione directory razionali)


1
Lo hai riassunto in modo molto conciso e sì, è vero, la risposta completa è una storia molto più lunga di quanto sopra!
papashou,

Perchè no? Si applica la stessa logica: un utente malintenzionato può creare un eseguibile sotto la propria home o una sua sottodirectory, che prende il nome da un comando di sistema.
Ignis,

3
@ignis: se un utente malintenzionato ha accesso a creare e modificare file nella casa di un utente, l'utente è già completamente compromesso ed $PATHè irrilevante. L'attaccante può anche cambiare quella via ~/.profile, in modo che il punto è discutibile. ~/.local/binè sicuro (o insicuro, se vuoi) come ~/bin, che è pratica comune nella maggior parte delle distro. L'idea che un utente non dovrebbe avere alcuna directory in cui conservare ed eseguire script personali $PATHè assurda.
MestreLion,

Pertanto, ~/binè sicuro come ~/.profilee $PATHnon mi protegge dai malware gestiti da me (che ha il permesso di scrivere a casa mia). Non sapevo questo file, mi dispiace. Grazie per il chiarimento, scusate il mio commento precedente.
ignis,

Più lunga è la storia, maggiore è il miglioramento / pasticcio che c'è.
smwikipedia,
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.