Qual è la motivazione della directory '/ usr'?

88

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

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

    
posta H2ONaCl 02.05.2012 - 18:46

1 risposta

135

Ci sono la versione breve e la versione lunga della risposta ...

Versione breve:

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

Al giorno d'oggi, la distinzione tra "richiesta per l'avvio" è diminuita, poiché la maggior parte delle distribuzioni moderne, inclusa Ubuntu, non può essere avviata correttamente senza più file da /usr . Ed ecco perché c'è un forte movimento verso l'unione di /usr/bin e /bin , quindi probabilmente nel prossimo futuro (forse Ubuntu 12.10?)% Co_de% sarà un link simbolico a /bin .

Ma forse confondi /usr/bin e /usr ? Perché sì, c'è (e dovrebbe essere) un lotto di nomi di directory duplicati. Maggiori informazioni in seguito ...

Versione lunga:

Negli anni '70, in Unix (sì, Unix, molto prima di Linux), i floppy avevano poco spazio (nessun HD, ricordi?), e ad un certo punto i binari del sistema crescevano troppo in numero e dimensioni fino a un punto non si adattavano a un singolo disco e gli sviluppatori dovevano suddividerli su più supporti e creare così nuovi punti di innesto per loro. Il file system /usr/local era pieno, quindi hanno installato i nuovi binari a ... /bin . E /usr/bin era, in quel momento, la loro directory ... utente !

Dopo che la divisione (quasi imbarazzante e spesso raccontata come scherzo / tradizione) si è verificata, hanno iniziato a creare giustificazioni (e criteri) "artificiali" per decidere cosa sarebbe andato a /usr e cosa sarebbe andato a /bin . La regola informale era: roba "essenziale" andare a /usr/bin , "il resto" va a /bin . Lo stesso con /usr/bin . Non passò molto tempo prima che /lib si riempisse di dirs relativi al sistema, mescolati con le directory utente. Così è nato /usr , per mantenere tutte le directory relative all'utente e mantenere /home clean solo per le "cose" di sistema.

Questo accadeva molto prima che esistesse l'FHS. Quando è stato creato, ha abbracciato (e formalizzato) la tradizione corrente e mantenuto il nome /usr , anche se in quel momento 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 ystem r esources "sono tutti nomi inventati, ed è troppo tardi per rinominarlo comunque. (ma non troppo tardi per unire /usr ad esso)

"Ok, che dire di /bin ?" , chiedi. Dannazione, speravo che ti fossi dimenticato. Ok ... /usr/sbin è per i comandi che possono essere (o sono significativi solo quando) eseguiti dall'utente /usr/sbin , come root e mount .

"Ma non è quasi uguale a fdisk ?" . Sì, certo, ma ...

"Aspetta, allora perché c'è anche /bin ? Non ha senso!" . Bene, questo è dovuto a ... err .. humm ..

Guarda, una scimmia a tre teste dietro di te!

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

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

Altro su Caso per / merge , da /usr docs:

  

La giustificazione storica per / bin, / sbin e / lib separata da / usr non si applica più oggi. Sono stati suddivisi 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 / usr più lenta. Oggi, una partizione / usr separata deve essere già montata da initramfs durante l'avvio iniziale, rendendo così la giustificazione per un moot separato. Inoltre, molti strumenti in / bin e / sbin nello status quo hanno già perso la capacità di funzionare senza un / usr premontato. Non c'è più alcun motivo valido per avere il sistema operativo distribuito su più gerarchie, ha perso il suo scopo.

E un'incredibile lettura della suddivisione systemd e della sua logica, di Rob Landley:

Informazioni su bin, sbin, usr / bin, usr / sbin split

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 a livello di sistema installati da (o forniti da) il sistema operativo

  • /usr - 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/local sono duplicati qui.

  • /usr - un'atrocità per software di sistema, di sola lettura e autonomo . Ovvero, un software che non divide i loro file oltre /opt , bin , lib , share come dovrebbe essere un software ben educato.

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

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

Quindi dove installare il software?

L'elenco precedente è già metà della risposta della domanda Oracle JDK, almeno fornisce diversi indizi. L'elenco di controllo su "Dove devo installare il software X?" va avanti:

  • È un software di directory singolo completamente autonomo, come l'IDE di Eclipse e altre app java scaricate, e vuoi che sia disponibile per tutti gli utenti? Quindi installa in /opt

  • Come sopra, ma non ti importa degli altri utenti e voglio installare solo per il tuo utente? Quindi installa in /opt

  • I suoi file si suddividono su più dir, come ~/.local/opt e bin , come il software tradizionale compilato e installato con share , e dovrebbero essere disponibili per tutti gli utenti? Quindi installa in ./configure && make && sudo make install

  • Come sopra, ma solo per il tuo utente? Quindi installa in /usr/local

  • Software installato dal sistema operativo, o tramite gestori di pacchetti (come Software Center), e, soprattutto, che qualsiasi modifica locale potrebbe essere sovrascritta quando il gestore aggiornamenti lo aggiorna a una nuova versione ? Va a ~/.local

Note:

  • Questo spiega perché il prefisso di installazione predefinito per il software compilato è /usr , e perché dovresti cambiarlo in /usr/local quando installi il software solo per il tuo utente

  • Potresti aver notato che tutte sopra le directory sono di sola lettura (tranne, ovviamente, quando installi / rimuovi software). I file scrivibili (come i file di configurazione) di solito vanno a ./configure --prefix=$HOME/.local (per il software di sistema) e /etc (per le impostazioni per utente). Sebbene molti software legacy (e, sfortunatamente, anche alcuni moderni) usano ~/.config , ingombrando la tua cartella home con miliardi di file e dir.

  • ~/.<software-name> e ~/.local non fanno parte della specifica FHS. FHS non tratta la cartella home dell'utente. Sono un tentativo di XDG, un'altra organizzazione standard orientata verso gli Ambienti Desktop (come Gnome, KDE e Unity), per provare ad impostare alcune convenzioni riguardanti una struttura della casa dell'utente. Non tutti i software lo seguono (ad esempio, ~/.config non è nel% di default dell'utente co_de%, mentre per logica dovrebbe) e nessun utente è obbligato 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 così informali. È stato intenzionale e sicuramente ha molte inesattezze, ma credo che sia un buon modo per fare un nuovo arrivato ha una breve panoramica sulle directory di installazione razionali)

    
risposta data MestreLion 11.05.2012 - 22:49

Leggi altre domande sui tag