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 conKoS, che indica se lo script deve esserekilledostartednel 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.