Premier Training & Business Partner Red Hat

Linux: Comprendere il File System e il Concetto di RunLevel

Michele Milaneschi
Ti piacerebbe diventare anche tu uno di noi e
pubblicare i tuoi articoli nel blog degli RHCE italiani?

In questo articolo parleremo della struttura del File System Linux e di come è organizzata facendo delle analogie con un sistema Microsoft.
Inoltre descriveremo cosa sono i RunLevel e in che modo vengono usati

 

Innanzitutto per file system intendiamo la struttura di come vengono organizzate le informazioni sul disco.
Durante la creazione del File System il disco viene diviso in settori di una certa dimensione e su ogni settore vengono memorizzati i file.
Un file scritto sul disco può occupare più settori, avremo quindi una frammentazione dello stesso file su più settori.
Il processo di frammentazione può essere più o meno accentuato, infatti se mettiamo a confronto i sistemi Microsoft vediamo come in essi ci sia molta più frammentazione rispetto a sistemi di tipo Linux dove l’operazione di rinunire i blocchi è molto meno rilevante per le performance di un sitema.

Il File System in un sistema Microsoft viene identificato come C: dove al suo interno troviamo le cartelle che compongono il sistema:
Dalla cartella del sistema operativo alla cartella dove vengono installati i programmi e per finire quella dei singoli utenti.

c1

In un sistema Linux il File System viene identificato tramite / ( Slash ), non da una lettera

Lo / rappresenta l’analogo C: del sistema Microsoft: E’ la root ( radice ) del sistema

Al suo interno troviamo tutte le Directory necessarie al sistema e dentro ogni Directory troviamo tipologie di file specifici.

Ed è proprio da questo che inizieremo, andando a capire la tipologia di file che si trovano su ciascuna Directory e dunque com’è organizzato l’intero File System:

Le Directory che ci troviamo davanti sono le seguenti:

/
bin
boot
dev
etc
home
lib
lost+found
mnt o media
proc
opt
root
sbin
tmp
usr
var

Vediamo a cosa servono:

/bin
In questa Directory sono contenuti tutti i software per la gestione del sistema.

/boot
Come dice gia la parola in questa Directory sono contenuti tutti i file necessari per il boot del sistema come il kernel e il bootloader

/dev
In questa Directory sono contenuti tutti i file che consentono di accedere alle varie perferiche collegate al sistema. Stiamo parlando quindi di dischi, stampanti, chiavette….

/etc
L’ accesso a questa Directory è molto frequente, infatti contiene tutti i file configurazione dei vari software che si installano sul sistema. Inoltre abbiamo anche varie tipologie di script usari per la riconfigurazione degli applicativi o per le varie modalità di avvio del sistema.

/home
In questa Directory sono contenuti tutti i file e le SubDirectory dei rispettivi utenti creati nel sistema.

/lib
In questa Directory sono contenute tutte le librerie che vengono usate dal sistema

/lost+found
In questa Directory vengono raccolte le parti di file che vengono recuperate a seguito ad esempio di un interruzione di corrente dove al riavvio del sistema verrà eseguita un analisi del disco per verificare la presenza di errori o dati persi

/mnt o anche /media
In questa Directory di solito vengono montati i dispositivi di cui abbiamo parlato prima presenti nella Directory /dev.
Per montaggio di un dispositivo si intende l’accesso fisico a quella periferica: Montare una chiavetta significa dunque poter accedere al suo contenuto.

/proc
In questa Directory abbiamo come una specie di File System; La directory viene popolata in maniera dinamica dal kernel. All’interno possiamo trovare numerose informazioni ad esempio sulla configurazione dell’hardware della macchina per esempio la tipologia di Processore piuttosto che delle informazioni riguardanti i processi in eseguzione.

/root
Questa Directory è come la /home con la differenza che mentre in /home ci vengono memorizzati i file e le SubDirectory degli utenti, in /root ci troviamo i file e le SubDirectory dell’utente root.
L’utente root è l’equivalente Administrator dei sistemi Microsoft, colui che può fare tutto, mentre per i rispettivi utenti l’accesso è limitato alla loro /home/nome_utente di modo che non possono di per se andare a modificare altri file di altre Directory che non gli appartengono.

/sbin
In questa Directory troviamo gli applicativi che solamente l’utente root può eseguire come ad esempio il comando fdisk che serve per il partizionamento del sistema

/tmp
In questa Directory possiamo mettere i file temporanei.

/usr
Questa Directory contene tutti i file e applicativi che possono servire per una condivisione tra più postazioni di lavoro, infatti al suo interno possiamo trovare un ulteriore suddivisione di Directory.

/var
Questa Directory contiene dei file variabili cioè di dimensione non fissa come possono essere i Log piuttosto che file di spool come una coda di stampa, messaggi da inviare, ma il primo riferimento a cui possiamo associarla sono sicuramente i file di Log.

 

Detto questo andremo a parlare dei runlevel di un sistema Linux: Cosa sono e a Cosa servono.

In analogia ad un sistema Microsoft quasi tutti noi conosciamo l’avvio in “modalità provvisoria” che senza stare ad andare nei dettagli non è altro che un modo diverso di avviare Windows, che si usa per scopi ben precisi.

Allo stesso modo in Linux esiste una cosa del genere che va sotto il nome di RunLevel che rappresenta lo stato in cui si trova una macchina in base a ciò che è in eseguzione e dunque ai vari servizi offerti.

Le tipologie di RunLevel di un sistema linux sono 7:

RunLevel 0:
Il sistema entra in questo RunLevel quando andiamo a spengerlo

RunLevel 1:
Detta anche Single User Mode entriamo in questo RunLevel quando abbiamo bisogno di eseguire delle operazioni specifiche sulla macchina. E’ uno stato in cui nessun programma risulta essere in eseguzione sulla macchina e nessun utente può collegarsi.
Potremmo entrare in questo RunLevel anche solamente per modificare la password di root nel caso in cui non riuscissimo a ricordare la password precedentemente impostata.

RunLevel 2:
In questo stato la macchina risulta essere avviata, con la possibilità di accesso multiutente ma senza nessun servizio di rete attivo. La rete risulta attiva ma vengono disabilitati tutti i servizi di condivisione file.

RunLevel 3:
Detto anche TextMode è lo stato in cui si opera sulla macchina senza avere nessuna interfaccia grafica. Lato Server di solito è il livello predefinito.

RunLevel 4:
E’ un livello inutilizzato, dedicato ad usi perosnali

RunLevel 5:
E’ uguale al RunLevel 3 con più l’interfaccia Grafica. E’ il RunLeveL predefinito quando si installa un sistema Linux lato Desktop o per chi si avvicina al mondo linux e oltre al sistema in se per se viene installato anche l’ambiente grafico come GNOME, KDE, XFCE, ecc.

RunLevel 6:
Il sistema entra in questo RunLevel quando andiamo a riavviarlo.

Su un sistema Linux per vedere in che RunLevel ci troviamo basta eseguire il seguente comando:

runlevel

runl

Per cambiare RunLevel basta eseguire il comando init seguito dal RunLevel desiderato:

Se vogliamo entrare nel RunLevel 1 basta dare il seguente comando:

init 1

I file relativi ad ogni singolo RunLevel si trovano nel percorso /etc/rc.d/

runl1

Il file rc internviene nel momento in cui si sceglie su che RunLevel eseguire la macchina facendo si che in base al RunLevel scelto si vada ad eseguire dei collegamenti (Symlink) presenti nelle directory /etc/rc.d/rc#.d.

A sua volta questi collegamenti presenti in /etc/rc.d/rc#.d puntano all’eseguzione di script presenti dentro la Directory init.d che portano allo stoppaggio e successivamente all’avvio di precisi Servizi che consentono di far entrare la macchina in quel preciso RunLevel.

L’entrata in un preciso RunLevel comporta come abbiamo detto l’eseguzione di alcuni script ma in che modo??

Ovviamente seguendo una logica ben precisa che si presuppone prima di chiudere alcuni processi per poi successivamente avviarne altri.

Questo è ciò che troviamo ad esempio nella directory rc1.d

run2

Analizziamo il contenuto:

Come prima cosa vediamo che tutti i contenuti della directory sono dei collegamenti che puntano alla directory /init.d dove vengono eseguiti gli script per portare la macchina in quello specifico RunLevel.

All’inizio di ogni collegamento ( SymLink ) troviamo o una K o una S:

La lettera K significa Kill ( Termina il Processo )

La lettera S significa Start ( Avvia il Processo )

Il numero dopo la lettera indica la priorità

Il nome indica il nome del servizio

Per concludere, durante la fase di boot della macchina, il kernel ci fa vedere dei messaggi molto dettagliati e può capitare di riscontrare qualche problema e di non riuscire a fare in tempo a leggerli.

Tutti quei messaggi vengono archiviati in un file di log, che si trova nella cartella /var/log e il file relativo si chiama dmesg.

Per visualizzarli e poterli leggere scorrendo il file possiamo usare il seguente comando:

dmesg | less

dms

 

Info about author

Michele Milaneschi

RHCE Consultant