Quali sono i vantaggi della struttura del file system Unix


9

Se installo un'applicazione in Linux, ad esempio Debian / Gnu Linux, i file delle applicazioni vengono copiati in molte directory diverse nel file system.

Alcuni script vanno in / usr / share .. / usr / local altri file in / var .. / log .. etc / e così via.

Per me questo va bene perché ho imparato qualcosa sul file system e la maggior parte delle directory sono lì per contenere i file per uno scopo specifico. Questo si adatta molto bene alla filosofia Unix "fai una cosa e fallo bene"

Ma la mia domanda è: quali sono i vantaggi di una tale struttura di directory? O è semplicemente l'eredità dei vecchi tempi unix. (ad es. rispetto all'utilizzo di una sola finestra, in cui tutti i file di un'applicazione si trovano in una "cartella" specifica)

Risposte:


9

Quello che mi sembra il vantaggio più facile da pensare è che file simili vivono nello stesso albero di directory. File di configurazione in cui vivono /etc, file di registro e / o file di traccia in fase di /var/logesecuzione in cui vivono, file eseguibili attivi /usr/bin, informazioni in fase di esecuzione come file PID /var/run. Vuoi sapere cosa c'è nel file di configurazione NTP? Cambia directory in /etce fare ls ntp*. Volete che alcuni programmi guardino i file eseguibili in modo che alcuni virus di file system tradizionali non li infettino? Tutto dentro /usr/bine ha /usr/local/binbisogno di essere guardato.

Il secondo vantaggio che mi viene in mente è che lo stile di organizzazione Unix promuove una separazione di dati ed eseguibile. Gli eseguibili vivono in una directory ben lontana da dove vivono i template ( /usr/share, probabilmente) e ben lontana da dove vivono i dati. Questa separazione potrebbe essere una delle ragioni per cui Unix / Linux / * BSD hanno una resistenza ai virus del file system maggiore di quella di Windows, o del vecchio Mac pre-OSX.


Questi sono buoni punti. Perché la separazione di file eseguibili e file di dati, modello e configurazione è una ragione per una maggiore protezione dai virus?
Jan Koester,

3
Molti (ma non tutti) i virus e i worm nel mondo si propagano grazie alla capacità di cambiare i dati in eseguibili: overflow dello stack e iniezione SQL e iniezione di codice funzionano tutti in questo modo. I virus macro "Word" si sono propagati almeno in parte perché le macro "Word" sono incluse nei file .doc. La separazione dei dati dall'eseguibile per file è un livello di protezione, mettendo i dati in una directory, eseguibili in un secondo, modelli in un terzo, la configurazione in un quarto pone ancora più ostacoli alla confusione dei dati e all'eseguibile.
Bruce Ediger,

2
L'argomento di separazione di dati ed eseguibili non ha senso. L'organizzazione del file system è a beneficio di un essere umano; non è che ci sia una certa separazione fisica tra i bit che impedisce loro di scambiarsi cootie o altro. La sicurezza di UNIX è storicamente migliore a causa di un modello di autorizzazioni più forte, più rigorosamente applicato in generale.
soffice

@fluffy file system separati offrono leggermente più forte separazione, ma questo punto è parzialmente discutibile in quanto non è possibile separare /bin, /etcdal /.
jw013,

@fluffy: d'accordo, non esiste alcuna separazione "fisica" o è possibile. Ma è una separazione per nome. Il malware deve cercare in un'altra directory (anziché "." O dirname $ 0 o qualcosa del genere) per trovare modelli o altri dati. Non è sicurezza assoluta, non più che chiudere una finestra di vetro è sicurezza assoluta. La sicurezza è un bene economico, con un valore marginale per ogni unità di lavoro aggiuntiva. Ogni piccolo aiuto.
Bruce Ediger,

11

Indipendentemente dall'organizzazione scelta, renderà alcune cose più facili e alcune più difficili.

Organizzare i file per tipo, il modo Unix (in bin, man, lib/python, ...), rende più facile da usare file. Se vuoi eseguire un comando, sai dove trovarlo, indipendentemente dal pacchetto che lo fornisce. Se vuoi cercare nella documentazione, è tutto in un unico posto. Se alcuni programmi forniscono un modulo di evidenziazione della sintassi di Vim, una funzione di completamento zsh o collegamenti Python, il file pertinente si troverà in un posto dove vim / zsh / python può trovarlo.

Unix organizza anche i file secondo schemi di utilizzo. I file di configurazione entrano /etc, i file che non cambiano durante il normale funzionamento entrano /usre i file che cambiano automaticamente entrano /var. I dati dell'utente vanno sotto /home. Questo è molto utile per la gestione della configurazione (gestisci cosa c'è dentro /etcpiù l'elenco dei pacchetti installati). È anche utile definire le strategie di backup: ciò che è dentro /etced /homeè di fondamentale importanza, mentre ciò che è dentro /usrpuò essere facilmente scaricato di nuovo.

Il costo principale del modo Unix è che l'installazione di un software è distribuita in molte directory. Tuttavia, i moderni sistemi unix dispongono comunque di gestori di pacchetti; la gestione dei file in molte directory non è di gran lunga la cosa più complessa che fanno (tenere traccia delle dipendenze è molto utile e più difficile).

Contrastalo con Windows. Windows è iniziato senza la gestione dei pacchetti e ogni applicazione ha creato la propria directory da qualche parte. Tutti i file normalmente si troverebbero in quella directory: programmi, dati statici, dati utente, ... Tranne qualche volta per le librerie i programmi che cadono in una directory di sistema comune senza riguardo ai conflitti ("inferno DLL"). Nel tempo, Windows è diventato multiutente, richiedendo la separazione delle directory degli utenti dalle directory di sistema. Windows ha anche creato un posto centrale per i file di configurazione (di Unix /etc) e alcuni dati di sistema (di Unix/var), il registro. Questo è più un artefatto storico, in gran parte a causa della mancanza di gestione dei pacchetti e della storia precedente come sistema a utente singolo. L'approccio di Windows ha molte limitazioni: non consente ai pacchetti software di interagire facilmente. Ad esempio, la maggior parte dei software installati non finisce nel percorso di ricerca dei comandi predefinito, quindi interagisce male con qualsiasi forma di scripting. Gli installatori in genere forniscono un'icona di menu come un caso speciale, rilasciata in una directory di sistema separata (alla Unix!).

Una limitazione dell'approccio Unix è che non consente facilmente la coesistenza di più versioni di un pacchetto, il che è particolarmente problematico durante l'aggiornamento del pacchetto. Un modo per ottenere il meglio da entrambi i mondi sarebbe quello di decomprimere ciascun pacchetto nella sua directory (una /optstruttura) e creare foreste di collegamenti simbolici dalle directory dei pacchetti a una /usrstruttura. Questo è ciò che fa software come stow .

In sintesi, l'approccio Unix semplifica l'utilizzo dei file, la gestione dei file e la possibilità di interazione dei pacchetti; richiede un software di gestione dei pacchetti, ma è comunque auspicabile. L'approccio Windows semplifica la gestione manuale dei pacchetti, ma deve orientarsi verso il modello Unix per ottenere utili funzionalità.


1
Eccezionale. A mio parere, però, è solo usato per essere più facile da gestire pacchetti individuali. L'avvento del registro di Windows ha cambiato tutto questo e poi alcuni. Non solo è gigantesco e labirintico - lo è anche intenzionalmente - con alcuni valori nel codice byte mentre altri non lo sono e nessuna vera rima o ragione per la struttura. Immagino sia così se vuoi sviluppare un sistema operativo gestito e proteggere segreti commerciali e metodi proprietari: confusione.
Mikeserv,

3

Un vantaggio principale non menzionato sopra, e uno dei motivi storici della struttura, è la separazione fisica su più volumi / dischi disponibili nelle diverse fasi del processo di avvio.

Un altro vantaggio è che le varie directory possono essere montate su volumi / filesystem ottimizzati per i dati della directory. Ad esempio, tmpfsper /run; e /sbinsu supporti / ROM di sola lettura.

Inoltre, i volumi possono essere locali o remoti, personali o condivisi.

Infine, vedi Directory applicazioni per un approccio alternativo (menzionato da @fluffy) utilizzato in UNIX (OS X .app), Linux ( ROX Desktop ) e Windows ( PortableApps.com ).


1

Non ci sono davvero vantaggi in questo layout, a parte il fatto che è facile indovinare dove sono condivisi e file di configurazione per un'applicazione. UNIX ha una lunga eredità di questo tipo di layout e romperlo sarebbe piuttosto difficile. Tuttavia, alcune distribuzioni UNIX hanno cambiato il loro modello: forniscono solo le vecchie posizioni per scopi legacy e altre app sono raggruppate nella sua piccola directory / pacchetto. Mac OS X è l'esempio più evidente di questo, e ci sono alcune oscure distribuzioni Linux che fanno la stessa cosa (e Android fa qualcosa di simile, lo porta solo un po 'oltre e installa e lancia ogni applicazione anche con il proprio ID utente ).

La cosa principale che fornisce una convenzione di filesystem è proprio questa: una convenzione, in modo che le persone sappiano dove cercare i file (sia manualmente che in codice). Non vi è alcuna vera ragione tecnica per essere in un modo sopra l'altro.

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.