Il file system di GNU/Linux

Nei sistemi operativi simili a Unix, come GNU/Linux, il file system è il sistema con il quale i file sono posizionati e organizzati. I file comprendono programmi, documenti, basi di dati, file di testo, file dei dispositivi, ecc.

Che cosa è un file?

In inglese, nel lessico comune, file vuol dire 'archivio' o 'raccoglitore'. Nel linguaggio informatico, la parola 'file' indica qualcosa di molto più specifico: nella maggioranza dei sistemi operativi è una collezione di dati memorizzata su qualche supporto di archiviazione (ad esempio il disco fisso) e può contenere un documento di testo, un programma, una immagine, e così via.

In Linux, e in tutti i sistemi operativi simili a Unix, la definizione di file è un po' più ampia. Essa include qualunque sorgente dalla quale è possibile leggere informazioni e qualunque destinazione sulla quale è possibile scrivere informazioni. Tale definizione include non solo gli archivi di dati (come possono essere i file memorizzati su un disco), ma anche qualsiasi periferica fisica. Può sembrare strano ma per Linux sono file (o meglio: sono rappresentati da file) anche la tastiera (sorgente di input), il terminale (destinazione di output), la stampante (altro esempio di destinazione per l'output).

Possiamo distinguere tre tipi fondamentali di file: i file ordinari, le directory e i file speciali (cioè i file dei dispositivi come tastiera, mouse, stampante, ecc.).

File ordinari

I file ordinari sono quelli presenti anche negli altri sistemi e a cui di solito ci si riferisce quando comunemente si parla di file. Comprendono sia i file di testo (che contengono solo caratteri ASCII), sia i file binari (che contengono dati binari non testuali, come i file dei programmi eseguibili).

Directory

Anche le directory sono file. Si tratta di file che contengono informazioni per organizzare e accedere ad altri file. Dal punto di vista tecnico sono dei file, dal punto di vista concettuale sono dei contenitori di file. Le directory possono a loro volta contenere altre directory (sotto-directory) e ciò determina una gerarchia.

File speciali

I file speciali sono quelli usati per rappresentare dispositivi fisici, come terminale, mouse, stampante, ecc.

Sembra strano? Per convincerci che anche lo stesso terminale che usiamo per lavorare sulla riga di comando è un file, vediamo un esempio con il comando cp. Per copiare il contenuto del file hello.c nel file ciao.c, si fa così:

cp hello.c ciao.c

Ma come file di destinazione possiamo anche indicare il nostro terminale, visto che, per Linux, anche il terminale è un file di destinazione per l'output (esattamente come lo era ciao.c). Ma qual è il file del terminale? Per saperlo, usiamo il comando tty:

rossi@saturno:~$ tty
/dev/pts/0

Il sistema ha indicato che il file del dispositivo del terminale ha nome 0 e si trova nella directory /dev/pts (dev sta per device=dispositivo). A questo punto possiamo copiare il contenuto del file hello.c nel file /dev/pts/0. Quale sarà il risultato? Il contenuto del file hello.c verrà visualizzato sul terminale!

rossi@saturno:~$ cp hello.c /dev/pts/0
#include <stdio.h>
int main(void)
{
     printf("Hello, World!");
     return 0;
}

Organizzazione del file system

Il file system dei sistemi operativi come GNU/Linux è organizzato in directory e sotto-directory secondo una gerarchia ad albero.

Questo albero ha origine nella directory radice / che è il genitore di tutte le altre directory. La seguente figura indica l'organizzazione del file system tipico dei sistemi operativi derivati da Unix: in cima all'albero c'è la directory radice /.

pagina web

Nella directory bin ci sono i programmi base del sistema operativo. Molti comandi della shell (come ls, cp, mv, ...) sono memorizzati in questa directory. Si chiama bin perché contiene principalmente file binari. La directory dev contiene i file speciali che rappresentano i dispositivi fisici (device). La directory etc contiene file utili all'amministrazione del sistema. La directory lib contiene i file di libreria per il funzionamento dei programmi. La directory boot contiene i file necessari per avviare il sistema operativo, tra cui vmlinuz che è il kernel di linux, ossia il cuore di tutto il sistema. La directory usr (user file system) è una delle directory più importanti del sistema. Essa contiene file eseguibili, librerie e altre risorse riguardanti il funzionamento dei programmi di utilità dell'utente. Se installate un nuovo programma, come ad esempio il compilatore gcc, il file eseguibile del compilatore finirà nella directory /usr/bin, i file di libreria utili al suo funzionamento andranno in /usr/lib. E così via.