[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [indice analitico] [volume] [parte]


Capitolo 169.   Gerarchia del file system

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.

169.1   Organizzazione di una gerarchia

Quando si organizza un file system è 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 comunque non dovrebbe essere collocato in file system remoti.

Purtroppo non è detto che la distinzione sia sempre netta.

169.2   File system standard

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 i sistemi GNU. Per maggiori dettagli e aggiornamenti si deve consultare l'originale all'indirizzo <http://www.pathname.com/fhs/>.

169.2.1   Directory «/»: 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:

Directory Descrizione
/bin/ binari essenziali;
/boot/ file statici per l'avvio del sistema;
/dev/ file di dispositivo;
/etc/ configurazione particolare del sistema;
/home/ directory personali degli utenti;
/lib/ librerie essenziali e moduli del kernel;
/mnt/ punto di innesto temporaneo;
/opt/ applicativi aggiuntivi;
/root/ directory personale dell'utente root;
/tmp/ file e directory temporanei;
/usr/ gerarchia secondaria;
/var/ dati variabili.

Nel caso particolare dei sistemi GNU/Linux si deve aggiungere la directory /proc/ che contiene informazioni vitali sul kernel e sui processi.

169.2.2   Directory «/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.

169.2.3   Directory «/boot/»: file statici per l'avvio del sistema

La directory /boot/ contiene i file utilizzati dal meccanismo di caricamento del sistema operativo (boot). In particolare può contenere il kernel quando questo non si trova nella directory radice.

Negli elaboratori x86 più vecchi, è necessario che i file contenuti in questa directory, kernel incluso, siano collocati entro il 1 024-esimo cilindro. Quando si utilizzano dischi con un numero di cilindri superiore, può essere necessario collocare questa directory in una partizione separata, che si trovi nella prima parte del disco.

169.2.4   Directory «/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 del sistema che si utilizza; inoltre, eventualmente, può contenere anche il programma MAKEDEV.local per la creazione di file di dispositivo particolari, per uso locale.

169.2.5   Directory «/etc/»: configurazione particolare del sistema

La directory /etc/ contiene una lunga serie di file di configurazione, raccolti eventualmente anche in sottodirectory, che riguardano l'intero sistema e che non possono essere condivisi con altri. Alcune di queste directory sono molto importanti, in particolare quelle descritte nell'elenco seguente:

Directory Descrizione
/etc/X11/ contiene la configurazione per il sistema grafico X, assieme a quella dei gestori di finestre;
/etc/opt/applicativo/ contiene la configurazione specifica di programmi inseriti all'interno della gerarchia /opt/;
/etc/sgml/ contiene la configurazione di SGML;
/etc/xml/ contiene la configurazione di XML;

Benché non sia riconosciuta nello standard FHS, nei sistemi GNU/Linux è molto importante anche la directory /etc/skel/, che contiene i file di configurazione personale predefiniti per i nuovi utenti.

169.2.6   Directory «/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 file system secondario innestato in questo punto.

169.2.7   Directory «/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, potrebbe trovarsi una directory che si articola ulteriormente e contiene i moduli del kernel: modules/.

169.2.8   Directory «/mnt/»: punto di innesto per l'inserzione temporanea di altri file system

La directory /mnt/ normalmente è vuota e serve come punto di collegamento generico per un altro file system.

Spesso, la directory /mnt/ è stata usata con altre sottodirectory, specifiche per il tipo di unità da innestare; per esempio: /mnt/cdrom/, /mnt/floppy/ e simili. Recentemente, per questo scopo, è stata introdotta la directory /media/.

169.2.9   Directory «/opt/»: applicativi aggiunti

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

169.2.10   Directory «/proc/»: informazioni vitali sul kernel e sui processi

La directory /proc/ è una directory vuota utilizzata per innestare il file system omonimo nei sistemi GNU/Linux. 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.

Quando si esegue una copia di sicurezza di tutto il file system, questa directory non deve essere archiviata; infatti, è sufficiente ricrearla vuota al momento del recupero, con i soli permessi di lettura ed esecuzione (attraversamento): 04448.

169.2.11   Directory «/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 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 innestare altri file system.

Comunque, questa collocazione è considerata facoltativa.

169.2.12   Directory «/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 (ammesso che ciò non sia già stato fatto da chi ha organizzato la distribuzione del sistema operativo) è 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 17778, ovvero rwxrwxrwt.

169.2.13   Directory «/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.

169.2.14   Directory «/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, così che normalmente sono necessari (e utili) alcuni collegamenti simbolici elencati sotto.

Collegamento File reale
/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/.

169.2.15   Directory «/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 relative alla distinzione che c'è 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 innestare 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

169.2.16   Directory «/usr/games/»: giochi e programmi didattici

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

169.2.17   Directory «/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 nella directory /usr/include/ 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.

169.2.18   Directory «/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/.

169.2.19   Directory «/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 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:

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.

169.2.20   Directory «/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. Le directory più importanti di questa struttura sono descritte brevemente nell'elenco seguente:

Directory Descrizione
/usr/share/dict/ elenchi di parole;
/usr/share/doc/ documenti vari;
/usr/share/games/ file di dati statici per quanto installato in /usr/games/;
/usr/share/info/ documentazione ipertestuale GNU Info;
/usr/share/locale/ informazioni sulle varie localizzazioni;
/usr/share/man/ documentazione interna standard;
/usr/share/sgml/ dati SGML;
/usr/share/xml/ dati XML;
/usr/share/nls/ Native language support
/usr/share/misc/ varie;
/usr/share/terminfo/ directory del sistema Terminfo per la configurazione dei terminali;
/usr/share/tmac/ macro Troff aggiuntive e opzionali;
/usr/share/zoneinfo/ informazioni sull'ora locale.

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

169.2.21   Directory «/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 43.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/, ma nello stesso modo sono esclusi anche 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/.

169.2.22   Directory «/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 dovrebbe trovare qui il file magic.

169.2.23   Directory «/usr/src/»: sorgenti

È il punto a partire dal quale conviene collocare i sorgenti dei programmi che si vogliono tenere a disposizione.

I sorgenti che riguardano i programmi collocati in /usr/local/ vanno inseriti a partire da /usr/local/src/.

169.2.24   Directory «/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é tale directory deve poter essere accessibile in sola lettura.

Nelle sezioni seguenti vengono elencate alcune delle directory che si diramano da /var/.

169.2.25   Directory «/var/cache/»: directory per la memorizzazione transitoria

La directory /var/cache/ serve a contenere dati transitori provenienti dalle applicazioni. Questi dati 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. Così, tutto ciò che risulta contenuto a partire da questa directory non ha la necessità di essere salvato nelle procedure per le copie di sicurezza. Le directory più importanti che riguardano questa struttura sono descritte brevemente nell'elenco seguente:

Directory Descrizione
/usr/share/fonts/ caratteri tipografici generati localmente;
/var/cache/man/ pagine di manuale formattate;
/var/cache/www/ proxy WWW o dati transitori;
/var/cache/applicativo/ dati transitori specifici di un programma determinato.

169.2.26   Directory «/var/lock/»: file per il controllo dell'accesso alle risorse

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

169.2.27   Directory «/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.

169.2.28   Directory «/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.

La collocazione più logica per questa directory sarebbe /var/spool/mail/, ma gli standard di fatto del passato nei sistemi Unix impongono questa scelta, allo scopo di garantire l'interscambio dei dati anche tra sistemi Unix molto diversi. Per lo stesso motivo, i file che appaiono in questa directory devono avere un nome corrispondente a quello dell'utenza a cui si riferiscono e il formato deve essere quello comune per la posta elettronica (Unix mailbox).

169.2.29   Director «/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/

169.2.30   Directory «/var/run/»: dati variabili di esecuzione

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, assieme ad 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.

169.2.31   Directory «/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.

169.2.32   Directory «/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.

169.3   Riferimenti

Appunti di informatica libera 2007.02 --- Copyright © 2000-2007 Daniele Giacomini -- <daniele (ad) swlibero·org>


Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome gerarchia_del_file_nbsp_system.htm

[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [indice analitico]

Valid ISO-HTML!

CSS validator!