Introduzione a Linux: l'ABC del pinguino

Il Filesystem

In un sistema operativo, il filesystem è tutto ciò che riguarda la gestione dei files e delle cartelle.

Case-sensitive

Prima di entrare nel dettaglio, introduco una particolarità di Unix: i nomi di files sono case sensitive, ovvero fanno distinzione tra maiuscole e minuscole. È quindi diverso chiamare un file "linux.txt", piuttosto che "LINUX.TXT"; la seguente immagine mostra una cartella contenente files con nomi che differiscono soltanto per le lettere maiuscole o minuscole:

Linux è case-sensitive

Windows non è un sistema case-sensitive, infatti la situazione rappresentata qui sopra sarebbe irriproducibile.

Mounting dei dispositivi

Al di là del case-sensitive, il concetto di filesystem in Linux è molto particolare. Chi utilizza Linux per la prima volta di solito si trova spaesato, per la strana struttura che hanno i files nel sistema.

Certo, il concetto di "file" e "cartella" è identico da Windows a Linux. Quello che cambia è la rappresentazione globale dei dispositivi di archiviazione; mi spiego meglio: in Windows tutti i dischi, i lettori cd e gli altri dispositivi sono separati l'uno dall'altro, e ognuno ha la sua icona, le sue cartelle ed i files contenuti al suo interno; in Linux esiste un'unica struttura fondamentale detta filesystem, che contiene l'intero sistema: files e cartelle, dischi rigidi, lettori CD, chiavette USB, ma anche i dispositivi fisici, come il mouse e la tastiera (in Unix tutti i dispositivi sono rappresentati sotto forma di files, ma questo è un aspetto un po' astruso che qui accenneremo soltanto).

Tutti gli oggetti del sistema per essere utilizzati devono trovare un posto nel filesystem.

Un'illustrazione può aiutare a chiarire quello che intendo:

La figura mostra l'esplorazione della stessa cartella (il disco D: di Windows) con Linux (a sinistra) e Windows (a destra). La prima cosa che si nota è che, mentre nella schermata di Windows si capisce chiaramente che "Volume" è il disco D:, in Linux "Volume" sembra essere una cartella come tutte le altre, sottocartella di "media", che a sua volta è sottocartella di "File system" (sopra File system non ci può essere nulla: tutto il sistema è contenuto nel filesystem).

Questo è esattamente quello che succede: in Linux l'accesso ai dischi avviene attraverso una procedura detta mounting (montaggio). Quando si effettua questa operazione, il kernel crea una sorta di "porta magica" tra la cartella di destinazione all'interno del filesystem (in questo caso /media/Volume) e il disco corrispondente. Entrando nella cartella "Volume" l'utente si troverà di fatto nel disco corrispondente, quello che in Windows è chiamato D:. Questo vale anche per gli altri dispositivi, come CD, DVD e chiavette USB: si noti, nell'immagine, che il disco DVD E: è montato nella cartella appena superiore a "Volume".

Fino a non troppo tempo fa il mounting dei dispositivi è stato uno degli sport più detestati dai neofiti del pinguino. Fortunatamente oggi questo avviene completamente in automatico, e l'utente non deve muovere un dito, se non cliccare sull'icona del dispositivo che gli interessa esplorare.

Struttura del filesystem

Addentriamoci nel filesystem, e capiamo come sono strutturate le directories (cartelle) al suo interno. Consiglio di leggere questa sezione tenendo sotto mano una finestra di esplorazione dei files (in Linux, naturalmente), in modo da poter "toccare con mano" le cose che ci sono scritte. I lettori che non hanno a disposizione un sistema Linux probabilmente troveranno questa sezione noiosa, ed hanno quindi licenza di saltarla.

Abbiamo già visto che esiste un livello sopra il quale non si può salire (visibile nella figura qui sopra, a sinistra, con il nome di "File system"), e che contiene l'intero sistema; questa sorta di cartella principale in gergo si chiama root (come il super-utente di cui abbiamo parlato in precedenza), ed è rappresentata con il segno di slash (/). Il nome inglese root directory in italiano significa cartella radice, per indicare il fatto che dalla root directory si dirama l'albero di tutte le altre cartelle.

All'interno della root directory si trovano alcune cartelle di proprietà del sistema, che l'utente non può eliminare o modificare. Queste cartelle, che si trovano ogni sistema Unix, sono le seguenti:

  • /home - È lo spazio riservato agli utenti del sistema. Ogni utente possiede una cartella in /home (ad esempio, la mia è /home/dario, ovvero una cartella di nome dario, contenuta in home), sulla quale ha i permessi di lettura e scrittura. La cartella personale di ogni utente è detta, appunto, home directory; di solito questa cartella è l'unico spazio in cui l'utente ha il permesso di scrivere, ed è utilizzata per contenere documenti, foto e tutti gli altri dati privati.

    Nel sistema ci sono tre utenti: dario, claudio e stefano
    Nel sistema ci sono tre utenti: dario, claudio e stefano. Ad ognuno di essi è associata una cartella all'interno di /home.

  • /root - È la home directory dell'utente root (vedi in fondo a Files e cartelle: proprietari gruppi e permessi, nel paragrafo sulla multi-utenza).

  • /bin - Sta per binaries, e contiene i programmi essenziali per usare il sistema. Gli altri programmi si trovano in /usr/bin

  • /sbin - Contiene programmi per l'amministrazione del sistema, che possono essere eseguiti solo dall'utente root. Altri se ne trovano in /usr/sbin

  • /etc - Contiene i files di configurazione per tutti i programmi installati nel sistema, nonchè per il sistema stesso.

  • /mnt, /media - È la cartella dove vengono montati i dispositivi. Nelle moderne distribuzioni Linux spesso la cartella utilizzata a questo scopo si chiama /media, ma il concetto è lo stesso: se voglio esplorare il contenuto, ad esempio, di un disco rigido (piuttosto che di un cdrom, o di una chiavetta USB), verrà creata una cartella in /media, che sarà la "porta magica" per accedere al dispositivo (vedi sezione precedente, Mounting dei dispositivi).
  • /dev - Sta per devices, e contiene tutto l'hardware della macchina, rappresentato sotto forma di file. Come ho già detto, questo è un aspetto un po' astruso di Unix, che qui non tratteremo.

  • /lib - Sta per libraries, e contiene le librerie condivise presenti nel sistema (in realtà la maggior parte delle librerie si trova in /usr/lib). Una libreria è una collezione di strumenti che possono essere utilizzati dalle normali applicazioni, ma, anche in questo caso, il discorso è piuttosto complesso e non ci addentreremo oltre.

  • /usr - Contiene la maggior parte del software installato nel sistema, utilizzabile da tutti gli utenti (usr sta per user). In particolare in /usr troviamo i programmi veri e propri (/usr/bin), le librerie (/usr/lib), i manuali d'uso (/usr/share/man e /usr/share/doc) e molto altro materiale relativo alle applicazioni.

  • /opt - Contiene applicazioni particolari, che solitamente non rispettano la struttura interna della cartella /usr.

  • /tmp - È una cartella messa a disposizione delle applicazioni, che possono scriverci dati temporanei a piacere (cone la cartella C:\Windows\Temp di Windows).

  • /var - Contiene i files il cui contenuto varia nel tempo, come ad esempio i log delle applicazioni (/var/log), o altre informazioni sui programmi attualmente in esecuzione.

  • /boot - Contiene la cosiddetta "immagine del kernel", il pezzo di sistema operativo che, all'avvio del sistema, viene caricato in memoria prima di ogni altro software.

  • /proc - È una cartella virtuale, ovvero che non si trova realmente sul disco. Rappresenta il contenuto della memoria RAM.

Chi volesse approfondire l'argomento può fare riferimento ai seguenti documenti (richiedono un po' di esperienza per essere seguiti):

  1. Introduzione, storia e filosofia
  2. Un sistema per molti utenti
  3. Kernel e Shell: il sistema invisible
  4. Il Filesystem
  5. Distribuzioni
  6. Tips&Tricks