Nel mondo Unix ci sono 2 principali approcci al processo di startup del sistema: quello usato da Unix System V e quello, meno complesso ma meno flessibile, usato dai BSD Unix.
Linux utilizza il primo metodo, che si basa su differenti runlevel, astrazioni software per indicare diversi stati della macchina in cui possono girare diversi programmi.
In genere su Linux sono utilizzati i seguenti livelli:
Runlevel 0 : /etc/rc.d/rc0.d
Questo runlevel avvia la sequenza di arresto del sistema (shutdown)
Runlevel 1: /etc/rc.d/rc1.d
Questo runlevel rappresenta la modalità singolo utente, nessun altro utente può collegarsi, il servizio di rete è disabilitato.
Runlevel 2: /etc/rc.d/rc2.d
Rappresenta lo stato multiutente, il servizio rete è attivo ma è disabilitato il file sharing.
Runlevel 3: /etc/rc.d/rc3.d
In genere è quello predefinito quando si opera in modalità testuale, tutti i servizi sono attivi.
Runlevel 4: /etc/rc.d/rc4.d
Inutilizzato. Può essere dedicato ad usi personali
Runlevel 5: /etc/rc.d/rc5.d
E' il runlevel predefinito quando si vuole avviare Linux in modalità grafica
Runlevel 6: /etc/rc.d/rc6.d
Il runlevel 6 è quello di reboot.
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. In queste directory esistono una serie di symlink con nomi del tipo S12syslog o K65identd che puntano a degli script con nomi tipo /etc/rc.d/init.d/syslog o /etc/rc.d/init.d/identd.
/etc/rc.d/rc a seconda della directory corrispondente al runlevel da caricare fa partire tutti gli script che iniziano con S e fa chiudere tutti quelli che iniziano con K, eseguendoli nell'ordine indicato dal numero presente nei nomi dei file.
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 (link a ../init/httpd ) /etc/rc.d/rc3.d/S85httpd, quindi, avremo un server web avviato quando la macchina è al run-level3 (runlevel di default per un server, che non ha bisogno di Xwindows).
Se vogliamo evitare che venga avviato un server web, bastera 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 questra struttura di boot.
ciao a tutti quanti
il concetto è molto chiaro pieno di cose molto utili oltre al run level 3 e 5 comprende la GUI
Rispondiciao
davvero un bellissimo articolo
Rispondicandidiamoci alle palle
questo articolo è completamente sbagliato poiche il mio professore dice che il sistema operativo è un cowboy che si toglie le scarpe quando va a dormire per essere pronto a respingere gli attacchi che ci potrebbero esistere nella notte ai ai nn sapete niente rifate il sito ciao e prego
Rispondigrazie
ma è una merda
Rispondiutile e abbastanza chiaro
grazie per l'articolo!!
Rispondierrore di distrazione
/etc/rc.d/init.d/httpd start fa partire il server Web e
/etc/rc.d/init.d/stop
dovrebbe essere
/etc/rc.d/init.d/httpd stop
bell'articolo
complimenti bell'articolo e chiaro.
Utilissimo.
Si
Lo stesso servizio può essere avviato a diversi runlevel.
All'avvio comunque il sistema va direttamente al runlevel configurato in /etc/inittab (non passa da uno all'altro).
Quando si decide, con il comando init, di passare da un runlevel all'altro, i servizi vengono prima killati all'uscita dal runlevel corrente e poi attivati (secondo rc#.d/S...) entrando nel nuovo runlevel.
rc#.d
... quindi lo stesso servizio viene avviato a diversi runlevel, e in fase di avvio si accorge di essere già in esecuzione?
RispondiI link simbolici di rc#.d
Servono per definire quali servizi avviare ai rispettivi runlevel.
Il fatto che molti siano uguali è perchè a diversi runlevel spesso vengono lanciati gli stessi servizi.
La logica è un po' contorta, ma ha una sua ragione d'essere: in questo modo si separano gli script di avvio/chiusura dei servizi (tutti in init.d) dalla scelta di quali far partire ai diversi runlevel (una subdir rc#.d per ogni runlevel).
Ci pensa il comando rc ad interpretare il nome dei link simbolici (S o K iniziale e numero con cui si definisce l'ordine di esecuzione) e ad avviare gli script in init necessari.
Il fatto che poi, alla fine, molti run-level sembrano lanciare gli stessi servizi non deve trarre in inganno: questa struttura permette customizzazioni notevoli con una logica che, una volta compresa, permette flessibilità e semplicità di gestione.
Di fatto il runlevel 4 non viene mai usato (ma nessuno ci impedisce di customizzarcelo come preferiamo) e l'unica differenza fra il 3 e il 5 è l'ambiente grafico.
/etc/rc.d/rc#.d
Come mai alcuni file sono presenti in più directory rc#.d, al punto che nella mia RedHat 7.2 il contenuto delle directory rc3.d, rc4.d e rc5.d sembra a occhio uguale?
Va bene che sono link a file nella directory /etc/rc.d/init.d/ , ma che senso ha?