I runlevel in Linux

In Linux i c.d. runlevel, espressione che potrebbe essere traducibile in italiano con modalità di esecuzione, indicano appunto le varie modalità di avvio ed esecuzione del sistema operativo.

Nel mondo Unix ci sono 2 principali approcci al processo di startup 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 runlevel, astrazioni software per indicare diversi stati della macchina in cui possono girare diversi programmi.

I livelli previsti secondola Linux Standard base sono 6, ognuno ha una particolare caratteristica e funzione:

 

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: In genere è quello predefinito quando si opera in modalità testuale, tutti i servizi sono attivi.

Runlevel 4: Inutilizzato. Può essere dedicato ad usi personali

Runlevel 5: E' il predefinito quando si vuole avviare Linux in modalità grafica

Runlevel 6: serve a riavviare la macchina

 

 

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, andando ad analizzare 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 fa partire il server Web e /etc/rc.d/init.d/stop lo fa stoppare.

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 run-level3 (runlevel di default per un server, che non ha necessità di X windows).

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 runlevel, e in certi casi la funzione, ma non la logica di questa struttura di boot.

fonte: Wikipedia