[inizio] [indice generale] [precedente] [successivo] [indice analitico] [contributi]


56. Gerarchia del filesystem

La struttura dei filesystem 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 filesystem, facendo in modo però che i programmi normali continuino a trovare quello che serve loro, dove si aspettano che sia.

56.1 Organizzazione di una gerarchia

Quando si organizza un filesystem è importante distinguere tra diversi tipi di file:

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 filesystem remoti.

Purtroppo non è detto che la distinzione sia sempre netta.

56.2 Filesystem standard

Nelle sezioni seguenti viene descritta la struttura essenziale (la gerarchia) di un filesystem 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.

56.2.1 / -- la radice

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:

56.2.2 /bin/ e /sbin/ -- binari essenziali

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.

56.2.3 /boot/ -- file statici per l'avvio del sistema

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.

56.2.4 /dev/ -- file di dispositivo

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.

56.2.5 /etc/ -- configurazione particolare del sistema

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:

56.2.6 /home/ -- directory personali degli utenti

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 filesystem secondario montato in questo punto.

56.2.7 /lib/ -- librerie condivise essenziali e moduli del kernel

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:

56.2.8 /mnt/ -- punto di innesto per l'inserzione temporanea di altri filesystem

La directory `/mnt/' è normalmente vuota e serve come punto di collegamento generico per un altro filesystem. 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.

56.2.9 /opt/ -- applicativi aggiunti (add-on)

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>/'.

56.2.10 /proc/ -- informazioni vitali sul kernel e sui processi

La directory `/proc/' è una directory vuota utilizzata per montare il filesystem omonimo. I file (e le directory) contenuti in questo filesystem virtuale sono indispensabili ai programmi che hanno la necessità di accedere alle informazioni sul sistema.

Quando si esegue una copia di sicurezza di tutto il filesystem (backup), questa directory non deve essere copiata. Basterà ricrearla vuota al momento del recupero, con i soli permessi di lettura ed esecuzione (attraversamento): 0444.

56.2.11 /root/ -- directory personale dell'utente root

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 filesystem 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 filesystem.

Comunque, questa collocazione è considerata facoltativa.

56.2.12 /tmp/ -- file temporanei

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 filesystem, 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'.

56.2.13 /usr/ -- gerarchia secondaria (dati statici e condivisibili)

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.

56.2.13.1 /usr/X11R6/ -- X, versione 11R6

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/'.

56.2.13.2 /usr/bin/ e /usr/sbin/ -- binari non essenziali

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 filesystem 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
...

56.2.13.3 /usr/games/ -- giochi e programmi educativi

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/'.

56.2.13.4 /usr/include/ -- file di intestazione

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.

56.2.13.5 /usr/lib/ -- librerie per la programmazione e per gli applicativi

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/'.

56.2.13.6 /usr/local/ -- programmi locali

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 filesystem 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:

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.

56.2.13.7 /usr/share/ -- dati indipendenti dall'architettura

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:

Oltre a queste directory, potrebbero esserne aggiunte altre, specifiche di particolari applicazioni o gruppi di queste.

56.2.13.8 /usr/share/man/ -- pagine di manuale

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 18.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/'.

56.2.13.9 /usr/share/misc/ -- file di dati vari

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'.

56.2.13.10 /usr/src/ -- sorgenti

È 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/'.

56.2.14 /var/ -- dati variabili

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/'.

56.2.14.1 /var/cache/ -- directory per la memorizzazione transitoria

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:

56.2.14.2 /var/lock/ -- file di lock

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.

56.2.14.3 /var/log/ -- file delle registrazioni

La directory `/var/log/' contiene i file delle registrazioni: sia quelli utilizzati dal registro del sistema, sia quelli di altri programmi.

56.2.14.4 /var/mail/ -- caselle postali degli utenti

La directory `/var/mail/' viene usata per contenere i file delle caselle postali degli utenti, quando queste non sono distribuite nelle rispettive directory personali.

56.2.14.5 /var/opt/ -- dati variabili per gli applicativi aggiuntivi

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>/

56.2.14.6 /var/run/ -- dati variabili di esecuzione (run-time)

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.

56.2.14.7 /var/spool/ -- code di dati

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:

56.2.14.8 /var/state/ -- informazioni sullo stato

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.

56.2.14.9 /var/tmp/ -- file temporanei preservati all'avvio del sistema

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.

---------------------------

Appunti Linux 2000.04.12 --- Copyright © 1997-2000 Daniele Giacomini --  daniele @ pluto.linux.it


[inizio] [indice generale] [precedente] [successivo] [indice analitico] [contributi]