Struttura delle directory Linux: a cosa servono /etc, /var, /usr e le altre

Nella struttura delle directory di Linux, /etc contiene soprattutto configurazioni, /var log e dati variabili, /usr programmi e librerie, e /home le directory personali degli utenti. Tutti questi percorsi fanno parte dell’albero che inizia da /; alcuni sono collegamenti simbolici o punti di montaggio.

Le convenzioni aiutano a orientarsi, ma non garantiscono che ogni percorso esista su qualsiasi installazione. Distribuzione, architettura, container e configurazione locale possono cambiare la disposizione effettiva. La descrizione hier(7) dei Linux man-pages distribuiti da Debian costituisce un riferimento generale.

Se vi serve prima chiarire i percorsi assoluti e relativi, consultate le basi del file system e dei percorsi, in inglese. Per muovervi tra le directory potete seguire la guida a pwd, ls, cd e tree, in inglese.

Panoramica delle directory principali

Directory Nome o richiamo utile Uso principale
/ Root, radice Inizio dell’albero dei file
/bin Binary, eseguibili Comandi di base; spesso collegamento a /usr/bin
/boot Boot, avvio Kernel e file del bootloader
/dev Device, dispositivo File speciali per dischi, terminali e altri dispositivi
/etc Nome tradizionale Configurazione del sistema e dei servizi
/home Home, directory personale Home degli utenti normali, secondo la configurazione
/lib Library, libreria Librerie e componenti necessari ai programmi
/lib64 Librerie a 64 bit Percorso presente su alcune architetture
/media Supporti rimovibili Punti di montaggio per supporti rimovibili
/mnt Mount, montaggio Punto di montaggio temporaneo
/opt Optional, aggiuntivo Applicazioni aggiuntive organizzate per prodotto o fornitore
/proc Process, processo Interfaccia virtuale per processi e kernel
/root Home di root Directory personale dell’amministratore root
/run Runtime, esecuzione Dati temporanei della sessione di avvio
/sbin System binary Comandi di amministrazione; possibili collegamenti di compatibilità
/srv Service, servizio Dati che il sistema offre tramite servizi
/sys System, sistema Interfaccia virtuale per dispositivi e oggetti del kernel
/tmp Temporary, temporaneo File temporanei soggetti alle politiche di pulizia
/usr Risorse di sistema Programmi, librerie, documentazione e dati condivisi
/var Variable, variabile Log, cache, stato applicativo e code

La colonna centrale aiuta a ricordare i nomi: non tutte le denominazioni vanno interpretate come sigle formali. Il ruolo dei file conta più dell’espansione del nome.

/ — La directory radice

/, detta root directory o directory radice, è l’inizio dell’albero. Ecco uno schema parziale, non l’elenco completo di una specifica macchina:

/
├── bin
├── boot
├── dev
├── etc
├── home
├── usr
└── var

Un disco diverso può diventare accessibile montando il suo file system in una directory di questo albero. Perciò un percorso sotto / non implica che i dati risiedano tutti nella stessa partizione.

La directory radice / è distinta da /root, che è normalmente la home dell’utente root.

/bin — I comandi di base

bin richiama binary, cioè gli eseguibili. Comandi come ls, cp, mv e cat sono esempi tipici. Per elencare il contenuto:

ls /bin

Molti sistemi riuniscono gli eseguibili sotto /usr e mantengono /bin come collegamento simbolico a /usr/bin. Per esaminare il percorso stesso:

ls -ld /bin

-d mostra la voce della directory anziché elencarne il contenuto. Se è un collegamento, l’output lungo inizia con l e mostra una destinazione dopo ->; una directory effettiva inizia con d. Controllate il risultato della vostra macchina.

/boot — I file di avvio

boot significa avvio. Qui si trovano spesso kernel, immagini iniziali e file del bootloader, il programma che avvia il sistema operativo. Esempi di nomi:

/boot/vmlinuz-...
/boot/initramfs-...
/boot/grub2/

I puntini indicano una parte variabile del nome, non un file da cercare letteralmente. I nomi dell’immagine iniziale e la posizione di GRUB cambiano fra distribuzioni; i sistemi UEFI possono avere anche una partizione EFI montata separatamente. Un container può non avere questi file.

Non cancellate file da /boot soltanto perché sembrano vecchi: la gestione dei kernel deve seguire gli strumenti della distribuzione e conservare una possibilità di avvio.

/dev — I file dei dispositivi

dev richiama device, dispositivo. Linux espone molti dispositivi tramite file speciali; non sono normali documenti da aprire con un editor. Esempi:

/dev/sda
/dev/sdb
/dev/nvme0n1
/dev/tty
/dev/null

/dev/sda può indicare un disco e /dev/nvme0n1 un dispositivo NVMe; nomi e presenza dipendono dall’hardware. /dev/tty riguarda il terminale di controllo e /dev/null scarta i dati che riceve. Scrivere direttamente su un dispositivo a blocchi può alterare il disco: qui i percorsi servono a riconoscere i tipi di file.

/etc — La configurazione del sistema

/etc contiene soprattutto configurazioni del sistema e dei servizi. Esempi comuni:

/etc/passwd
/etc/fstab
/etc/hosts
/etc/ssh/sshd_config

passwd registra informazioni sugli account, fstab descrive montaggi configurati, hosts associa nomi e indirizzi locali e sshd_config configura il server OpenSSH, se installato.

Per cambiare un servizio, individuate il file effettivamente letto, conservate una copia e usate il suo controllo di sintassi prima del riavvio o ricaricamento. Non tutte le impostazioni sono in un unico file: possono esserci directory di frammenti e configurazioni personali nella home.

/home — Le directory personali

home indica la directory personale. Un account normale chiamato john può avere questo percorso:

/home/john

È un esempio di configurazione, non una garanzia che la creazione dell’account abbia creato anche la directory. La home può avere un percorso diverso o risiedere su un file system di rete; gli account di servizio possono non averne una utilizzabile per l’accesso.

Nella shell, printf '%s\n' "$HOME" mostra la home configurata per la sessione e cd senza argomenti vi porta lì. Non confondete la home con la directory di lavoro corrente, che può cambiare durante la sessione.

/lib e /lib64 — Le librerie

lib deriva da library, libreria. Le librerie condivise forniscono funzioni che diversi programmi possono usare. Questi percorsi possono comprendere anche componenti come il caricatore dinamico o, sotto /lib/modules, moduli del kernel.

/lib64 esiste su alcune architetture, ma “sistema a 64 bit” non implica che tutte le sue librerie siano lì. Altri sistemi usano sottodirectory specifiche per architettura, per esempio sotto /usr/lib.

Nei sistemi con struttura unificata sotto /usr, /lib e /lib64 possono essere collegamenti. La destinazione precisa dipende dall’architettura e dalla distribuzione; non sostituite tali collegamenti manualmente.

/media — I supporti rimovibili

/media ospita convenzionalmente punti di montaggio per chiavette USB, CD e DVD. Nei desktop si incontrano anche percorsi sotto /run/media, secondo il servizio che gestisce il montaggio.

Collegare una chiavetta non garantisce che venga montata automaticamente, soprattutto su un server senza ambiente desktop. Individuate il punto di montaggio effettivo prima di cercare i file.

/mnt — I montaggi temporanei

mnt richiama mount: montare significa rendere accessibile un file system in un punto dell’albero. /mnt è una posizione convenzionale per montaggi temporanei eseguiti dall’amministratore.

Questo esempio usa una partizione già dotata di file system. /dev/sdb1 va sostituito con il dispositivo verificato della vostra macchina; non è un nome universale.

  1. Esaminate dispositivi e file system con lsblk --fs. Verificate identità e contenuto del supporto; non scegliete un disco basandovi soltanto sul nome.
  2. Controllate i montaggi esistenti con findmnt e il contenuto di /mnt. La directory deve esistere ed essere libera per questo uso: un montaggio nasconde temporaneamente i contenuti già presenti. Se manca, createla con sudo mkdir /mnt.
  3. Solo dopo queste verifiche, montate la partizione:
sudo mount /dev/sdb1 /mnt

Il comando richiede normalmente privilegi amministrativi. Un’esecuzione riuscita di solito non stampa nulla; verificate sorgente e destinazione con findmnt --mountpoint /mnt e poi elencate i file con ls /mnt. Il manuale di mount spiega opzioni, permessi e montaggi.

Terminato il lavoro, chiudete i file e le finestre che usano il supporto, spostate la shell fuori da /mnt con cd ed eseguite sudo umount /mnt. Se risulta occupato, individuate gli utilizzi ancora aperti; non ricorrete automaticamente a opzioni forzate. Verificate che il montaggio non compaia più prima di scollegare il dispositivo. Il manuale di umount descrive anche il caso di file system occupato.

/opt — Le applicazioni aggiuntive

opt richiama optional, aggiuntivo. Può ospitare applicazioni organizzate in directory del prodotto o del fornitore:

/opt/application/
/opt/company/product/

Non tutte le applicazioni di terze parti usano /opt: un pacchetto può integrarsi nelle normali directory della distribuzione. Inoltre configurazioni e dati variabili del prodotto possono essere separati dai suoi file installati.

/proc — Le informazioni sui processi e sul kernel

proc richiama process, processo. È un file system virtuale: il kernel espone informazioni tramite un’interfaccia simile a file, senza che ciascuna voce sia un normale file memorizzato su disco.

Per leggere informazioni sul processore, se esposte dall’ambiente:

cat /proc/cpuinfo

Per le informazioni sulla memoria:

cat /proc/meminfo

L’output contiene campi e valori che dipendono dal kernel e dall’architettura; non aspettatevi numeri identici fra macchine. Un processo con identificatore PID (Process ID) 1234 può avere una directory /proc/1234, finché esiste e secondo i permessi di accesso.

La documentazione del kernel su procfs distingue letture e parametri modificabili. Non scrivete in /proc per provare un comando: alcune voci cambiano il comportamento del sistema. Nei container la vista può essere limitata o diversa da quella dell’host.

/root — La home dell’utente root

/root è normalmente la directory personale dell’account amministrativo root. Il confronto serve a distinguere due home tipiche:

Utente normale → /home/user
Utente root → /root

La home di root non coincide con la radice / e non è uno spazio condiviso per i file di tutti gli utenti. Non serve accedere come root per studiare la struttura delle directory.

/run — I dati dell’esecuzione corrente

/run contiene dati usati dai servizi dopo l’avvio: file con identificatori di processo, socket e informazioni temporanee di stato. Esempi di percorsi, secondo i componenti installati:

/run/
/run/user/
/run/systemd/

Sui sistemi che seguono questa convenzione è normalmente un file system tmpfs, volatile e svuotato all’avvio. Non usatelo per conservare dati permanenti. La specifica UAPI sulla gerarchia Linux moderna descrive questa distinzione e i collegamenti di compatibilità; non è un elenco obbligatorio per ogni distribuzione.

/sbin — I comandi di amministrazione

sbin richiama system binary. Nei sistemi tradizionali raccoglie comandi di amministrazione; questi sono esempi di percorsi, non comandi da eseguire durante questa lettura:

/sbin/reboot
/sbin/fsck

Può essere un collegamento a /usr/sbin; nei sistemi che unificano anche bin e sbin, la destinazione finale può essere /usr/bin. La directory non determina da sola i permessi necessari per eseguire un’operazione: contano il programma e le politiche del sistema.

/srv — I dati offerti dai servizi

srv richiama service. È destinata ai dati forniti dal sistema, per esempio contenuti web o file distribuiti da un servizio:

/srv/www/
/srv/ftp/

La disposizione interna dipende dall’amministratore. Non deducete la directory pubblicata dal solo nome: un server web può usare /var/www o un altro percorso configurato.

/sys — I dispositivi e gli oggetti del kernel

sys richiama system. Il file system virtuale sysfs espone dispositivi, driver e altri oggetti del kernel, con attributi e collegamenti. Per elencare le classi disponibili:

ls /sys/class

Potreste trovare classi relative a rete, dispositivi a blocchi e altri sottosistemi, secondo il sistema. Anche qui alcune voci sono scrivibili e possono cambiare attributi del kernel: l’esempio si limita a una lettura. La documentazione del kernel su sysfs spiega il rapporto fra oggetti, directory e attributi.

/tmp — I file temporanei

tmp deriva da temporary. Programmi e utenti possono usare questa posizione per dati temporanei:

/tmp

La politica di pulizia dipende dal sistema: i file possono sparire all’avvio o dopo un intervallo. Non conservatevi l’unica copia di un documento importante e non cancellate indiscriminatamente i file che altri programmi stanno usando.

/usr — I programmi e le risorse di sistema

/usr contiene soprattutto risorse software installate: eseguibili, librerie, documentazione e dati condivisi. Per capirne l’uso non occorre trattare “Unix System Resources” come l’espansione ufficiale del nome; soprattutto, non va confusa con /home.

Directory Uso tipico
/usr/bin Comandi e programmi
/usr/sbin Programmi di amministrazione o percorso di compatibilità
/usr/lib Librerie, componenti e dati dei programmi; possibili sottodirectory per architettura
/usr/lib64 Librerie a 64 bit dove previste dalla distribuzione
/usr/share Dati indipendenti dall’architettura, come documenti e icone
/usr/local Software e risorse installati localmente dall’amministratore

/usr/local aiuta a separare le installazioni locali dai file gestiti normalmente dai pacchetti della distribuzione. Non significa che qualsiasi programma installato a mano finisca automaticamente lì: conta il percorso scelto durante l’installazione.

/var — I dati variabili

var deriva da variable. Qui si trovano dati che cambiano durante il funzionamento del sistema:

/var/log
/var/cache
/var/lib
/var/spool

/var/log

Contiene log del sistema e dei servizi, secondo la loro configurazione. Per elencare le voci visibili:

ls /var/log

L’elenco non mostra il contenuto di ogni log né garantisce che tutti gli eventi del sistema siano registrati qui. Controllate anche la configurazione del servizio di logging.

/var/cache

Ospita dati di cache usati dai programmi. Una cache non va confusa con un archivio permanente; per gestirla usate le funzioni previste dal programma, evitando cancellazioni mentre il servizio la usa.

/var/lib

Conserva lo stato persistente di servizi e applicazioni, per esempio dati applicativi o metadati del gestore dei pacchetti. Non è una cache da svuotare per liberare spazio.

/var/spool

Contiene code e lavori affidati a programmi, come messaggi in uscita o processi di stampa, secondo i servizi installati.

Se lo spazio si esaurisce, individuate prima quale servizio e quale tipo di dato lo occupano. Gestire la rotazione dei log è diverso da rimuovere uno stato applicativo; conservate i dati necessari prima di intervenire.

Come ricordare le directory

Partite dal tipo di dato che cercate. Questo promemoria riprende le posizioni principali senza sostituire il controllo della configurazione reale:

/etc → Configurazione del sistema
/var → Log e dati variabili
/home → File personali degli utenti
/root → Home di root
/usr → Programmi e librerie
/tmp → File temporanei
/dev → Dispositivi
/proc → Processi e kernel
/sys → Dispositivi e oggetti del kernel
/boot → File di avvio
/mnt → Montaggi temporanei
/opt → Applicazioni aggiuntive

Per esempio, per capire un problema di un servizio potete cercare la configurazione sotto /etc e i log nella posizione configurata, spesso sotto /var. Per i file personali iniziate dalla home, mentre per l’eseguibile controllate i percorsi dei programmi.

Usare la struttura per orientarsi

La distinzione utile è fra configurazione, programmi installati, dati variabili e informazioni virtuali del kernel. /proc e /sys forniscono informazioni dal kernel, non semplici raccolte di documenti.

Quando un percorso non corrisponde allo schema, controllate se è un collegamento o un punto di montaggio e leggete la configurazione del servizio. Comprendere il ruolo dei file permette di scegliere dove cercare senza spostarli o modificarli a tentativi.