Abbiamo scoperto nei giorni scorsi qualche curiosità sulla shell Linux e, intanto di trovarne altre (se avete qualche curiosità in merito non abbiate paura a chiedere), ci addentriamo in un argomento un pochino più complesso: la struttura del filesystem dei sistemi operativi Linux-based, ovvero quell’insieme di cartelle presenti nel sistema che hanno nomi apparentemente incomprensibili.
L’organizzazione del filesystem di Linux è gerarchica: tutto inizia da una singola directory, non esiste distinzione tra hardware e software (le periferiche hardware in Linux vengono rappresentate come dei file speciali) e qualsiasi parte del sistema è figlia della directory radice. In parole povere, tutto inizia dalla directory root e tutto termina con essa.
Diamo un’occhiata alla struttura del filesystem e all’organizzazione delle cartelle principali: per facilitare ulteriormente le cose a chi ha poca dimestichezza con Linux, ove possibile, sarà specificata la “controparte” Windows.
/ (directory root)
|_ /home
|_ /usr
|_ /lib
|_ /etc
|_ /tmp
|_ /var
|_ /boot
|_ /dev
|_ /mnt
|_ /proc
|_ /opt
Directory /: la directory radice.
La root directory ( / ) è la cartella delle cartelle: in / si trova praticamente tutto, navigare al suo interno significa avere accesso a qualsiasi parte del sistema operativo. In essa si trovano tutte le altre cartelle di sistema (come /usr, /lib, /proc e tutte le altre). Non è immediato comprenderlo, tuttavia le procedure di installazione dei programmi Linux non vanno MAI a creare sottocartelle in / per una questione d’ordine ma utilizzano, come scoprirete in seguito, directory dedicate.
La directory / è accessibile digitando cd / da terminale, oppure scrivendo / nella barra degli indirizzi del file manager. Un’occhiata a chi può accedere ed operare sulla root directory:
malefika@malefika-laptop:~$ stat / File: `/' Size: 4096 Blocks: 8 IO Block: 4096 directory Device: 806h/2054d Inode: 2 Links: 22 Access: (0755/drwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
Le prime due righe ci dicono che il file si chiama /, è “grande” 4096 bytes (come ogni directory) e occupa 8 blocchi. E’ presente sul device che si chiama 806h/2054d (il disco rigido), è collegata all’i-node 2 ed ha in sé altre 20 cartelle (il numero di link meno due, si escludono “.” e “..”).
I permessi associati alla root sono d rwx r-x r-x: la d sta per directory, i primi tre rwx sono i permessi di lettura,scrittura ed esecuzione per l’utente proprietario, i successivi r-x sono i permessi di lettura ed esecuzione per il gruppo, e successivamente appaiono i permessi di lettura ed esecuzione per gli altri. Ciò ci dice che chiunque può leggere e scrivere su / (permessi di lettura ed esecuzione), ma soltanto il proprietario potrebbe eliminarla (permessi di scrittura). Il proprietario di / è l’utente con identificativo 0, quindi il root, e il gruppo proprietario è il gruppo con identificativo 0, il gruppo root.
La directory / è alla base del sistema. Parlando in termini Windowsiani, a livello più o meno logico / potrebbe essere il corrispettivo di C:\ .
Directory /home: le cartelle utente.
Ogni utente ha la sua directory personale (la cosiddetta home directory utente), e tutte le directory personali si trovano, per default, nella directory /home (che è modificabile o eliminabile soltanto dall’utente root). Se, ad esempio, il vostro nome utente è malefika, la vostra cartella personale sarà /home/malefika.
In ogni directory personale saranno presenti le directories Documenti, Immagini, Desktop e via discorrendo di ciascun utente, create in fase di creazione dell’utente secondo quanto definito in un preciso file (/etc/skel).
Ogni directory personale è di proprietà dell’utente: i permessi sulle cartelle personali variano di sistema in sistema, in generale però queste possono essere lette,modificate e cancellate dall’utente proprietario (e dall’utente root, che può tutto) e visualizzate in sola lettura da tutti gli altri. Discorso a parte va fatto per la directory utente del superutente, presente direttamente in /root, a cui solo e soltanto il root può accedere.
malefika@malefika-laptop:~$ stat /home File: `/home' Size: 4096 Blocks: 8 IO Block: 4096 directory Device: 806h/2054d Inode: 131076 Links: 4 Access: (0755/drwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root) malefika@malefika-laptop:~$ stat /home/malefika File: `/home/malefika' Size: 12288 Blocks: 24 IO Block: 4096 directory Device: 806h/2054d Inode: 131487 Links: 59 Access: (0755/drwxr-xr-x) Uid: ( 1000/malefika) Gid: ( 1000/malefika) malefika@malefika-laptop:~$ stat /root File: `/root' Size: 4096 Blocks: 8 IO Block: 4096 directory Device: 806h/2054d Inode: 393222 Links: 11 Access: (0700/drwx------) Uid: ( 0/ root) Gid: ( 0/ root)
In termini Windows parlando, la directory /home è una sorta di “C:\Users”.
La directory /usr: il jolly.
Nella directory /usr ci sono – per semplificare molto il discorso – i file di sistema che possono essere condivisi in un sistema distribuito tramite NFS (tante macchine che usano lo stesso sistema operativo) e tutte le informazioni relative ai programmi installati sul sistema (nonché i programmi stessi) :
- in /usr/bin in genere sono presenti i file binari (le applicazioni);
- in /usr/lib sono presenti i file di libreria per il funzionamento dei programmi installati;
- in /usr/games sono generalmente presenti i file necessari al funzionamento dei giochi;
- in /usr/include sono presenti gli header di libreria (per la compilazione delle applicazioni);
- in /usr/share sono presenti i dati relativi alle varie applicazioni, tra cui le pagine di manuale (una specie di C:\Users\AppData\Roaming);
- in /usr/sbin sono di solito presenti i programmi che permettono di agire sul sistema soltanto da superutente;
- in /usr/src possono essere presenti troveremo i sorgenti dei programmi (anche se, di norma, vi si trovano soltanto i sorgenti del kernel).
Per il discorso /usr/local bisogna andare un po’ indietro nel tempo: tempo fa non esistevano i pacchetti autoinstallanti per Linux, tutte le installazioni andavano eseguite con un processo di compilazione manuale. Aggiornare un pacchetto spesso era piuttosto pericoloso perché si sarebbe potuti incorrere in errori: nella cartella /usr/local (quasi identica a /usr) venivano spostati i pacchetti che non dovevano essere aggiornati tramite rete per nessuna ragione, nonché tutto ciò che non poteva (né doveva) essere condiviso con altre macchine: praticamente qualsiasi cosa dovesse essere installata soltanto localmente e non aggiornata.
Piccolo appunto: tutti gli eseguibili presenti in /usr/bin, /usr/local/bin, o /usr/sbin sono eseguibili da terminale senza specificare il path assoluto. La directory /usr (e tutte le sue sottodirectory) sono accessibili da tutti, ma modificabili soltanto dall’utente root.
In pratica, la directory /usr è qualcosa del tutto simile a C:\Windows.
Le directory /lib, /etc, /tmp, /var e /boot
La directory /lib contiene un’altra parte delle librerie di sistema. La directory /etc, invece, contiene tutte le impostazioni relative agli applicativi di sistema (ad esempio la configurazione del server X, la configurazione del desktop manager, la configurazione di rete e firewall, la configurazione del controllo energetico e via dicendo).
La directory /tmp è quella atta a memorizzare tutti i file temporanei. Nella directory /var vengono scritte le informazioni generate dai programmi in esecuzione, come ad esempio informazioni su data di inizio e fine esecuzione, dump di crash, log e quant’altro (celeberrima è la directory /var/log). Nella directory /boot, invece, sono presenti tutti i file relativi all’avvio del sistema.
Tutte le cartelle sovracitate, di default, sono visualizzabili da tutti e modificabili soltanto dal superutente.
La directory /dev
Come già detto all’inizio, in Linux anche le periferiche hardware vengono viste come file: speciali, pur sempre file. E’ proprio nella directory /dev che si trovano i file relativi a tutte le periferiche hardware che potrebbero essere presenti sul sistema. In /dev troveremo file quali tty – i terminali grafici, cdrom – il lettore cd, hdX o sdX – gli hard disk, audio – la/le periferica/e audio, ram – i ramdisk, input – le periferiche quali tastiere e mouse… e tanti altri tipi di file ancora!
Celeberrimo è il /dev/null, un file speciale che rappresenta un “dispositivo nullo” ed ha la particolarissima caratteristica di fare l’esatto contrario dell’operazione di memorizzazione: memorizzare qualsiasi cosa su /dev/null significa perdere quella cosa. La directory è visualizzabile da tutti ma modificabile soltanto dall’utente root.
La directory /mnt: le periferiche di memorizzazione
Quando si vuol visualizzare il contenuto di una chiavetta USB, di un CD/DVD, di un hard disk esterno o di una partizione diversa da / (o da un punto di mount del sistema) bisognerà montare la periferica che si intende visualizzare. Questa è un’operazione che prima andava necessariamente fatta a mano con i privilegi di root e, per ogni periferica montata, solitamente veniva creata una sottocartella in /mnt.
/mnt era il posto da cui accedere a tutte le periferiche montate sul sistema (una sorta di molto generalizzato “Computer“ in Windows). La maggior parte delle distribuzioni oggi permette di utilizzare l’automount e di montare quindi automaticamente le periferiche connesse al sistema: sebbene la cartella /mnt sia comunque rimasta, queste distribuzioni possono caricare altrove le periferiche montate (ad esempio Ubuntu le carica in /media).
La directory /proc
Ogni processo in esecuzione in Linux occupa delle risorse di sistema (periferiche di input e output, zone di memoria, file aperti e quant’altro) e, per gestire tali processi, il sistema usa una sorta di filesystem che non prende spazio sulla memoria di massa ma è totalmente caricato in RAM: questo filesystem si materializza proprio nella directory /proc. Navigando nella cartella si scopriranno infatti tante directory quanti sono i processi correntemente in esecuzione sul sistema (alcuni nomi corrispondono ai nomi dei processi, altri possono esssere pid). Per visualizzare le informazioni contenute in ogni sottodirectory ci sarà bisogno dei privilegi da superutente.
Ultima ma non di minore importanza: la directory /opt
La directory /opt in teoria serve per l’installazione dei “grandi programmi”, quelli che prevedono molti file a loro carico e che non hanno bisogno soltanto di un file binario (o pochi altri file sparsi per il sistema) per funzionare: per preservare un certo ordine, oltre che per evitare fastidiose e lunghe ricerche, si preferisce installare questi programmi di grandi dimensioni con tutti i loro file annessi e connessi, in una sottodirectory dedicata di /opt.
La directory /opt viene anche utilizzata come cartella di installazione dei programmi non gestiti dal manager di pacchetti della nostra distribuzione o, almeno, di norma dovrebbe essere così. Anche /opt può essere vista un po’ come la directory C:\Programmi.
L'articolo Come è organizzato il filesystem Linux? appare per la prima volta su Chimera Revo - News, guide e recensioni sul Mondo della tecnologia.