File System - Linux

Architettura del Filesystem Linux: Filesystem Hierarchy Standard (FHS)

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)