Qual è la connessione tra le directory “/etc/init.d” e “/etc/rcX.d” in Linux?


25

Sto imparando la riga di comando da un libro intitolato " Linux Command Line and Shell Scripting Bible, Second Edition ". Il libro afferma questo:

Alcune implementazioni di Linux contengono una tabella di processi per l'avvio automatico all'avvio. Sui sistemi Linux, questa tabella si trova di solito nel file speciale / etc / inittabs.

Altri sistemi (come la popolare distribuzione Ubuntu Linux) utilizzano la cartella /etc/init.d, che contiene script per l'avvio e l'arresto di singole applicazioni all'avvio. Gli script vengono avviati tramite voci nelle cartelle /etc/rcX.d, dove X è un livello di esecuzione.

Probabilmente perché sono nuovo di Linux, non ho capito cosa significasse il secondo paragrafo citato. Qualcuno può spiegare lo stesso in un linguaggio molto più semplice?


questo è stato chiesto molte volte prima
bsd

@bdowning Questo è diverso. Ho un contesto. Le domande che vedo nella pagina a cui sei collegato sono diverse da questa, IMO.
its_me

@bdowning off, ma contrassegna come duplicato sarebbe stato più istruttivo se ti senti così
n611x007

Risposte:


30

Dimentichiamo init.do rcx.de manteniamo le cose molto semplici. Immagina di programmare un programma la cui unica responsabilità è eseguire o eliminare altri script uno per uno.

Tuttavia, il tuo prossimo problema è assicurarti che funzionino correttamente. Come lo faresti?

E immaginiamo che questo programma abbia guardato dentro una scriptscartella per eseguire gli script. Per ordinare la priorità degli script, è necessario denominarli in diciamo l'ordine numerico. Questo ordine è ciò che detta la relazione tra init.derc

In altre parole init.dcontiene gli script da eseguire e rcX.dcontiene il loro ordine da eseguire.

Il Xvalore in rcX.d è il livello di esecuzione. Questo potrebbe essere liberamente tradotto nello stato attuale del sistema operativo.

Se scavi all'interno degli rcX.dscript troverai questa formattazione:

Xxxabcd
  • Xviene sostituito con Ko S, che indica se lo script deve essere killedo startednel livello di esecuzione corrente
  • xx è il numero dell'ordine
  • abcd è il nome dello script (il nome è irrilevante, tuttavia dove punta è lo script che verrà eseguito)

2
spiegazione meravigliosa, molto chiara. Grazie @whoami
its_me

9

Esistono diversi sistemi init per Linux. I principali sono SysVinit (quello tradizionale), Upstart (sostituzione di Ubuntu) e SystemD (spinto da Fedora e Gnome). Le directory /etc/init.de /etc/rc?.dsono utilizzate da SysVinit. Il libro potrebbe menzionarli per quanto riguarda 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.dcontiene una serie di script, ognuno contenente le istruzioni per avviare e interrompere un servizio. Alcuni di questi servizi devono essere avviati all'avvio; altri devono essere avviati in modalità multiutente ma non in modalità di manutenzione per utente singolo; ed è possibile definire diverse modalità con diversi set di servizi desiderati. SysVinit gestisce questo attraverso i runlevel . La directory /etc/rc$N.dcontiene 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, anziché archiviare una copia degli script per ciascun runlevel, gli script sono tutti archiviati in un'unica posizione /etc/init.de le directory specifiche del runlevel/etc/rc?.dcontiene collegamenti simbolici. Inoltre, i nomi dei collegamenti simbolici indicano se il servizio deve essere avviato ( S*) o arrestato (ucciso K*) in quel runlevel e viene utilizzato un prefisso numerico per controllare l'ordine in cui vengono eseguiti gli script.

Lo script responsabile del traversing /etc/rc$N.dè /etc/init.d/rc(su Ubuntu pre-avvio e su Debian; le posizioni possono variare su altre distribuzioni Linux).


Quindi Ubuntu non sta usando /etc/init.de non ha /etc/rc?.dpiù Upstart?
its_me

1
@ KrishD'Souza Non proprio. Ubuntu utilizza Upstart invece di SysVinit, ma molti pacchetti contengono ancora script /etc/init.d(anziché .conffile Upstart in /etc/init), quindi Upstart supporta ancora /etc/init.de /etc/rc?.dper compatibilità.
Gilles 'SO- smetti di essere malvagio' il

Ubuntu è passato da Upstart a systemd dal 15.04. Quindi in questo momento (16.04) Ubuntu ha tre sistemi init: SysVinit, Upstart e systemd. Il primo e il secondo sono lasciati per compatibilità con le versioni precedenti.
PetroCliff,

4

/etc/init.d è la directory a cui appartengono gli script init.

Qui etc/rcX.dè dove i collegamenti controllano quali servizi vengono interrotti o avviati quando si accede al runlevel X. I file che rcX.diniziano con K vengono eseguiti con il parametro stope i file che iniziano con Svengono eseguiti con il parametro start. È tipico sequenziare l'avvio e interrompere l'ordine utilizzando un numero di due cifre dopo il Ko S. Per garantire un avvio e un arresto corretti è normale che le due sequenze aggiungano fino a 100.

I programmi possono essere disabilitati a livello di esecuzione rimuovendo i collegamenti o modificando il caso di Ko Sin ko s.

EDIT: gli amministratori in genere eseguono gli script da /etc/init.dcui può essere un collegamento simbolico a un'altra directory a seconda della distribuzione. (Diverse distribuzioni hanno standard diversi.)

Il rcX.dvengono utilizzate dal codice di inizializzazione per cambiare i livelli di esecuzione.


Sulla maggior parte dei sistemi, /etc/init.dè presente un collegamento simbolico alla directory in/etc/rc.d/init.d
Nikhil Mulley

1
Quindi, sostanzialmente /etc/init.dè inutile senza /etc/rcX.d? E poiché /etc/rcX.dil controller dei programmi che vengono avviati all'avvio, la sua funzione è simile a quella di /etc/init.d, corretta?
its_me

Questo dipende dal sistema. Gentoo, ad esempio, usa solo /etc/init.d per i suoi file init; non ha directory /etc/rc*.d. Anche Arch Linux ha solo /etc/rc.d, anziché /etc/init.d.
laebshade,

1

Sebbene @BillThor abbia risposto molto bene, ecco la mia comprensione di /etc/rcX.de /etc/init.d:

  • /etc/init.d contiene script per l'avvio e l'arresto di singole applicazioni all'avvio.
  • /etc/rc?.dle directory rappresentano vari livelli di esecuzione e gli script contenuti all'interno non sono altro che collegamenti simbolici agli script effettivi nella /etc/init.ddirectory. La modifica dei livelli di esecuzione modifica la modalità del sistema, come la modalità utente singolo di base in modalità solo console nell'interfaccia grafica avanzata.

Quindi, non c'è uso delle /etc/rc?.ddirectory senza lo /etc/init.dstesso (e ovviamente viceversa).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.