Un runlevel, espressione che potrebbe essere traducibile in italiano con “modalità di esecuzione”, nella famiglia dei sistemi di tipo UNIX, indica le varie modalità di avvio ed esecuzione del sistema operativo.
Nel mondo Unix ci sono due principali approcci al processo di avvio del sistema: quello usato da System V e quello, meno complesso ma meno flessibile, usato dai sistemi della famiglia BSD. Linux utilizza il metodo derivato da System V, che si basa su differenti runlevels, astrazioni a livello software per indicare diversi stati della macchina in cui possono (e devono) girare diversi programmi.
I livelli previsti secondo la Linux Standard Base (LSB) sono 7 (numerati da 0 a 6 perchè anche il primo ha una specifica funzione) ognuno ha una particolare caratteristica e funzione, come sintetizzato nella seguente tabella:
Runlevel 0 | Avvia la sequenza di arresto del sistema (shutdown) |
Runlevel 1 | Rappresenta la modalità singolo utente, nessun altro utente può collegarsi, il servizio di rete è disabilitato. |
Runlevel 2 | Rappresenta lo stato multiutente, il servizio rete è attivo ma è disabilitato il file sharing. |
Runlevel 3 | Generalmente predefinito quando si opera in modalità testuale, tutti i servizi sono attivi |
Runlevel 4 | Inutilizzato, ma può essere dedicato ad un utilizzo da parte dell’utente |
Runlevel 5 | E’ il predefinito quando si vuole avviare Linux in modalità grafica |
Runlevel 6 | serve a riavviare la macchina (reboot) |
Ad ogni runlevel corrisponde un apposito script di avvio situato nelle directory /etc/rc.d/
Il percorso completo per ognuno dei suddetti file è:
/etc/rc.d/rc0.d
/etc/rc.d/rc1.d
/etc/rc.d/rc2.d
/etc/rc.d/rc3.d
/etc/rc.d/rc4.d
/etc/rc.d/rc5.d
/etc/rc.d/rc6.d
Al nome di ogni script contenente un determinato numero corrisponde il relativo runlevel. Il comportamento dei suddetti e regolato nel file /etc/inittab
che definisce appunto cosa faccia ciascuno dei runlevels. Appena dopo il suo avvio il kernel lancia il processo init che a sua volta andrà a leggere il contenuto del file inittab per analizzare il comportamento di ciascun runlevel.
Lo script /etc/rc.d/rc
gestisce quali processi far partire a seconda del runlevel. Analizzando le singole directory /etc/rc.d/rc#.d
(ove # sta per il numero associato ad un particolare runlevel).
In queste directory esistono una serie di collegamenti simbolici con nomi del tipo S12syslog o K65identd che puntano a degli script con nomi tipo:
/etc/rc.d/init.d/syslog
/etc/rc.d/init.d/identd
/etc/rc.d/rc
a seconda della directory corrispondente al runlevel da caricare, che fan partire tutti gli script che iniziano con S (S per start) e fa chiudere tutti quelli che iniziano con K (K per kill), eseguendoli nell’ordine indicato dal numero presente nei nomi dei suddetti collegamenti.
Gli script che di fatto permettono di gestire l’avvio o lo stop di un servizio sono quindi nella directory /etc/rc.d/init.d/
e possono essere utilizzati direttamente dall’utente per gestire i singoli processi.
Per esempio: /etc/rc.d/init.d/httpd start
potrebbe avviare un server web e /etc/rc.d/init.d/stop
arrestarlo.
Se abbiamo il file (un collegamento a ../init/httpd
) /etc/rc.d/rc3.d/S85httpd
, ad esempio, avremo un server web avviato quando la macchina è al runlevel 3 (spesso di default utilizzato per un server, che non ha necessità di un X windows system).
Se vogliamo evitare che venga avviato un server web, basterà rinominare il file, sostituendo la K alla S:
mv /etc/rc.d/rc3.d/S85httpd /etc/rc.d/rc3.d/K85httpd
Nel fare queste operazioni va sempre considerato il numero dopo la prima lettera, che determina l’ordine di esecuzione degli script. Questa è una logica comune a tutti gli Unix derivati da System V; possono cambiare i nomi dei runlevels, e in certi casi la funzione, ma non la logica di tale struttura d’avvio di un PC.
Fonte: Wikipedia
Eccoci giunti alla fine del nostro cammino alla scoperta del run levels in Unix/Linux, adesso la palla passa a voi. Nel mentre noi restiamo a vostra disposizione e non solo aspettiamo le vostre impressioni nei commenti qui sotto. Noi per il momento vi fermiamo qui e vi diamo appuntamento alla prossima puntata dedicata alle prossime guide dedicate al mondo GNU/Linux, mondo Ubuntu, mondo Fedora, mondo Debian e non solo.
Seguiteci anche su Facebook, Google Plus, Tumblr, Twitter e Telegram, per restare sempre in contatto con noi e con le nostre guide.
Utente ed appassionato di GNU/Linux nonchè collaboratore occasionale di insidevcode.eu, realizza principalmente guide e articoli per il sito rivolti agli utenti che vogliano approfondire la conoscenza di vari aspetti della citata famiglia di sistemi operativi, ed all’informatica in generale.