Capitolo 9. Il filesystem di Linux

Sommario
9.1. Tutto è un file
9.1.1. I diversi tipi di file
9.1.2. Inodi
9.2. Collegamenti
9.3. Pipe "anonime" e pipe con nome
9.4. File "speciali": file in modalità a caratteri e file in modalità a blocchi
9.5. I link simbolici e le limitazioni degli "hard" link
9.6. Attributi dei file

Se avete letto il Manuale utente probabilmente avrete già incontrato i concetti di proprietà dei file e di permessi di accesso, ma per capire davvero il filesystem di Unix (e questo vale anche per il filesystem ext2fs di GNU/Linux) è necessario ridefinire il concetto stesso di file. Uno dei motivi è che:

9.1. Tutto è un file

Qui "tutto" significa davvero tutto: un disco rigido, una partizione sul disco, una porta parallela, una connessione a un sito web, una scheda Ethernet, tutte queste cose sono dei file. Persino le directory sono file. GNU/Linux è in grado di riconoscere molti tipi di file oltre ai file e alle directory standard. Notate che con tipo di file qui non ci riferiamo al contenuto di un file: per GNU/Linux e qualsiasi altro sistema Unix, un file, che si tratti di un'immagine GIF, di un file binario o di qualsiasi altro tipo, non è altro che una sequenza di byte. L'operazione di distinzione dei file in base al loro contenuto viene lasciata alle applicazioni.

9.1.1. I diversi tipi di file

Come ricorderete, quando impartite il comando ls -l, il carattere subito prima dei diritti di accesso identifica il tipo di file. Abbiamo già visto due tipi di file: file normali (-) e directory (d). Se cominciate a esplorare la struttura delle directory del vostro sistema, ed elencate il contenuto delle directory, troverete anche qualcuno dei seguenti:

  1. File in modalità a caratteri: questi sono file di sistema speciali (come /dev/null, che abbiamo già incontrato), o periferiche (porte parallele o seriali), che hanno in comune il fatto che il loro contenuto (se ne hanno) non è bufferizzato (in altre parole, non sono conservati in memoria). File di questo tipo sono identificati per mezzo della lettera 'c'.

  2. File in modalità a blocchi: questi file sono periferiche, e, a differenza dei file carattere, il loro contenuto è bufferizzato. File che rientrano in questa categoria sono, ad esempio, dischi rigidi, partizioni su questi ultimi, drive floppy, lettori CD-ROM e così via. I file /dev/hda, /dev/sda5 sono altrettanti esempi di File in modalità a blocchi. Nella visualizzazione dei risultati di ls -l, questi file sono identificati con la lettera 'b'.

  3. Collegamenti simbolici (noti anche come "link simbolici"): questi file sono molto diffusi, e ampiamente utilizzati nella procedura di avvio del sistema in Linux-Mandrake (si veda in proposito il capitolo I file di avvio del sistema: init sysv). Come suggerisce il nome, il loro scopo è quello di collegare i file in modo simbolico, il che significa che file di questo tipo possono riferirsi a un file esistente oppure no; questo argomento verrà spiegato più avanti in questo capitolo. Molto spesso (e a torto, come vedremo in seguito) sono chiamati "soft link", e sono identificati con una 'l'.

  4. Pipe con nome: nel caso ve lo stiate chiedendo, sì, queste pipe sono molto simili a quelle usate con i comandi shell, ma la loro particolarità è quella di avere dei nomi. Continuate a leggere per saperne di più. Sono molto rare, comunque, ed è assai improbabile che voi ne incontriate una durante le vostre esplorazioni del sistema; in caso questo succedesse, la lettera che le identifica è la 'p'. Per saperne di più, date uno sguardo a Pipe "anonime" e pipe con nome.

  5. Socket: questo è il tipo di file usato per tutte le connessioni di rete. Soltanto alcuni di questi hanno un nome, tuttavia. Soprattutto, esistono diversi tipi di socket, ma solo un tipo può avere un nome nel filesystem. Tuttavia, questo argomento va ben oltre gli obiettivi di questo manuale. File di questo tipo vengono identificati con la lettera 's'.

Ecco un esempio di ciascun file:

$ ls -l /dev/null /dev/sda  /etc/rc.d/rc3.d/S20random /proc/554/maps \
/tmp/ssh-queen/ssh-510-agent
crw-rw-rw-    1 root     root       1,   3 mag  5  1998 /dev/null
brw-rw----    1 root     disk       8,   0 mag  5  1998 /dev/sda
lrwxrwxrwx    1 root     root           16 dic  9 19:12 /etc/rc.d/rc3.d/
  S20random -> ../init.d/random*
pr--r--r--    1 queen    queen           0 dic 10 20:23 /proc/554/maps|
srwx------    1 queen    queen           0 dic 10 20:08 /tmp/ssh-queen/
  ssh-510-agent=
$

9.1.2. Inodi

Gli inode costituiscono, insieme all'assioma "Tutto è un file", il nocciolo fondamentale di un qualsiasi filesystem Unix. Il termine "inode" sta per Information NODE.

Gli inode sono archiviati su disco in una tabella degli inode. Esiste un inode per ogni tipo di file che può essere archiviato dal filesystem, incluse directory, pipe con nome, file in modalità a caratteri, e così via. Il che ci porta a un'altra affermazione famosa: "L'inode è il file". Gli inode costituiscono anche il modo in cui Unix identifica un file in maniera univoca.

Ebbene sì, avete letto bene: sotto Unix, un file non viene identificato in base al suo nome, ma per mezzo del suo numero di inode[1]. La ragione per questo va ricercata nel fatto che uno stesso file può avere più nomi, o anche nessun nome. Il nome di un file, sotto Unix, non è che un'entrata in un inode directory. Questo tipo di entrata viene chiamata collegamento, o link. Passiamo quindi a esaminare i collegamenti in maggior dettaglio.

Note

[1]

Importante: notate che i numeri di inode sono univoci per ogni filesystem, il che significa che su di un altro filesystem può esistere un inode con lo stesso numero. E questo ci porta alla differenza tra inode su disco e inode in memoria: mentre due inode su disco possono avere lo stesso numero, a patto che si trovino su filesystem diversi, gli inode in memoria devono poter disporre di un numero univoco su tutto il sistema. Per garantire l'univocita', si può usare, ad esempio, una tabella hash che associ il numero di inode all'identificatore del dispositivo.


Tux on Star from MandrakeSoft Linux è un marchio registrato di Linus Torvalds. Tutti gli altri marchi e copyright appartengono ai rispettivi proprietari.
Se non diversamente specificato, i diritti di tutto il contenuto di queste pagine e di tutte le immagini sono proprietà di MandrakeSoft S.A. e MandrakeSoft Inc. 2000.
http://www.linux-mandrake.com/