Se provieni da un ambiente Windows, la prima volta che apri il terminale Linux o un file manager potrebbe essere difficile orientarsi tra le varie directory. Non ci sono dischi C: o D:. Tutto inizia da un singolo punto: la radice, indicata con lo slash /.
Questa struttura segue uno standard rigoroso chiamato FHS (Filesystem Hierarchy Standard). In questo articolo, esploreremo come è organizzato il sistema Linux e perché ogni file ha un posto preciso.
La Radice: Tutto Parte da Qui (/)
In Linux, ogni file, cartella o dispositivo hardware è un ramo di un unico grande albero che parte da /. Non importa se hai dieci dischi rigidi diversi, nel sistema appariranno tutti come sottocartelle della radice.
Directory /bin e /sbin
Queste directory ospitano i binari fondamentali. In /bin risiedono i comandi accessibili a tutti gli utenti (come cat, ls, cp), mentre in /sbin sono allocati i binari riservati alle operazioni di sistema e di manutenzione critica (come fsck o ip). Nelle distribuzioni moderne, queste cartelle sono spesso link simbolici a /usr/bin, a seguito di un processo di unificazione noto con il nome di UsrMerge
Directory /lib e /lib64
Contengono le librerie dinamiche condivise essenziali per i binari di sistema e per i moduli del kernel. Senza questo strato, l’interfaccia tra software e hardware risulterebbe interrotta
Directory /etc
Contiene esclusivamente file di configurazione statici e script di avvio. La natura puramente testuale di /etc facilita il versionamento (tramite tool come Git) e l’automazione tramite orchestratori come Ansible o Terraform
Directory /var
Al contrario di /etc, questa gerarchia è destinata a dati la cui dimensione e contenuto variano costantemente durante l’operatività. Include i log di sistema (/var/log), i database, le code di spool e i file di lock. È prassi comune, in ambito enterprise, allocare /var su una partizione dedicata per evitare che un riempimento anomalo dei log blocchi l’intero sistema
Directory /boot
All’interno di /boot si trovano tre componenti essenziali che permettono il caricamento del sistema:
- Il Kernel Linux (vmlinuz): È il cuore del sistema operativo. Spesso il file è nominato vmlinuz-[versione]. La “z” finale indica che il kernel è compresso per risparmiare spazio e velocizzare il caricamento in RAM
- Initramfs (o Initrd): Un’immagine di un file system temporaneo caricata in RAM. Contiene i driver minimi necessari (ad esempio per i dischi NVMe o i file system RAID/LVM) per permettere al kernel di montare la vera partizione radice (/). Senza questo file, il kernel subirebbe un “Kernel Panic” non trovando i propri componenti
- Configurazione del Bootloader (GRUB/systemd-boot): Contiene le istruzioni che indicano al bootloader quale kernel caricare e con quali parametri
Directory /dev
La directory /dev (abbreviazione di devices) rappresenta l’applicazione pratica del principio fondamentale di Unix: “Everything is a file”. Non si tratta di una directory comune situata sul disco rigido, ma di un filesystem virtuale (solitamente di tipo devtmpfs) generato e gestito dal kernel per permettere alle applicazioni di comunicare con l’hardware tramite le normali chiamate di sistema (open, read, write)
Directory /proc e /sys
Rappresentano filesystem virtuali (in-memory). Mentre /proc è focalizzato sullo stato dei processi e sulle informazioni del kernel (come /proc/cpuinfo), /sys offre una vista strutturata e gerarchica dei dispositivi e dei driver, permettendo la configurazione a caldo dei parametri hardware
Directory /usr
La directory /usr (User System Resources), rappresenta la gerarchia principale per i dati a sola lettura. Contiene la maggior parte delle applicazioni installate, le librerie e la documentazione. È la porzione più voluminosa del filesystem
Directory /home
È l’area destinata alla persistenza dei dati personali degli utenti. La separazione di /home dal resto del sistema è una best practice che permette la reinstallazione o l’aggiornamento della distribuzione senza perdita di dati utente
Directory /root
È “la casa” dell’amministratore di sistema. Non si trova sotto /home per motivi di sicurezza e resilienza: se la partizione /home dovesse fallire nel montaggio, l’utente root deve comunque poter accedere al proprio ambiente per riparare il danno
Directory /opt
È l’area riservata all’installazione di pacchetti software “add-on” di terze parti che non seguono la struttura standard (es. software proprietari o suite aziendali), mantenendo così il sistema base pulito e isolato
Directory /run
Viene utilizzata per la gestione dei dati di runtime volatili dal momento dell’avvio, come i file PID e i socket di comunicazione tra processi. Essendo montata in RAM (tmpfs), il suo contenuto svanisce allo spegnimento
Directory /tmp
Spazio destinato ai file temporanei creati dalle applicazioni. Sebbene simile a /run, il suo utilizzo è meno critico e può essere soggetto a policy di pulizia automatica basate sul tempo dei file presenti al suo interno per gestirne lo spazio
Directory /media e /mnt
La directory /media viene utilizzata per il montaggio automatico di dispositivi rimovibili (USB, CD). La directory /mnt è utilizzata per i montaggi manuali temporanei effettuati dall’amministratore
Schema Gerarchico del Filesystem Linux (FHS 3.0)
Per concludere, di seguito una rappresentazione visuale della gerarchia delle directory in Linux
/ (Root)
│
├── boot/ # File di avvio (Kernel, GRUB, Initrd)
├── etc/ # File di configurazione del sistema
├── home/ # Directory personali degli utenti (es. /home/mario)
├── root/ # Directory personale dell'amministratore (Superuser)
│
├── bin -> usr/bin # Binari essenziali per tutti gli utenti
├── sbin -> usr/sbin # Binari di sistema essenziali (Admin)
├── lib -> usr/lib # Librerie condivise fondamentali
│
├── usr/ # Risorse e programmi installati (sola lettura)
│ ├── bin/ # Eseguibili non vitali per il boot
│ ├── local/ # Software installato localmente dall'admin
│ └── share/ # Dati indipendenti dall'architettura (icone, doc)
│
├── var/ # Dati variabili (Log, Database, Mail spool)
│ ├── log/ # Registri di sistema
│ └── tmp/ # File temporanei persistenti tra i reboot
│
├── dev/ # File di interfaccia ai dispositivi hardware
├── proc/ # File system virtuale del kernel e dei processi
├── sys/ # File system virtuale per la gestione dei dispositivi
│
├── mnt/ # Punto di montaggio temporaneo per i sysadmin
├── media/ # Punti di montaggio per rimovibili (USB, CD-ROM)
├── opt/ # Pacchetti software opzionali/proprietari
│
├── run/ # Dati di runtime volatili (PID, Sockets)
└── tmp/ # File temporanei (solitamente svuotati al reboot)
