[>a278.html>] [<a276.html<] [^a2.html^]
La struttura dei file system di ogni sistema operativo Unix è diversa da quella degli altri. Spesso, per mantenere la compatibilità con altri ambienti si utilizzano dei collegamenti simbolici. Con essi si può simulare la presenza di directory e file che in realtà non esistono dove si vuole fare sembrare che siano. La tecnica dell'uso di collegamenti simbolici può essere usata anche per personalizzare in qualche modo la struttura del proprio file system, facendo in modo però che i programmi normali continuino a trovare quello che serve loro, dove si aspettano che sia.
Quando si organizza un file system è importante distinguere tra diversi tipi di file:
statici o variabili;
condivisibili o non condivisibili;
indispensabili per l'avvio del sistema o meno.
Ciò che è statico può essere reso accessibile in sola lettura (esecuzione compresa), mentre il resto deve essere accessibile necessariamente anche in scrittura. Ciò che è condivisibile può essere utilizzato da più elaboratori contemporaneamente, il resto no. Ciò che è indispensabile per l'avvio dell'elaboratore, non può, o non dovrebbe, essere collocato in file system remoti.
Purtroppo non è detto che la distinzione sia sempre netta.
Nelle sezioni seguenti viene descritta la struttura essenziale (la gerarchia) di un file system standard, secondo il documento FHS (Filesystem Hierarchy Standard), a cui dovrebbero adeguarsi le distribuzioni GNU/Linux. Per maggiori dettagli si può consultare l'originale all'indirizzo <http://www.pathname.com/fhs>.
La directory radice è quella che contiene tutte le altre. Di solito contiene solo directory con l'unica eccezione del file del kernel che può risiedere qui o in /boot/
. La struttura che si dirama dalla directory radice può essere riassunta dall'elenco seguente:
/bin/
-- binari essenziali;
/boot/
-- file statici per l'avvio del sistema;
/dev/
-- file di dispositivo;
/etc/
-- configurazione particolare del sistema;
/opt/
-- applicativi aggiuntivi;
/tmp/
-- file e directory temporanei;
/usr/
-- gerarchia secondaria;
/var/
-- dati variabili.
La directory /bin/
contiene gli eseguibili di uso comune più importanti. I file al suo interno sono generalmente accessibili in esecuzione a tutti gli utenti. La directory /sbin/
contiene eseguibili allo stesso livello di importanza di /bin/
, ma il cui utilizzo è generalmente di competenza dall'utente root.
La distinzione non è dovuta tanto a motivi di sicurezza, quanto all'esigenza di mettere un po' di ordine tra gli eseguibili. Infatti, i file contenuti in /sbin/
sono generalmente accessibili anche agli utenti comuni (purché i permessi di questi file non siano stati modificati per esigenze particolari), ma questa directory non viene inclusa nell'elenco dei percorsi degli eseguibili (variabile PATH) degli utenti.
La directory /bin/
, in particolare, dovrebbe contenere una shell compatibile con quella di Bourne e una compatibile con la shell C.
La directory /boot/
contiene i file utilizzati da LILO, o da altri sistemi analoghi, per predisporre il caricamento del sistema operativo (boot). In particolare può contenere il kernel quando questo non si trova nella directory radice.
Negli elaboratori i386 è generalmente necessario che i file contenuti in questa directory, kernel incluso, siano collocati entro il 1024-esimo cilindro. Quando si utilizzano dischi con un numero di cilindri superiore, è necessario collocare questa directory in una partizione separata, che si trovi nella prima parte del disco.
La directory /dev/
contiene una lunga serie di file di dispositivo. Perché i vari componenti fisici dell'elaboratore possano funzionare, occorre che per ognuno di essi sia stato previsto il file di dispositivo relativo, in questa directory. In pratica, è come se si trattasse di driver di dispositivo. Spesso, quando si vuole utilizzare un nome predefinito per un dispositivo, si utilizza un collegamento simbolico che punta a quello che serve effettivamente.
Regolando opportunamente i permessi di questi file si controlla l'utilizzo diretto delle unità fisiche da parte degli utenti.
All'interno di questa directory è contenuto il programma MAKEDEV (di solito si tratta di uno script) utile per ricreare o aggiungere eventuali file di dispositivo mancanti, rispettando le convenzioni della distribuzione GNU/Linux che si utilizza.
La directory /etc/
contiene una lunga serie di file di configurazione che riguardano l'intero sistema e che non possono essere condivisi con altri. Oltre a file normali, contiene anche directory, sempre riferite alla configurazione. Tra queste directory, in particolare:
X11/
contiene la configurazione per il sistema grafico X, assieme a quella dei gestori di finestre;
opt/applicativo/
contiene la configurazione specifica di programmi inseriti all'interno della gerarchia /opt/
;
skel/
contiene le configurazioni di partenza per i nuovi utenti;
rc.d/
, o eventualmente un'altra simile, contiene i file utilizzati dalla procedura di inizializzazione del sistema (secondo lo stile System V).
La directory /home/
è normalmente il punto di partenza per tutte le directory personali degli utenti. Se il sistema viene utilizzato da molti utenti, può essere conveniente (e a volte addirittura necessario) dirottare il contenuto di questa directory in un altro disco e di conseguenza in un file system secondario montato in questo punto.
La directory /lib/
è il contenitore dei file di libreria (library) necessari per i programmi di uso generale. Devono trovarsi qui le librerie necessarie agli eseguibili che possono trovarsi in /bin/
e /sbin/
. Le librerie che riguardano solo programmi collocati al di sotto di /usr/
, non appartengono a questa directory.
Assieme ai file di libreria, si trova una directory che si articola ulteriormente e contiene i moduli del kernel:
modules/
.
La directory /mnt/
è normalmente vuota e serve come punto di collegamento generico per un altro file system. Quando si utilizzano sistematicamente alcune unità a disco come CD-ROM, dischetti o altre unità rimovibili, si creano solitamente delle directory apposite discendenti da /mnt/
, come /mnt/cdrom/
, /mnt/floppy/
e simili, per potervi montare i dischi relativi, e quindi accedevi.
La directory /opt/
è il punto di partenza per l'installazione di applicativi addizionali. Tali applicativi dovrebbero risultare collocati ognuno in una propria sottodirectory, nella forma /opt/applicativo/
, e in particolare dovrebbero contenere almeno la directory bin/
(/opt/applicativo/bin/
) ed eventualmente anche man/
(/opt/applicativo/man/
).
Quanto contenuto a partire dalla directory /opt/
deve essere statico, e quindi accessibile in sola lettura, per cui, i file variabili di questi applicativi devono trovarsi all'interno di /var/opt/applicativo/
e i file di configurazione in /etc/opt/applicativo/
.
La directory /proc/
è una directory vuota utilizzata per montare il file system omonimo. I file (e le directory) contenuti in questo file system virtuale sono indispensabili ai programmi che hanno la necessità di accedere alle informazioni sul sistema.
La directory /root/
è la directory personale dell'utente root. Ci sono molti validi motivi per evitare di mescolarla insieme a quelle degli utenti comuni. Vale la pena di tenere presente che così facendo è possibile impedire gli accessi più facilmente. Inoltre è opportuno che questa directory sia collocata nel file system principale, proprio perché l'amministratore deve essere in grado di accedere anche quando il sistema viene avviato in situazioni di emergenza, e non si possono montare altri file system.
Comunque, questa collocazione è considerata facoltativa.
La directory /tmp/
è destinata a contenere file provvisori e potrebbe essere anche collocata in un disco virtuale basato su memoria volatile (disco RAM).
Non sempre i programmi che creano dei file provvisori in questa directory, provvedono poi anche alla loro eliminazione. Se la directory è stata collocata in un disco normale, di tanto in tanto, conviene darci un'occhiata e poi procedere a eliminare tutto quello che non serve.
Volendo è possibile anche inserire in uno script di quelli utilizzati dalla procedura di inizializzazione del sistema un'istruzione di eliminazione di tutti i file contenuti in questa directory, in modo che a ogni avvio del sistema, questa venga ripulita.
Data la sua natura, quando si fanno delle copie di sicurezza del file system, non è il caso di copiare il contenuto di questa directory.
I permessi dati a questa directory sono importanti: devono consentire a chiunque di accedervi in ogni modo e dovrebbero evitare che un utente possa cancellare (inavvertitamente) file di altri utenti. Per questo si attribuiscono normalmente i permessi 1777, ovvero rwxrwxrwt.
La directory /usr/
è molto importante e si scompone in una struttura molto articolata. La gerarchia che parte da questo punto è organizzata in modo da essere statica e condivisibile.
In linea di principio, gli applicativi non devono essere collocati all'interno di questa gerarchia in una directory specifica, ma dovrebbero distribuirsi nel sistema, insieme agli altri. Infatti, l'alternativa corretta è l'utilizzo della gerarchia /opt/
creata appositamente per permettere questo tipo di collocazione degli applicativi. L'ambiente grafico X, che utilizza una propria directory discendente da /usr/
, fa eccezione.
La directory /usr/X11R6/
costituisce un'eccezione all'interno della gerarchia /usr/
, in quanto si tratta del punto di partenza di tutto ciò che compone il sistema grafico X.
Il nome dipende dalla versione e dal rilascio, e per questo sono normalmente necessari (e utili) alcuni collegamenti simbolici elencati sotto.
/usr/bin/X11 -> /usr/X11R6/bin
/usr/lib/X11 -> /usr/X11R6/lib/X11
/usr/include/X11 -> /usr/X11R6/include/X11
I file di configurazione di X, legati al sistema, devono essere collocati in /etc/X11/
.
La directory /usr/bin/
contiene gli eseguibili di uso comune meno importanti. Generalmente, i file al suo interno sono accessibili in esecuzione a tutti gli utenti. La directory /usr/sbin/
contiene eseguibili non indispensabili, il cui utilizzo dovrebbe essere di competenza dell'utente root.
Valgono le stesse considerazioni fatte in occasione della distinzione fatta tra le directory /bin/
e /sbin/
. È opportuno ribadire che quanto contenuto in /bin/
e /sbin/
è essenziale per l'avvio del sistema in situazioni di emergenza, e per gestire funzionalità di rete minime necessarie a montare eventuali file system remoti. Tutto il resto, compresi i demoni per la gestione di servizi non essenziali, deve essere collocato in /usr/bin/
e /usr/sbin/
.
All'interno di /usr/bin/
dovrebbero trovarsi alcune shell utilizzate normalmente per la programmazione (e non quindi per l'interazione con l'utente). In pratica potrebbe trattarsi di /usr/bin/perl
, /usr/bin/python
e /usr/bin/tcl
. Se per qualche motivo non possono trovarsi in questa directory, è almeno opportuno che si predisponga un collegamento simbolico che permetta di avviarle da questo punto. Ciò è necessario per poter realizzare script che possano funzionare in ogni configurazione, dal momento che all'inizio dello script occorre indicare il percorso assoluto dell'interprete.
#!/usr/bin/perl ...
La directory /usr/games/
serve per contenere programmi meno importanti destinati al passatempo o alla didattica.
I file di dati statici di questi dovrebbero collocarsi in /usr/share/games/
, mentre quelli che devono essere modificati (come lo storico dei punteggi raggiunti e cose simili) in /var/games/
.
Raccoglie i file include, o file di intestazione, cioè quelli utilizzati come segmenti standard di sorgenti per i programmi. In pratica, sono quei file che di solito terminano con un'estensione .h
e vengono inglobati automaticamente in un sorgente attraverso le istruzioni #INCLUDE file.
Non tutti i file di questo tipo sono inseriti direttamente in questa directory o in una sua discendente, ma in un sistema ordinato, tutti i file include sono raggiungibili a partire da questo punto, almeno attraverso collegamenti simbolici.
La directory /usr/lib/
contiene i file di libreria necessari per i programmi installati a partire da /usr/
. Il concetto di libreria, viene qui inteso in un senso più ampio di quello utilizzato da /lib/
. Infatti, oltre ai file di libreria veri e propri si possono trovare altri file statici semplicemente accessori agli eseguibili.
Per la precisione, i file contenuti al di sotto di questa posizione, sono considerati come dipendenti dal tipo di architettura, mentre quelli che non dipendono da questa vanno collocati in /usr/share/
.
La directory /usr/local/
è il punto di inizio per l'installazione locale di programmi, senza che questi siano interessati dalle procedure di aggiornamento del software installato nel modo normale.
Questa valenza locale dipende dai punti di vista e dalle esigenze. /usr/local/
potrebbe essere usata come directory di collegamento per un altro file system specifico per l'ambito locale. In pratica, quanto contenuto in /usr/
potrebbe essere condiviso da diversi elaboratori, mentre /usr/local/
potrebbe essere la particolarità di ogni elaboratore, o di un gruppo più piccolo.
In generale, questa directory dovrebbe apparire vuota subito dopo l'installazione di GNU/Linux. Al massimo potrebbe contenere le directory in cui può scomporsi (anche queste vuote). La struttura prevista di /usr/local/
è la seguente:
bin/
,
games/
,
include/
,
lib/
,
sbin/
,
share/
,
src/
.
Il significato e l'utilizzo delle directory appena elencate è equivalente a quelle omonime discendenti da /usr/
, solo che qui hanno un valore relativo a ciò che si installa localmente.
La directory /usr/share/
serve a contenere file di dati statici indipendenti dall'architettura. Ciò rende questa directory condivisibile tra più sistemi operativi, dello stesso tipo e versione, installati su piattaforme differenti. La struttura essenziale di questa directory è la seguente:
dict/
-- elenchi di parole;
doc/
-- documenti vari;
games/
-- file di dati statici per quanto installato in /usr/games/
;
locale/
-- informazioni sulle varie localizzazioni;
man/
-- documentazione interna standard;
nls/
-- Native Language Support
misc/
-- varie;
terminfo/
-- directory del sistema Terminfo per la configurazione dei terminali;
zoneinfo/
-- informazioni sull'ora locale.
Oltre a queste directory, potrebbero esserne aggiunte altre, specifiche di particolari applicazioni o gruppi di queste.
La directory /usr/share/man/
contiene i file delle pagine di manuale, ovvero la documentazione interna leggibile attraverso il programma man. La directory si suddivide in una struttura che varia a seconda della localizzazione, come descritto nella sezione 19.2.1.
Questa non è l'unica posizione in cui si collocano i file delle pagine di manuale, ma questi riguardano il sistema in generale, i programmi collocati a partire dalla directory radice e da /usr/
. Sono esclusi i file riferiti alla documentazione di X, collocati in /usr/X11R6/man/
, e nello stesso modo sono esclusi quelli relativi ai programmi installati localmente che si trovano in /usr/local/man/
. Infine, le pagine di manuale specifiche degli applicativi aggiunti dovrebbero trovarsi in /opt/applicativo/man/
.
La directory /usr/share/misc/
è destinata a contenere file di dati statici di uso vario. In particolare, si dovrebbero trovare qui i file magic
e termcap
.
È il punto a partire dal quale conviene collocare i sorgenti dei programmi che si vogliono tenere a disposizione. In particolare, è importante /usr/src/linux/
utilizzata per contenere i sorgenti necessari a ricostruire il kernel.
La directory /usr/src/linux/
è molto importante anche per altri sorgenti da compilare, perché molti file di intestazione (include), utilizzati anche da altri programmi, sono collocati fisicamente al suo interno. Se si utilizzano diverse versioni di sorgenti per il kernel, è necessario almeno creare un collegamento simbolico che permetta di raggiungere la versione prescelta utilizzando il percorso /usr/src/linux
.
I sorgenti che riguardano i programmi collocati in /usr/local/
vanno inseriti a partire da /usr/local/src/
.
La directory /var/
contiene altre directory e file di uso vario che contengono dati variabili. Questo significa anche che qui c'è un po' di tutto, ma si tratta di tutto quello che non può essere contenuto in /usr/
perché quest'ultima directory deve poter essere accessibile in sola lettura.
Nelle sezioni seguenti vengono elencate alcune delle directory che si diramano da /var/
.
La directory /var/cache/
serve a contenere dati transitori provenienti dalle applicazioni. Tali dati transitori devono poter essere rigenerati dalle applicazioni in caso di necessità, e ciò deve consentire la cancellazione manuale di tali dati senza provocare pregiudizio a queste applicazioni. In tal modo, tutto quanto risulta contenuto a partire da questa directory non ha la necessità di essere salvato nelle procedure per le copie di sicurezza.
La struttura essenziale di questa directory è la seguente:
fonts/
-- caratteri (fonti) generati localmente;
applicativo/
dati transitori specifici di un determinato programma.
I file di lock, cioè quelli che servono a indicare che una certa risorsa è impegnata, dovrebbero essere collocati tutti in /var/lock/
. Ogni file contenuto in questa directory dovrebbe avere il prefisso LCK..
e terminare con il nome del dispositivo (senza il prefisso /dev/
). All'interno del file dovrebbe trovarsi il numero PID del processo che impegna il dispositivo.
La directory /var/log/
contiene i file delle registrazioni: sia quelli utilizzati dal registro del sistema, sia quelli di altri programmi.
La directory /var/mail/
viene usata per contenere i file delle caselle postali degli utenti, quando queste non sono distribuite nelle rispettive directory personali.
La directory /var/opt/
è il punto di partenza per altre directory contenenti i dati variabili degli applicativi aggiuntivi installati in /opt/
. Per la precisione, ogni applicativo che necessita di modificare dati dovrebbe utilizzare una directory con il suo stesso nome.
/var/opt/applicativo/
La directory /var/run/
contiene informazioni che riguardano l'esecuzione dei processi. Si tratta in particolare di informazioni sul PID degli eseguibili in funzione, del file utmp
, dal quale si conosce quali sono gli utenti connessi attualmente, e altri dati transitori.
Per quanto riguarda l'informazione sul numero PID dei processi, questi sono contenuti in file il cui nome utilizza il formato seguente:
programma.pid
Tutto quanto contenuto in questa directory deve essere cancellato all'avvio del sistema.
La directory /var/spool/
è molto importante per tutti i programmi che hanno la necessità di gestire code di elaborazioni. Per esempio, sono collocate sotto questa directory le code di stampa, dei messaggi di posta elettronica inviati e di altri gestori di servizi.
In particolare vanno ricordate le sottodirectory seguenti:
lpd/
utilizzata per le code di stampa;
mqueue/
utilizzata per la posta in uscita;
rwho/
contiene i file di rwhod.
Le informazioni sullo stato dei programmi devono essere contenute nella directory /var/state/
. In particolare, a partire da questa posizione dovrebbe articolarsi il sistema di registrazione dei pacchetti installati della propria distribuzione.
La directory /var/tmp/
è destinata a contenere file temporanei che devono rimanere a disposizione più a lungo rispetto a quanto si fa con /tmp/
. In particolare, il suo contenuto non dovrebbe essere cancellato al riavvio del sistema.