[indice generale] [precedente] [successivo] [indice analitico] [note introduttive]

39. 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 link 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 link 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.

39.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 necessariamente essere accessibile anche in scrittura. Ciò che è condivisibile può essere utilizzato da più computer contemporaneamente, il resto no. Ciò che è indispensabile per l'avvio del computer, non può, o non dovrebbe, essere collocato in filesystem remoti.

Purtroppo non è sempre detto che la distinzione sia sempre netta.

39.2 Filesystem standard

Nelle sezioni seguenti viene descritta la struttura essenziale di un filesystem Linux, secondo il documento FHS (Filesystem Hierarchy Standard). Per maggiori dettagli si può consultare l'originale all'indirizzo http://www.pathname.com/fhs.

39.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 radice può essere riassunta dall'elenco seguente:

39.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 normali (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.

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

Nei sistemi 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.

39.2.4 /dev/ - file di dispositivo

La directory /dev/ contiene una lunga serie di file di dispositivo. Perché i vari componenti fisici del computer possano funzionare, occorre che per ognuno di essi sia stato previsto il relativo file di dispositivo, 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 link simbolico.

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.

39.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. In particolare:

39.2.5.1 /etc/X11/ - configurazione di X

La directory /etc/X11/ è il contenitore dei file di configurazione, riferiti a un particolare sistema, dell'ambiente grafico X. Qui dovrebbero trovarsi anche i file di configurazione dei gestori di finestre.

39.2.5.2 /etc/opt/ - configurazione dei programmi collocati in /opt/

I file di configurazione specifici di un sistema, riferiti a programmi collocati nella gerarchia /opt/, si trovano nella directory /etc/opt/. Più precisamente, da questa directory si articolano altre directory con lo stesso nome dell'applicativo a cui si riferiscono: /etc/opt/<applicativo>/.

39.2.6 /home/ - directory home degli utenti

La directory /home/ è normalmente il punto di partenza per tutte le directory home 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.

39.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, che contiene i moduli del kernel:

39.2.8 /mnt/ - mount point 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 relativi dischi e accedevi.

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

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

39.2.11 /root/ - directory home dell'utente root

La directory /root/ è la directory home dell'utente root. Ci sono molti validi motivi per evitare di mescolarla insieme a quelle degli utenti normali. Vale la pena di tenere presente che, così facendo, è possibile impedire gli accessi più facilmente. Inoltre è opportuno che questa directory sia collocata nel filesystem root, 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.

39.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 (RAM disk).

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 un'istruzione di eliminazione di tutti i file contenuti in questa directory, in modo che a ogni avviamento 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.

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

39.2.13.1 /usr/X11R6/ - X, versione 11 release 6

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

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

La directory /usr/bin/ contiene gli eseguibili di uso comune meno importanti. I file al suo interno sono generalmente accessibili in esecuzione a tutti gli utenti.

La directory /usr/sbin/ contiene eseguibili non indispensabili, il cui utilizzo è generalmente 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 gestire funzionalità di rete essenziali per poter montare eventuali filesystem remoti. Tutto il resto, compresi i daemon 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 link 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 completo dell'interprete.

#!/usr/bin/perl
...

39.2.13.3 /usr/games/ - giochi e programmi educativi

La directory /usr/games/ serve per contenere programmi meno importanti destinati al passatempo o all'educazione.

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

39.2.13.4 /usr/include/ - file include

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 questo punto, almeno attraverso link simbolici.

39.2.13.5 /usr/lib/ - librerie per la programmazione e 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/.

39.2.13.6 /usr/local/ - programmi locali

La directory /usr/local/ è il punto di inizio per l'installazione di programmi localmente, senza che questi siano interessati da normali procedure di aggiornamento del software 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 computer, mentre /usr/local/ potrebbe essere la particolarità di ogni computer, o di un gruppo più piccolo.

In generale, questa directory dovrebbe apparire vuota subito dopo l'installazione di 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.

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

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

La directory /usr/share/man/ contiene file di manuale, ovvero la documentazione interna leggibile attraverso il programma man. La directory si suddivide in una struttura che varia a seconda della nazionalizzazione, come descritto nella sezione 12.2.1.

Questa non è l'unica posizione in cui si collocano i file di manuale, ma questi, in particolare, riguardano il sistema in generale e i programmi collocati a partire dalla radice e da /usr/. Sono esclusi quelli che riguardano X, collocati in /usr/X11R6/man/, quelli relativi ai programmi installati localmente che si trovano in /usr/local/man/ e quelli specifici degli applicativi aggiunti che dovrebbero trovarsi in /opt/<applicativo>/man/.

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

39.2.13.8 /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 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 link 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/.

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

39.2.14.1 /var/cache/ - directory di cache

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 archiviato in una procedura di backup.

La struttura essenziale di questa directory è la seguente:

39.2.14.2 /var/lock/ - file di lock

I file 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.

39.2.14.3 /var/log/ - file di log

La directory /var/log/ contiene i file di log: sia quelli utilizzati dal log di sistema, sia quelli di altri programmi.

39.2.14.4 /var/mail/ - caselle postali degli utenti

La directory /var/mail/ viene usata per contenere i file delle caselle postali degli utenti.

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

39.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 attualmente connessi 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.

39.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, della posta inviata e di altri gestori di servizi.

In particolare vanno ricordate le sottodirectory seguenti:

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

39.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 dovrebbero essere cancellato al riavvio del sistema.

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

AppuntiLinux 1998.11.22 --- Copyright © 1997-1998 Daniele Giacomini - daniele@calion.com


[indice generale] [precedente] [successivo] [indice analitico] [note introduttive]