Was ist der Unterschied zwischen / etc / init / und /etc/init.d/?

230

Was ist der Unterschied zwischen /etc/init/und /etc/init.d/?

Welche allgemeine Bedeutung hat das .dSuffix für ein Verzeichnis?

Olivier Lalonde
quelle

Antworten:

229

/etc/init.dEnthält Skripte, die von den System V-Init-Tools (SysVinit) verwendet werden. Dies ist das traditionelle Service-Management-Paket für Linux, das das initProgramm (den ersten Prozess, der ausgeführt wird, wenn der Kernel die Initialisierung abgeschlossen hat¹) sowie eine Infrastruktur zum Starten und Stoppen von Diensten und zu deren Konfiguration enthält. Insbesondere Dateien in /etc/init.dsind Shell - Skripte , die reagieren auf start, stop, restartund (wenn unterstützt) reloadeinen bestimmten Dienst zu verwalten Befehle. Diese Skripte können direkt oder (meistens) über einen anderen Trigger (normalerweise das Vorhandensein eines symbolischen Links in /etc/rc?.d/) aufgerufen werden .

/etc/initEnthält Konfigurationsdateien, die von Upstart verwendet werden. Upstart ist ein junges Service-Management-Paket, das von Ubuntu unterstützt wird. Dateien in /etc/initsind Konfigurationsdateien zu sagen Upstart , wann und wie start, stop, reloaddie Konfiguration oder die Abfrage statuseines Dienstes. Ab lucid wechselt Ubuntu von SysVinit zu Upstart, was erklärt, warum viele Dienste SysVinit-Skripte enthalten, obwohl Upstart-Konfigurationsdateien bevorzugt werden. Tatsächlich werden die SysVinit-Skripte von einer Kompatibilitätsebene in Upstart verarbeitet.

.dviele Konfigurationsdateien oder Skripte für eine bestimmte Situation in Verzeichnisnamen gibt in der Regel ein Verzeichnis enthält (zB /etc/apt/sources.list.denthält Dateien , die verkettet ein virtuelles zu machen sources.list, /etc/network/if-up.denthält Skripte , die ausgeführt werden , wenn ein Netzwerk - i nter f ace aktiviert ist ). Diese Struktur wird normalerweise verwendet, wenn jeder Eintrag im Verzeichnis von einer anderen Quelle bereitgestellt wird, sodass jedes Paket sein eigenes Plug-In ablegen kann, ohne eine einzelne Konfigurationsdatei analysieren zu müssen, um auf sich selbst zu verweisen. In diesem Fall ist "init" einfach ein logischer Name für das Verzeichnis, SysVinit stand an erster Stelle und wurde verwendet init.d, und Upstart wurde einfach verwendetinitfür ein Verzeichnis mit einem ähnlichen Zweck (es wäre mehr "Mainstream" und vielleicht weniger arrogant gewesen, wenn sie /etc/upstart.dstattdessen verwendet hätten).

¹ zählt nicht initrd

Gilles
quelle
28
esoterische historische Notiz: die .dVerzeichnisse, die mit System V eingegeben wurden. Es war damals eine rätselhafte Notation und letztendlich wahrscheinlich die Idee einer Person, die in die Codebasis kam und nicht gehen konnte. Wenn Sie beispielsweise der Meinung sind, dass dies catein schlechter Name für die durchgeführte Aufgabe ist, stellen Sie sich vor, wie viele Dateien im gesamten System Sie berühren müssen, um sie zu ändern.
msw
Auf Systemen mit beiden Verzeichnissen wird welches von Upstart und SysVinit verwendet? Gibt es eine Möglichkeit, dies zu überprüfen?
Asheeshr
3
@AsheeshR Überprüfen Sie, ob ein Paket mit dem Namen upstartoder vorhanden ist sysvinit. Und in neueren Versionen könnte es systemdauch so sein (was es für Ubuntu damals nicht gab, als ich meine Antwort schrieb). Es ist das Paket, das /sbin/init( dpkg -S /sbin/init) bereitstellt .
Gilles
Auf der von mir verwendeten AWS Ubuntu-Instanz (von Bitnami) ist es das upstartPaket, das / sbin / init (ran dpkg -S /sbin/init) bereitstellt . Aber Bitnami hat sein Skript in das Verzeichnis /etc/init.d gestellt. Ist das nicht ein Konflikt mit Ihrer Antwort auf @AsheeshR oben? Danke.
Sabuncu
@ Sabuncu Dies ist ein Beispiel für "SysVinit-Skripte werden von einer Kompatibilitätsebene in Upstart verarbeitet".
Gilles
29

Das ".d" wird normalerweise an einen Verzeichnisnamen angehängt, um anzuzeigen, dass das, was früher von einem einzelnen Skript oder einer einzelnen Konfigurationsdatei behandelt wurde (oder hätte behandelt werden können), der Einfachheit halber in mehrere Dateien aufgeteilt wurde, aber welche sollten zusammen aufgenommen oder ausgeführt werden.

Zum Beispiel /etc/apache/conf.d/oder/etc/apt/sources.d/

In Fällen, in denen es wichtig ist, in welcher Reihenfolge sie ausgeführt werden sollen, beginnen die Dateien in diesen Verzeichnissen manchmal mit einer Nummer wie "00-default" oder "80-user", damit sie in der richtigen Reihenfolge ausgeführt werden.

In diesem Fall bedeutet /etc/init.d/dies, dass alle Skripte in "init.d" ausgeführt werden sollen. Heutzutage ist das Init-System moderner Betriebssysteme jedoch etwas komplizierter, aber der Verzeichnisname ist immer noch vorhanden.

thomasrutter
quelle
Vielleicht liegt das daran, .ddass es sich um einen 'Deamon'-Prozess handelt, der normalerweise beim Booten gestartet wird.
21
.d ist definitiv für das Verzeichnis, nicht für den Daemon.
Martin
13

Wie Sie betonen, ist die ".d" -Nomenklatur rätselhaft und seltsam und hat in keinem modernen System wirklich Platz - Sie werden feststellen, dass die meisten modernen Dienste dazu tendierten, sie fallen zu lassen.

Der Grund, warum das Verzeichnis ist /etc/initund nicht, /etc/upstartist, dass Upstart der Projektname ist, die tatsächlich installierte Binärdatei also immer noch /sbin/initnicht sinnvoll ist , wenn ihre Konfiguration einen Namen hat, der nicht mit der Binärdatei übereinstimmt.

Scott
quelle
7
Dies ist falsch, siehe zB udevs rules.d, Xorgs relativ neu xorg.conf.d, nicht zu alt /etc/profile.dusw.
Ruslan