Welche Verbindung besteht zwischen den Verzeichnissen "/etc/init.d" und "/etc/rcX.d" unter Linux?


25

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?


dies wurde oft gefragt , bevor
bsd

@bdowning Das ist anders. Ich habe einen Kontext. Die Fragen, die ich auf der Seite sehe, auf die Sie verlinkt haben, unterscheiden sich davon, IMO.
its_me

@ downing off, aber als Duplikat markieren wäre informativer gewesen, wenn Sie sich so fühlen
n611x007

Antworten:


30

Vergessen wir init.doder rcx.dund 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 scriptsOrdner 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 zwischen init.dundrc

Mit anderen Worten, init.denthält die auszuführenden Skripte und die rcX.denthält ihre auszuführende Reihenfolge.

Der XWert in rcX.d ist der Runlevel. Dies könnte lose in den aktuellen Status des Betriebssystems übersetzt werden.

Wenn Sie in den rcX.dSkripten graben , finden Sie diese Formatierung:

Xxxabcd
  • Xwird durch Koder ersetzt S, was bedeutet, ob sich das Skript in der aktuellen Ausführungsebene befinden soll killedoder startednicht
  • xx ist die Bestellnummer
  • abcd ist der Skriptname (der Name ist irrelevant, jedoch zeigt er auf das Skript, das ausgeführt wird)

2
wunderbare Erklärung, sehr klar. Thanks @whoami
its_me

9

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.dund /etc/rc?.dwerden 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.denthä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.denthä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.dund in den Runlevel-spezifischen Verzeichnissen gespeichert/etc/rc?.dsymbolische Links enthalten. Darüber hinaus geben die Namen der symbolischen Links an, ob der Dienst in diesem Runlevel gestartet ( S*) oder gestoppt (beendet K*) 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.dist /etc/init.d/rc(auf Ubuntu vor dem Start und auf Debian; Speicherorte können bei anderen Linux-Distributionen variieren).


Ubuntu verwendet also /etc/init.dund /etc/rc?.dnicht mehr und hat stattdessen Upstart?
its_me

1
@ KrishD'Souza Nicht ganz. Ubuntu verwendet Upstart anstelle von SysVinit, aber viele Pakete enthalten weiterhin Skripte /etc/init.d(anstelle von Upstart- .confDateien /etc/init), sodass Upstart diese weiterhin unterstützt /etc/init.dund die /etc/rc?.dKompatibilität gewährleistet.
Gilles 'SO - hör auf böse zu sein'

Ubuntu ist seit 15.04 von Upstart auf systemd umgestiegen. In diesem Moment (16.04) hat Ubuntu drei Init-Systeme: SysVinit, Upstart und systemd. Erstens und zweitens werden aus Gründen der Abwärtskompatibilität belassen.
PetroCliff

4

/etc/init.d ist das Verzeichnis, in das die Init-Skripte gehören.

Hier etc/rcX.dsteuern Links, welche Dienste beim Aufrufen des Runlevels beendet oder gestartet werden X. Dateien, rcX.ddie mit K beginnen, werden mit dem Parameter ausgeführt stop, und Dateien, die mit K beginnen, Swerden mit dem Parameter ausgeführt start. Es ist üblich, die Start- und Stoppreihenfolge mit einer zweistelligen Zahl nach dem Koder zu sortieren S. 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 Koder Snach koder geändert wird s.

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.dwerden vom Initialisierungscode verwendet, um die Ausführungsebenen zu ändern.


Auf den meisten Systemen /etc/init.dbefindet sich ein Symlink zum Verzeichnis unter/etc/rc.d/init.d
Nikhil Mulley

1
Also ist im Grunde /etc/init.dunbrauchbar ohne /etc/rcX.d? Und da /etc/rcX.dder Controller von Programmen, die beim Start gestartet werden, eine ähnliche Funktion hat wie /etc/init.d, richtig?
its_me

Dies hängt vom System ab. Gentoo verwendet zum Beispiel nur /etc/init.d als Init-Datei. Es gibt keine /etc/rc*.d Verzeichnisse. Arch Linux hat ebenfalls nur /etc/rc.d anstelle von /etc/init.d.
Laebshade

1

Obwohl @BillThor es sehr gut beantwortet hat, ist hier mein Verständnis von /etc/rcX.dund /etc/init.d:

  • /etc/init.d Enthält Skripte zum Starten und Stoppen einzelner Anwendungen beim Booten.
  • /etc/rc?.dVerzeichnisse stellen verschiedene Ausführungsebenen dar und die darin enthaltenen Skripte sind nichts anderes als symbolische Links zu den tatsächlichen Skripten im /etc/init.dVerzeichnis. 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?.dVerzeichnissen ohne /etc/init.dselbst (und natürlich auch umgekehrt).

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.