Organizzazione File System Linux

Organizzazione File System Linux

In questo post vedremo l’organizzazione file system Linux. Ci addentriamo in un argomento 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 specialie qualsiasi parte del sistema è figlia della directory radice. In parole povere, tutto inizia dalla directory root e tutto termina con essa.

Cos’è un File System

Il filesystem rappresenta la modalità con cui i file e le cartelle sono organizzate all’interno del disco fisico.


All’interno di un file system Linux i dati vengono scritti all’interno di blocchi e successivamente vengono aggiornate tutte le relative tabelle e strutture. Quando viene effettuato lo shutdown del sistema, Linux scrive su disco tutti i dati che erano presenti nelle aree di lavoro, successivamente aggiorna le varie strutture e tabelle del filesystem ed infine
‘smonta’ i dischi e le partizioni.

Al successivo avvio il sistema monta nuovamente dischi e partizioni e verifica tutte le strutture del filesystem: se tutto e’ in ordine avvia tutti i processi del sistema.

Nel caso di Linux, nel corso delle varie versioni, il file system utilizzato si è evoluto.


Iniziamo con il file system EXT2 nato nel 1993. Con questo tipo di filesystem è possibile scrivere file fino a 2
Terabyte di dimensione massima, su una struttura che può occupare al massimo 32 Terabyte con un limite di
31998 directory. Questo filesystem non ha alcun sistema di prevenzione e controllo di errori.

Successivamente il file system Linux si è evoluto con il più recente EXT3 che prevede le stesse dimensioni dei file e
delle cartelle del precedente, con la differenza che viene introdotto un meccanismo di controllo degli errori basato
sul journaling.

Questo metodo prevede che una parte del disco venga dedicata alla scrittura delle modifiche effettuate sui file, in
modo da lasciare traccia di ciò che è stato fatto, ed in caso di errore di riuscire a porre rimedio recuperando i file.
Ci sono 3 metodi di journaling:

  • Ordered: con questo metodo non viene salvato il contenuto dei file, ma solo i suoi metadati, cioè tutte le informazioni relative ad esso (data ultimo accesso, modifica, utente che lo ha creato ecc…) Il salvataggio avviene dopo la scrittura sul disco del file (metodo più veloce ma meno sicuro).
  • Journal: In questo caso oltre ai metadati viene salvato anche il contenuto del file (metodo più lento ma più sicuro).
  • Writeback: In questo caso vengono salvati solo i metadati prima o dopo la scrittura effettiva sul disco (compromesso migliore tra sicurezza e velocità).

Ancor più recente è il filesystem EXT4, che migliora le funzionalità del precedente aumentando le dimensioni del
file fino a 16 Tera byte, porta le dimensioni dell’intera struttura del filesystem a 1milione di Tera Byte ( 1 exabyte)
ed elimina totalmente il numero massimo delle directory presenti.
Riguardo alla sicurezza ed alle prestazioni, questo filesystem migliora il precedente introducendo diverse
funzionalità tra cui:

  • Pre allocazione dei file lo spazio viene allocato prima della creazione del file, per assicurare una contiguità fisica dello spazio occupato.
  • Allocazione multiblocco allocazione di più blocchi contemporaneamente.
  • Allocazione sfalsata allocazione dei blocchi solo quando vengono scritti effettivamente sul disco.
  • Checksum dei dati controllo degli errori sulla scittura del file di journaling.

Nelle ultime versioni di Linux viene utilizzato il file system Linux è EXT4.

Struttura File System Linux

Esiste una struttura gerarchica di directory ‘abbastanza’ standard. Abbastanza standard significa che può variare
leggermente da distribuzione a distribuzione, ma piu’ o meno le directory predefinite di qualsiasi distribuzione
Linux sono le seguenti:

Struttura File System Linux
Struttura File System Linux

Ognuna delle directory di cui sopra (che è un file, in primo luogo) contiene informazioni importanti, necessarie per l’avvio di driver di dispositivo, file di configurazione, ecc. Descrivendo brevemente lo scopo di ciascuna directory, stiamo iniziando in modo gerarchico.

  • /bin : tutti i programmi binari eseguibili (file) richiesti durante l’avvio, la riparazione, i file necessari per l’esecuzione in modalità utente singolo e altri importanti comandi di base, ad es. , cat , du , df , tar , rpm , wc, history , ecc.
  • /boot : contiene file importanti durante il processo di avvio , incluso il kernel Linux .
  • /dev : contiene i file di dispositivo per tutti i dispositivi hardware sulla macchina, ad esempio cdrom , cpu , ecc.
  • /etc : contiene i file di configurazione dell’applicazione, startup , shutdown , start , stop script per ogni singolo programma.
  • /home : Home directory degli utenti. Ogni volta che viene creato un nuovo utente, viene creata una directory nel nome dell’utente all’interno della home directory che contiene altre directory come Desktop , Download , Documenti , ecc.
  • /lib : la directory Lib contiene i moduli del kernel e le immagini della libreria condivisa necessarie per avviare il sistema ed eseguire comandi nel file system root.
  • /lost+found : questa directory viene installata durante l’installazione di Linux , utile per recuperare file che potrebbero essere danneggiati a causa di uno spegnimento imprevisto .
  • /media : la directory di montaggio temporanea viene creata per i dispositivi rimovibili, ad esempio media/cdrom .
  • /mnt : directory di montaggio temporanea per il montaggio del file system .
  • /opt : Opzionale è abbreviato come opt. Contiene software applicativo di terze parti. Vale a dire, Java , ecc.
  • /proc : un file system virtuale e pseudo che contiene informazioni sull’esecuzione del processo con un particolare Process-id noto anche come pid .
  • /root : questa è la home directory dell’utente root e non deve mai essere confusa con ‘/ ‘
  • /run : questa directory è l’unica soluzione pulita per il problema della directory di runtime anticipata .
  • /sbin : contiene programmi eseguibili binari, richiesti dall’amministratore di sistema , per la manutenzione . Vale a dire , iptables , fdisk , ifconfig , swapon, reboot, ecc.
  • /srv : il servizio è abbreviato in ” srv “. Questa directory contiene file specifici del server e relativi al servizio.
  • /sys : le moderne distribuzioni Linux includono una   directory /sys come  filesystem virtuale , che memorizza e consente la modifica dei dispositivi collegati al sistema.
  • /tmp : Directory temporanea del sistema, accessibile da utenti e root. Memorizza i file temporanei per utente e sistema , fino al prossimo avvio.
  • /usr : contiene binari eseguibili , documentazione , codice sorgente , librerie per programmi di secondo livello.
  • /var : sta per variabile. Il contenuto di questo file dovrebbe aumentare. Questa directory contiene log , lock , spool , mail e file temporanei .

Organizzazione File System Linux: file importanti, posizione e usabilità

L’ Organizzazione File System Linux è un sistema complesso che richiede un modo più complesso ed efficiente per avviare , arrestare , mantenere e riavviare un sistema a differenza di Windows . Ci sono file di configurazione ben definiti , binari , pagine man , file di informazioni , ecc. per ogni processo in Linux .

Directory /: la directory radice.

Nel file system Linux 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.

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.

Nel file system Linux 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 è bartolomeo, la vostra cartella personale sarà /home/bartolomeo.

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.

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, nel file system 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, con l’ultimo file system Linux, 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

Nel file system Linux 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.

File System Linux: tutte le cartelle

  • /boot/vmlinuz : il file del kernel Linux .
  • /dev/hda : file del dispositivo per il primo HDD IDE ( Hard Disk Drive )
  • /dev/hdc : file di dispositivo per il Cdrom IDE , comunemente
  • /dev/null : uno pseudo dispositivo, che non esiste. A volte l’output spazzatura viene reindirizzato a /dev/null , in modo che venga perso per sempre.
  • /etc/bashrc : contiene le impostazioni predefinite di sistema e gli alias usati dalla shell bash.
  • /etc/crontab : uno script di shell per eseguire comandi specificati in un intervallo di tempo predefinito.
  • /etc/exports : Informazioni sul file system disponibile sulla rete .
  • /etc/fstab : informazioni sull’unità disco e il relativo punto di montaggio.
  • /etc/group : informazioni sul gruppo di sicurezza .
  • /etc/grub.conf : file di configurazione del bootloader grub .
  • /etc/init.d : Script di avvio del servizio .
  • /etc/lilo.conf : file di configurazione del bootloader di lilo .
  • /etc/hosts : informazioni sugli indirizzi IP e sui nomi host corrispondenti .
  • /etc/hosts.allow : Elenco degli host autorizzati ad accedere ai servizi sulla macchina locale.
  • /etc/host.deny : Elenco di host a cui è negato l’accesso ai servizi sulla macchina locale.
  • /etc/inittab : processo INIT e loro interazione a vari livelli di esecuzione .
  • /etc/issue : consente di modificare il messaggio di pre-accesso .
  • /etc/modules.conf : file di configurazione per i moduli di sistema .
  • /etc/motd : motd sta per Message Of The Day , il messaggio che gli utenti ottengono al momento del login.
  • /etc/mtab : informazioni sui blocchi attualmente montati .
  • /etc/passwd : contiene la password degli utenti di sistema in un file shadow, un’implementazione di sicurezza.
  • /etc/printcap : Informazioni sulla stampante
  • /etc/profile : impostazioni predefinite della shell Bash
  • /etc/profile.d : script dell’applicazione, eseguito dopo il login .
  • /etc/rc.d : Informazioni sullo script specifico del livello di esecuzione .
  • /etc/rc.d/init.d : script di inizializzazione del livello di esecuzione .
  • /etc/resolv.conf : Domain Name Server ( DNS ) utilizzati da System.
  • /etc/securetty : Terminal List, dove è possibile l’accesso come root .
  • /etc/skel : Script che popola la nuova home directory dell’utente .
  • /etc/termcap : Un file ASCII che definisce il comportamento di Terminale , console e stampanti .
  • /etc/X11 : File di configurazione del sistema X-window .
  • /usr/bin : normali comandi eseguibili dall’utente.
  • /usr/bin/X11 : binari del sistema X windows .
  • /usr/include : contiene i file di inclusione utilizzati dal programma ‘ c ‘.
  • /usr/share : directory condivise di file man , file info , ecc.
  • /usr/lib : file di libreria richiesti durante la compilazione del programma .
  • /usr/sbin : Comandi per Super User , per l’amministrazione del sistema.
  • /proc/cpuinfo : Informazioni sulla CPU
  • / proc / filesystems : File-system informazione in uso attualmente.
  • /proc/interrupts : informazioni sugli interrupt attualmente utilizzati.
  • /proc/ioports : contiene tutti gli indirizzi di Input / Output utilizzati dai dispositivi sul server.
  • /proc/meminfo : Informazioni sull’utilizzo della memoria .
  • /proc/modules : Attualmente utilizza il modulo del kernel .
  • /proc/mount : Informazioni sul file system montato .
  • /proc/stat : Statistiche dettagliate del sistema corrente.
  • /proc/swaps : Scambia le informazioni sul file.
  • /versione : informazioni sulla versione Linux .
  • /var/log/lastlog : registro dell’ultimo processo di avvio .
  • /var/log/messages : registro dei messaggi prodotti dal demone syslog all’avvio.
  • /var/log/wtmp : elenca il tempo di accesso e la durata di ciascun utente sul sistema attualmente.

Conclusione

Abbiamo visto insieme la struttura del file system Linux in generale ma la stessa struttura resta invariante per la stragrande maggioranza delle distribuzioni linux disponibili.

Autore Bartolomeo

Consulente tecnico con la passione per il web e la tecnologia e tutto quello che le ronza intorno.
Nel tempo libero scrivo articoli per il mio blog su argomenti vari, in particolare su configurazione Windows, Linux e WordPress.

Condividi questo articolo!

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.

Ho letto la policy privacy e accetto il trattamento dei miei dati personali in conformità al D.Lgs. 196/2003