Ich lerne die Befehlszeile aus einem Buch namens " Linux Command Line and Shell Scripting Bible, Second Edition ". In dem Buch heißt es:
Einige Linux-Implementierungen enthalten eine Tabelle mit Prozessen, die beim Booten automatisch gestartet werden. Auf Linux-Systemen befindet sich diese Tabelle normalerweise in der speziellen Datei / etc / inittabs.
Andere Systeme (wie die beliebte Ubuntu Linux-Distribution) verwenden den Ordner /etc/init.d, der Skripts zum Starten und Stoppen einzelner Anwendungen beim Booten enthält. Die Skripte werden über Einträge in den Ordnern /etc/rcX.d gestartet, wobei X eine Ausführungsebene ist.
Wahrscheinlich, weil ich neu in Linux bin, habe ich nicht verstanden, was der zweite Absatz bedeutet. Kann jemand dasselbe in einer viel einfacheren Sprache erklären?
quelle
Antworten:
Vergessen wir
init.d
oderrcx.d
und halten die Dinge sehr einfach. Stellen Sie sich vor, Sie programmieren ein Programm, dessen alleinige Verantwortung es ist, nacheinander andere Skripte auszuführen oder zu beenden.Ihr nächstes Problem besteht jedoch darin, sicherzustellen, dass sie in der richtigen Reihenfolge ausgeführt werden. Wie würdest du das machen?
Stellen wir uns vor, dieses Programm hat in einem
scripts
Ordner nachgesehen, in dem die Skripte ausgeführt werden. Um die Priorität von Skripten zu sortieren, würden Sie sie beispielsweise in numerischer Reihenfolge benennen. Diese Reihenfolge bestimmt die Beziehung zwischeninit.d
undrc
Mit anderen Worten,
init.d
enthält die auszuführenden Skripte und diercX.d
enthält ihre auszuführende Reihenfolge.Der
X
Wert inrcX.d
ist der Runlevel. Dies könnte lose in den aktuellen Status des Betriebssystems übersetzt werden.Wenn Sie in den
rcX.d
Skripten graben , finden Sie diese Formatierung:X
wird durchK
oder ersetztS
, was bedeutet, ob sich das Skript in der aktuellen Ausführungsebene befinden sollkilled
oderstarted
nichtxx
ist die Bestellnummerabcd
ist der Skriptname (der Name ist irrelevant, jedoch zeigt er auf das Skript, das ausgeführt wird)quelle
Es gibt verschiedene Init-Systeme für Linux. Die wichtigsten sind SysVinit (das traditionelle), Upstart (Ubuntu-Ersatz) und SystemD (von Fedora und Gnome gepusht). 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 ein bisschen veraltet sind (Ubuntu verwendete 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 Beenden eines Dienstes enthalten. Einige dieser Dienste müssen beim Booten gestartet werden. andere müssen im Mehrbenutzermodus gestartet werden, jedoch nicht im Einzelbenutzer-Wartungsmodus. und es ist möglich, verschiedene Modi mit verschiedenen Sätzen gewünschter Dienste zu definieren. SysVinit verwaltet dies über Runlevel . Das Verzeichnis/etc/rc$N.d
enthält die Skripten, die ausgeführt werden müssen, wenn Runlevel N (/etc/rc$N.d/S*
) eingegeben wird, und die Skripten, die ausgeführt werden müssen, wenn Runlevel N (/etc/rc$N.d/K*
) verlassen wird. Da viele Runlevel Skripte gemeinsam haben, anstatt eine Kopie der Skripte für jeden Runlevel zu speichern, werden alle Skripte an einem einzigen Ort/etc/init.d
und in den Runlevel-spezifischen Verzeichnissen gespeichert/etc/rc?.d
symbolische Links enthalten. Darüber hinaus geben die Namen der symbolischen Links an, ob der Dienst in diesem Runlevel gestartet (S*
) oder gestoppt (beendetK*
) werden soll, und ein numerisches Präfix steuert die Reihenfolge, in der die Skripte ausgeführt werden.Das für das Durchlaufen verantwortliche Skript
/etc/rc$N.d
ist/etc/init.d/rc
(auf Ubuntu vor dem Start und auf Debian; Speicherorte können bei anderen Linux-Distributionen variieren).quelle
/etc/init.d
und/etc/rc?.d
nicht mehr und hat stattdessen Upstart?/etc/init.d
(anstelle von Upstart-.conf
Dateien/etc/init
), sodass Upstart diese weiterhin unterstützt/etc/init.d
und die/etc/rc?.d
Kompatibilität gewährleistet./etc/init.d
ist das Verzeichnis, in das die Init-Skripte gehören.Hier
etc/rcX.d
steuern Links, welche Dienste beim Aufrufen des Runlevels beendet oder gestartet werdenX
. Dateien,rcX.d
die mit K beginnen, werden mit dem Parameter ausgeführtstop
, und Dateien, die mit K beginnen,S
werden mit dem Parameter ausgeführtstart
. Es ist üblich, die Start- und Stoppreihenfolge mit einer zweistelligen Zahl nach demK
oder zu sortierenS
. Um einen ordnungsgemäßen Start und Stopp der Bestellung zu gewährleisten, addieren sich die beiden Sequenzen in der Regel zu 100.Programme können in einer Ausführungsebene deaktiviert werden, indem die Verknüpfungen entfernt oder die Groß- / Kleinschreibung von
K
oderS
nachk
oder geändert wirds
.BEARBEITEN: Administratoren führen in der Regel die Skripte aus
/etc/init.d
, von denen abhängig von der Verteilung eine symbolische Verknüpfung zu einem anderen Verzeichnis besteht. (Unterschiedliche Distributionen haben unterschiedliche Standards.)Die
rcX.d
werden vom Initialisierungscode verwendet, um die Ausführungsebenen zu ändern.quelle
/etc/init.d
befindet sich ein Symlink zum Verzeichnis unter/etc/rc.d/init.d
/etc/init.d
unbrauchbar ohne/etc/rcX.d
? Und da/etc/rcX.d
der Controller von Programmen, die beim Start gestartet werden, eine ähnliche Funktion hat wie/etc/init.d
, richtig?Obwohl @BillThor es sehr gut beantwortet hat, ist hier mein Verständnis von
/etc/rcX.d
und/etc/init.d
:/etc/init.d
Enthält Skripte zum Starten und Stoppen einzelner Anwendungen beim Booten./etc/rc?.d
Verzeichnisse stellen verschiedene Ausführungsebenen dar und die darin enthaltenen Skripte sind nichts anderes als symbolische Links zu den tatsächlichen Skripten im/etc/init.d
Verzeichnis. Durch Ändern der Run-Levels wird der Modus des Systems geändert, z. B. der einfache Einzelbenutzermodus, der Konsolenmodus und die erweiterte grafische Benutzeroberfläche.So gibt es keinen Gebrauch von
/etc/rc?.d
Verzeichnissen ohne/etc/init.d
selbst (und natürlich auch umgekehrt).quelle