Dimentichiamo init.d
o rcx.d
e mantieni le cose molto semplici. Immagina di programmare un programma la cui unica responsabilità è eseguire o terminare altri script uno per uno.
Tuttavia il tuo prossimo problema è assicurarti che funzionino in ordine. Come lo eseguiresti?
E immaginiamo che questo programma abbia guardato all'interno di un scripts
cartella per l'esecuzione degli script. Per ordinare la priorità degli script, dovresti nominarli in diciamo ordine numerico. Questo ordine è ciò che determina la relazione tra init.d
e rc
In altre parole init.d
contiene gli script da eseguire e il rcX.d
contiene il loro ordine di esecuzione.
Il X
valore in rcX.d
è il livello di esecuzione. Questo potrebbe essere vagamente tradotto allo stato attuale del sistema operativo.
Se scavi all'interno del rcX.d
script troverai questa formattazione:
Xxxabcd
X
è sostituito conK
oS
, che indica se lo script deve esserekilled
ostarted
nel livello di esecuzione correntexx
è il numero dell'ordineabcd
è il nome dello script (il nome è irrilevante tuttavia dove punta è lo script che verrà eseguito)
Esistono diversi sistemi di init per Linux. I principali sono SysVinit (quello tradizionale), Upstart (sostituto di Ubuntu) e SystemD (spinto da Fedora e Gnome). Le directory /etc/init.d
e /etc/rc?.d
sono utilizzati da SysVinit. Il libro potrebbe menzionarli riguardo a Ubuntu perché le informazioni sono un po' datate (Ubuntu usava SysVinit come tutti gli altri) o perché quelle directory esistono ancora per compatibilità.
/etc/init.d
contiene una serie di script, ciascuno contenente le istruzioni per avviare e arrestare un servizio. Alcuni di questi servizi devono essere avviati all'avvio; altri devono essere avviati in modalità multiutente ma non in modalità manutenzione utente singolo; ed è possibile definire diverse modalità con diversi insiemi di servizi desiderati. SysVinit gestisce questo tramite i runlevel. La directory /etc/rc$N.d
contengono gli script da eseguire quando si accede al runlevel N (/etc/rc$N.d/S*
) e gli script da eseguire quando si esce dal runlevel N (/etc/rc$N.d/K*
). Poiché molti runlevel hanno script in comune, invece di archiviare una copia degli script per ciascun runlevel, gli script sono tutti archiviati in un'unica posizione /etc/init.d
e le directory specifiche del runlevel /etc/rc?.d
contengono link simbolici. Inoltre i nomi dei collegamenti simbolici indicano se il servizio deve essere avviato (S*
) o interrotto (ucciso, K*
) in quel runlevel e viene utilizzato un prefisso numerico per controllare l'ordine in cui gli script vengono eseguiti.
Lo script responsabile dell'attraversamento di /etc/rc$N.d
è /etc/init.d/rc
(su Ubuntu pre-Upstart e su Debian; le posizioni possono variare su altre distribuzioni Linux).
/etc/init.d
è la directory a cui appartengono gli script init.
Il etc/rcX.d
è dove i collegamenti controllano quali servizi vengono terminati o avviati quando si accede al runlevel X
. File in rcX.d
che iniziano con K vengono eseguiti con il parametro stop
e i file che iniziano con S
vengono eseguiti con il parametro start
. È normale mettere in sequenza l'ordine di avvio e di arresto utilizzando un numero a due cifre dopo K
o S
. Per garantire un corretto ordinamento di avvio e arresto, è comune che le due sequenze vengano sommate fino a 100.
I programmi possono essere disabilitati in un livello di esecuzione rimuovendo i collegamenti o modificando le maiuscole e minuscole del K
o S
a k
o s
.
EDIT:gli amministratori in genere eseguono gli script da /etc/init.d
che può essere un collegamento simbolico a un'altra directory a seconda della distribuzione. (Distribuzioni diverse hanno standard diversi.)
Il rcX.d
vengono utilizzati dal codice di inizializzazione per modificare i livelli di esecuzione.