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 GNU/Linux è necessario ridefinire il concetto stesso di file. Uno dei motivi è che:
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.
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:
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'.
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 CDROM 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'.
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 "System V"). 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 sono chiamati "soft link", e sono identificati con una 'l'.
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.
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= $ |
Si consideri, inoltre, che ext2fs, come tutti gli altri filesystem Unix, archivia i file, qualunque sia il loro tipo, in una tabella inode. . Una caratteristica particolare di ext2fs è che un file non è identificato per mezzo del suo nome, ma con un numero di inode. Non tutti i file, in effetti, hanno un nome. I nomi sono soltanto la conseguenza di un principio più generale: