Directory standard e / o comuni su sistemi operativi Unix / Linux


25

Proveniente dal mondo Windows, ho trovato la maggior parte dei nomi delle directory delle cartelle abbastanza intuitivi:

  • \Program Files contiene file utilizzati dai programmi (sorpresa!)

  • \Program Files (x86) contiene file utilizzati da programmi a 32 bit su sistemi operativi a 64 bit

  • \Users(precedentemente Documents and Settings) contiene i file degli utenti, ovvero documenti e impostazioni

    • \Users\USER\Application Data contiene dati specifici dell'applicazione

    • \Users\USER\Documents contiene documenti appartenenti all'utente

  • \Windows contiene file che appartengono al funzionamento di Windows stesso

    • \Windows\Fonts archivia i file dei caratteri (sorpresa!)

    • \Windows\Temp è una directory temporanea globale

eccetera. Anche se non avevo idea di cosa facessero queste cartelle, avrei potuto indovinare con buona precisione i loro nomi.

Ora sto dando una buona occhiata a Linux e mi sto confondendo su come orientarmi nel file system.

Per esempio:

  • /bincontiene file binari. Ma così fanno /sbin, /usr/bin, /usr/sbin, e probabilmente più che io non so. Quale è quale?? Qual'è la differenza tra loro? Se voglio fare un binario e metterlo da qualche parte in tutto il sistema, dove lo metto?

  • /mediacontiene file system multimediali esterni. Ma anche così /mnt. E nessuno dei due contiene nulla sul mio sistema al momento; tutto sembra essere dentro /dev. Qual è la differenza? Dove sono le altre partizioni sul mio disco rigido, come le C:e D:che erano in Windows?

  • /homecontiene i file e le impostazioni dell'utente. È molto intuitivo, ma poi cosa dovrebbe andare /usr? E come /rootmai è ancora separato, anche se è un utente con file e impostazioni?

  • /libcontiene librerie condivise, come le DLL. Ma anche così /usr/lib. Qual è la differenza?

  • Che cosa è /etc ? Significa davvero "et cetera" o qualcos'altro? Che tipo di file dovrebbe andare lì - globale o locale? È un tuttofare per cose che nessuno sapeva dove mettere o c'è un caso d'uso particolare per questo?

  • Che cosa sono /opt, /proce /var? Cosa rappresentano e a cosa servono? Non ho visto nulla di simile in Windows *, e non riesco proprio a capire a cosa potrebbero servire.

Se qualcuno può pensare ad altri luoghi standard che potrebbero essere utili da conoscere, sentiti libero di aggiungerlo alla domanda; speriamo che questo possa essere un buon riferimento per persone come me, che stanno iniziando a familiarizzare con i sistemi * nix.

* OK, è una bugia. Ho visto cose simili in WinObj, ma ovviamente non su base regolare. Tuttavia, non so ancora cosa facciano su Linux.


1
Grazie per mantenere un buon spirito di apprendimento. Questo argomento è spesso controverso. Vedi la mia risposta a questa domanda per alcune spiegazioni extra sulle differenze fondamentali tra le strutture del file system in Windows vs Linux.
Caleb,

Non pensare a "usr" come l'abbreviazione di "utente" ma di "Unix System Resources" (anche se probabilmente è un backronym poiché conteneva le directory degli utenti anni fa) ( linux-training.be/files/books/html /fun/ch09s08.html ).
Lgeorget,

Non serve a nulla tentare di giustificare la criptica denominazione di directory di Unix / Linux / etc su Windows (o Mac OS X). È così com'è.
Andrew Wolfe,

A partire dal 2017, la struttura delle cartelle di Windows è un casino completo. C:\Program Files, C:\ProgramData, %HOME%\AppData\Local, %HOME%\AppData\LocalLow, C:\Windows\SystemApps... Tutti gli esempi in cui si possono trovare gli eseguibili in Windows. E non parlerò nemmeno dei file di configurazione e del registro, non voglio essere ancora più depresso. PS: lavoro principalmente su Windows.
rsenna,

Risposte:


29

Le distribuzioni Linux usano FHS: http://www.pathname.com/fhs/pub/fhs-2.3.html

Puoi anche provare man hier.

Cercherò di riassumere le risposte alle tue domande dalla cima della mia testa, ma ti consiglio vivamente di leggere attraverso l'FHS:

  • / bin è per file binari di sistema non superutente
  • / sbin è per i binari del sistema superutente (root)
  • / usr / bin e / usr / sbin sono rispettivamente per binari condivisi non-superuser o superuser non critici
  • / mnt serve per montare temporaneamente una partizione
  • / media serve per montare contemporaneamente più supporti rimovibili
  • / dev contiene i file del dispositivo di sistema; è una lunga storia :)
  • La cartella / usr e le sue sottocartelle possono essere condivise con altri sistemi, in modo che possano accedere agli stessi programmi / file installati in un unico posto. Poiché / usr si trova in genere su un filesystem separato, non contiene file binari necessari per portare il sistema online.
  • / root è separato perché potrebbe essere necessario portare il sistema online senza montare altre directory che potrebbero trovarsi su partizioni / dischi rigidi / server separati
  • Sì, / etc sta per "et cetera". I file di configurazione per il sistema locale sono memorizzati lì.
  • / opt è un luogo in cui è possibile installare programmi scaricati / compilati. In questo modo è possibile tenerli separati dal resto del sistema, con tutti i file in un unico posto.
  • / proc contiene informazioni sul kernel e sui processi in esecuzione
  • / var contiene file di dimensioni variabili come registri, posta, pagine Web, ecc.

Per accedere a un sistema, generalmente non è necessario / var, / opt, / usr, / home; alcune delle directory potenzialmente più grandi su un sistema.

Uno dei miei preferiti, che alcune persone non usano, è / srv. È per i dati ospitati tramite servizi come http / ftp / samba. Ho visto / var usato molto per questo, che non è proprio il suo scopo.


Buona panoramica che affronta le domande specifiche. Nota che alcune distro usano /home/users/usernameper gli utenti e /home/services/servicenameper quello che dici /src. Penso che questo funzioni meglio in quanto è più versatile da partizionare. Puoi averlo sulla sua stessa partizione o utilizzare la stessa partizione e i tuoi dati utente, che è spesso quello che voglio fare.
Caleb,

+1 grazie per il link e le descrizioni, sono fantastici! :)
Mehrdad,

/ usr dovrebbe contenere file specifici delle applicazioni presenti sul sistema operativo e / o file di terze parti. Non è condivisibile per via intriniscente! Sebbene LSB sostenga che questi siano mantenuti in / opt. / usr / share d'altra parte può contenere file condivisibili su macchine di diverse architetture / versioni del sistema operativo. Questi sono tutti solo le convenzioni però! È del tutto possibile (anche se un sacco di duro lavoro) utilizzare una struttura completamente diversa. Esistono altre convenzioni - come Oracle Optimal Flexible Architecture
symcbean del

1
Un'altra cosa da tenere a mente su Unix è il concetto che " tutto è un file " (o almeno sembra uno). Ad esempio, le cose in / proc sembrano file e directory, ma i contenuti sono realmente creati dinamicamente dal kernel quando vi si accede. Ciò significa che è possibile utilizzare gli stessi strumenti (ls, cat, ecc.) Per accedere a queste informazioni.
KeithB,

1
@symcbean Dall'FHS: "... / usr è dati condivisibili, di sola lettura. Ciò significa che / usr deve essere condivisibile tra vari host conformi a FHS ...". Ovviamente alcuni file dipendono dall'architettura e alcune distribuzioni prevedono gerarchie di directory selvaggiamente diverse. La soluzione è fare i compiti, come un buon amministratore :)
bhinesley,

18

Non risponderò su cosa significano tutti (altri hanno), ma darò un piccolo contesto storico.

Innanzitutto, ricorda che UNIX si avvicina ai 40 anni, ai tempi dei nastri di carta e dei terminali a codice fisso da 300 baud ai mainframe (il sistema Windows XP ha quasi 10 anni). La digitazione è stata lenta e la necessità di efficienza nella battitura ha superato molte altre considerazioni. Questo è il motivo dei comandi di base molto brevi (ad esempio 'ls', 'cat', 'cc', 'dd', ecc.). Lo stesso valeva per le strutture di directory. Il pensiero era che se il comando era composto da più di tre o quattro caratteri, il nome era troppo lungo.

La directory / usr originariamente conteneva le home directory dell'utente poiché la maggior parte dei comandi erano in / bin e tutti i file del dispositivo erano in / dev. In seguito si pensò di rendere piccola l'unità primaria (il filesystem di root, '/') per tempi di avvio più rapidi. Quindi nacquero altre strutture come / usr / bin, / usr / include e / usr / lib, dove / usr era un "drive" separato. Molto più tardi, si pensava di avere le home directory dell'utente in / home, l'ennesimo disco. E molto più tardi, avere un / var (abbreviazione di variabile / modificabile). La directory / etc significava 'et cetera' poiché quella era la posizione generale di tutti i file di configurazione del sistema. / Mnt è stato usato come luogo temporaneo per accedere a un'unità (spesso un'unità di backup). Directory come / opt, / proc e / media sono arrivate molto più tardi.

C'è molto che viene lasciato fuori (come / usr / local e / net), ma questo fornisce una breve descrizione del perché i nomi sono "meno intuitivi".


2
+1 Adoro il contesto storico, organizza il mio cervello. :) Grazie per aver dedicato del tempo a scrivere questo!
Mehrdad,

5

Come già accennato qui, le distribuzioni Linux utilizzano principalmente l'FHS, vedi qui per una panoramica simile a un tutorial, particolarmente adatta a qualcuno che viene da Windows.

Come nota, le directory di Windows sembrano intuitive, superficialmente. Ma lascia che ti chieda, dove appartengono le impostazioni di un programma, come *.inifile nella cartella dei programmi, nel Documents and Settings\User( \Application Datao \Local Settings\Application Data) o nel famigerato registro? nessuno lo sa, nemmeno Microsoft. E così possiamo continuare all'infinito.


1
Penso che i nomi delle cartelle di Windows 7 siano migliori. cioè AppData \ Roaming vs. AppData \ Local: descrivono il tipo di dati presenti. Per quanto riguarda le informazioni di configurazione: penso di sapere dove metterlo quando lo vedo, ma non riesco a descriverlo bene, sono d'accordo. :)
Mehrdad,
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.