" Due giorni dopo, c'era Pooh, seduto sul suo ramo, che faceva dondolare le gambe, e lì, vicino a lui, c'erano quattro vasi di miele..." (A.A. Milne)
Questo capitolo descrive le parti più importanti di un albero delle directory standard di Linux, basato sullo standard FSSTND per i filesystem; descrive come esso viene normalmente diviso in filesystem separati con scopi diversi, e spiega le motivazioni che stanno dietro questo modo di fare. Vengono descritti anche altri tipi di suddivisione.
Questo capitolo è basato sullo standard dei filesystem Linux, FSSTND, versione 1.2 [LFS], che tenta di impostare uno standard per l'organizzazione dell'albero delle directory nei sistemi Linux. Uno standard del genere ha il vantaggio che è più facile scrivere o fare porting del software per Linux e amministrare le macchine Linux, dato che tutto si trova nel posto designato. Non c'è nessuna autorità che impone di uniformarsi allo standard, ma questo ha il supporto della maggior parte, se non di tutte, le distribuzioni Linux, quindi non è una buona idea discostarsi da esso se non per ragioni molto particolari. Il FSSTND tenta di seguire la tradizione Unix e le tendenze più recenti, rendendo i sistemi Linux familiari per chi ha esperienza con altri sistemi Unix e viceversa.
Questo capitolo non è dettagliato come il FSSTND, e gli amministratori di sistema dovrebbero leggere anche quello per avere una comprensione completa dell'argomento; inoltre non descrive tutti i file in dettaglio: lo scopo infatti è quello di dare una visione del sistema dal punto di vista del filesystem. Ulteriori informazioni sui singoli file possono essere trovate in altre parti di questo libro o nelle pagine man.
L'albero delle directory completo è concepito in modo che possa essere diviso in parti più piccole, ciascuna sulla sua partizione o nel suo disco, per ottimizzare le cose in dipendenza dalla dimensione dei dischi stessi e per rendere più semplice il backup ed il resto dell'amministrazione. Le parti principali sono i filesystem radice, /usr, /var e /home (vedere la Figura 3-1), e ciascuna ha uno scopo diverso. L'albero delle directory è stato strutturato in modo che funzioni bene in una rete di macchine Linux che condividano delle parti del filesystem su un dispositivo a sola lettura (ad esempio un CD-ROM), o sulla rete con NFS.
Figura 3-1. Parti di un albero delle directory Unix. Le linee tratteggiate indicano i limiti delle partizioni.
Descriviamo ora i ruoli delle diverse parti dell'albero delle directory.
Il filesystem radice è specifico per ciascuna macchina (generalmente viene immagazzinato su un disco locale, anche se può trattarsi di un disco RAM o di uno in rete) e contiene i file necessari per avviare il sistema e per portarlo ad uno stato tale da poter montare gli altri filesystem. Il contenuto del filesystem radice sarà quindi sufficiente per la modalità a singolo utente; conterrà inoltre gli strumenti per recuperare un filesystem danneggiato o copiare dai backup i file perduti.
Il filesystem /usr contiene tutti i comandi, le librerie, le pagine man e altri file che non vengono modificati durante le normali operazioni. Nessun file in /usr dovrebbe essere specifico per nessuna macchina data, né dovrebbe essere modificato durante il normale uso. Questo permette di condividere i file in rete, risparmiando spazio disco (/usr può arrivare facilmente a centinaia di megabyte) e rendendo l'amministrazione molto più semplice (basta modificare solo l'/usr principale quando si aggiorna un'applicazione, e non c'è bisogno di farlo separatamente su ciascuna macchina). Anche se il filesystem si trova su un disco locale, può essere montato con accesso a sola lettura, per diminuire le possibilità di corruzione durante un crash.
Il filesystem /var contiene file che vengono modificati, come le directory di spool (per la posta, le news, le stampanti eccetera), i file di log, le pagine man formattate ed i file temporanei. Tradizionalmente tutto quello che si trova in /var si trovava in qualche posto sotto /usr, ma questo rendeva impossibile montare /usr a sola lettura.
Il filesystem /home contiene le home directory degli utenti, cioè tutti i veri dati sul sistema. Separare le home directory su un albero o su un filesystem a parte rende molto più semplici i backup: le altre parti in genere non ne hanno bisogno, o almeno non frequentemente (cambiano poco nel tempo). Una /home grande potrebbe dover essere separata in vari filesystem, aggiungendo dei sottolivelli, ad esempio /home/students e /home/staff.
Anche se le diverse parti sono state chiamate fino ad ora filesystem, non è richiesto che si trovino realmente su filesystem diversi; possono essere tenute sullo stesso se il sistema è piccolo e monoutente e si vogliono mantenere le cose semplici. L'albero delle directory può essere diviso in filesystem in modo diverso da quanto spiegato, a seconda di quanto sono grandi i dischi e di come lo spazio è allocato per i vari scopi. La parte importante, piuttosto, è che tutti i nomi importanti funzionino: anche se, ad esempio, /var e /usr sono in realtà sulla stessa partizione, i nomi /usr/lib/libc.a e /var/adm/messages devono funzionare; si possono ad esempio spostare i file sotto /var in /usr/var, e rendere /var un link simbolico a /usr/var.
La struttura dei filesystem Unix raggruppa i file a seconda del loro scopo, cioè tutti i comandi si trovano nello stesso posto, tutti i file di dati in un altro, la documentazione in un terzo e così via. Un'alternativa sarebbe raggruppare i file a seconda del programma a cui appartengono, cioè tutti i file di Emacs in una stessa directory, tutti quelli di TeX in un altra, eccetera. Il problema di quest'ultimo approccio è che rende difficile condividere i file (le directory dei programmi spesso contengono sia file statici che condivisibili, e sia file che cambiano che file che restano invariati) e spesso anche trovare dei file (ad esempio, le pagine man sarebbero in un numero enorme di posti e fare in modo che i programmi di lettura le possano trovare è l'incubo degli amministratori di sistema).