Vergessen wir init.d
oder rcx.d
und halte die Dinge sehr einfach. Stellen Sie sich vor, Sie programmieren ein Programm, dessen einzige Aufgabe es ist, andere Skripte nacheinander auszuführen oder zu beenden.
Ihr nächstes Problem besteht jedoch darin, sicherzustellen, dass sie in der richtigen Reihenfolge ausgeführt werden. Wie würden Sie das ausführen?
Und stellen wir uns vor, dieses Programm hat in scripts
geschaut Ordner zum Ausführen der Skripte. Um die Priorität von Skripten zu ordnen, würden Sie sie in einer, sagen wir, numerischen Reihenfolge benennen. Diese Reihenfolge bestimmt die Beziehung zwischen init.d
und rc
Mit anderen Worten init.d
enthält die auszuführenden Skripte und den rcX.d
enthält ihre Ausführungsreihenfolge.
Die X
Wert in rcX.d
ist der Runlevel. Dies könnte lose in den aktuellen Zustand des Betriebssystems übersetzt werden.
Wenn Sie in rcX.d
graben Skripten finden Sie diese Formatierung:
Xxxabcd
X
wird durchK
ersetzt oderS
, was dafür steht, ob das Skriptkilled
sein soll oderstarted
im aktuellen Runlevelxx
ist die Bestellnummerabcd
ist der Name des Skripts (der Name ist irrelevant, aber wohin er zeigt, ist das Skript, das ausgeführt wird)
Es gibt mehrere verschiedene Init-Systeme für Linux. Die wichtigsten sind SysVinit (das traditionelle), Upstart (Ersatz von Ubuntu) und SystemD (gepusht von Fedora und Gnome). Die Verzeichnisse /etc/init.d
und /etc/rc?.d
werden von SysVinit verwendet. Das Buch erwähnt sie möglicherweise in Bezug auf Ubuntu, weil die Informationen etwas veraltet sind (Ubuntu verwendete früher SysVinit wie alle anderen) oder weil diese Verzeichnisse aus Kompatibilitätsgründen immer noch existieren.
/etc/init.d
enthält eine Reihe von Skripten, die jeweils Anweisungen zum Starten und Stoppen eines Dienstes enthalten. Einige dieser Dienste müssen beim Booten gestartet werden; andere müssen im Mehrbenutzermodus gestartet werden, aber nicht im Einzelbenutzer-Wartungsmodus; und es ist möglich, verschiedene Modi mit verschiedenen Sätzen gewünschter Dienste zu definieren. SysVinit verwaltet dies über Runlevels. Das Verzeichnis /etc/rc$N.d
enthalten die Skripte, die beim Aufrufen von Runlevel N ausgeführt werden sollen (/etc/rc$N.d/S*
) und die Skripte, die beim Verlassen von Runlevel N ausgeführt werden sollen (/etc/rc$N.d/K*
). Da viele Runlevel gemeinsame Skripte haben, werden die Skripte alle an einem einzigen Ort /etc/init.d
gespeichert, anstatt eine Kopie der Skripte für jeden Runlevel zu speichern , und die Runlevel-spezifischen Verzeichnisse /etc/rc?.d
symbolische Links enthalten. Außerdem geben die Namen der symbolischen Links an, ob der Dienst gestartet werden soll (S*
) oder gestoppt (getötet, K*
) in diesem Runlevel, und ein numerisches Präfix wird verwendet, um die Reihenfolge zu steuern, in der die Skripts ausgeführt werden.
Das Skript, das für das Durchlaufen von /etc/rc$N.d
verantwortlich ist ist /etc/init.d/rc
(auf Pre-Upstart Ubuntu und auf Debian; Speicherorte können auf anderen Linux-Distributionen variieren).
/etc/init.d
ist das Verzeichnis, in das die Init-Skripte gehören.
Der etc/rcX.d
Hier steuern Links, welche Dienste beendet oder gestartet werden, wenn Runlevel X
aufgerufen wird . Dateien in rcX.d
beginnend mit K werden mit dem Parameter stop
ausgeführt , und Dateien, die mit S
beginnen werden mit dem Parameter start
ausgeführt . Es ist üblich, Start- und Stoppreihenfolge mit einer zweistelligen Zahl nach dem K
zu sequenzieren oder S
. Um eine korrekte Start- und Stoppreihenfolge zu gewährleisten, addieren sich die beiden Sequenzen normalerweise zu 100.
Programme können in einem Runlevel deaktiviert werden, indem die Links entfernt oder die Groß-/Kleinschreibung des K
geändert wird oder S
zu k
oder s
.
BEARBEITEN:Administratoren führen normalerweise die Skripte von /etc/init.d
aus Dies kann je nach Distribution ein symbolischer Link zu einem anderen Verzeichnis sein. (Unterschiedliche Distributionen haben unterschiedliche Standards.)
Der rcX.d
werden vom Initialisierungscode verwendet, um die Ausführungsebenen zu ändern.