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


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

Allgemeiner, welche Bedeutung hat das? .d Suffix zu einem Verzeichnis übermitteln?


217
2017-10-01 22:59


Ursprung




Antworten:


/etc/init.d enthält Skripte, die von den System V-Init-Tools (SysVinit) verwendet werden. Dies ist das traditionelle Service - Management - Paket für Linux, das die init Programm (der erste Prozess, der ausgeführt wird, wenn der Kernel die Initialisierung abgeschlossen hat¹) sowie eine Infrastruktur zum Starten und Stoppen von Diensten und zum Konfigurieren dieser Dienste. Insbesondere Dateien in /etc/init.d sind Shell-Skripte, die darauf reagieren start, stop, restartund (wenn unterstützt) reload Befehle zum Verwalten eines bestimmten Dienstes. Diese Skripte können direkt oder (am häufigsten) über einen anderen Trigger aufgerufen werden (normalerweise das Vorhandensein eines symbolischen Links in /etc/rc?.d/).

/etc/init enthält Konfigurationsdateien, die von Upstart verwendet werden. Upstart ist ein junges Service-Management-Paket, das von Ubuntu unterstützt wird. Dateien in /etc/init sind Konfigurationsdateien, die Upstart mitteilen, wie und wann start, stop, reload die Konfiguration oder Abfrage der status eines Dienstes. Klar ist, dass Ubuntu von SysVinit zu Upstart wechselt, was erklärt, warum viele Dienste mit SysVinit-Skripten kommen, obwohl Upstart-Konfigurationsdateien bevorzugt werden. Tatsächlich werden die SysVinit-Skripte von einer Kompatibilitätsschicht in Upstart verarbeitet.

.d in Verzeichnisnamen bezeichnet typischerweise ein Verzeichnis, das viele Konfigurationsdateien oder Skripte für eine bestimmte Situation enthält (z. /etc/apt/sources.list.d enthält Dateien, die verkettet sind, um eine virtuelle Datei zu erstellen sources.list; /etc/network/if-up.d enthält Skripte, die bei einem Netzwerk ausgeführt werden ichnachfAss ist aktiviert). Diese Struktur wird normalerweise verwendet, wenn jeder Eintrag in dem Verzeichnis von einer anderen Quelle bereitgestellt wird, so dass jedes Paket sein eigenes Plug-in ablegen kann, ohne eine einzelne Konfigurationsdatei analysieren zu müssen, um sich selbst zu referenzieren. In diesem Fall ist es einfach so, dass "init" ein logischer Name für das Verzeichnis ist, SysVinit kam zuerst und wurde benutzt init.d, und Emporkömmling benutzt Ebene init für ein Verzeichnis mit einem ähnlichen Zweck (es wäre mehr "Mainstream" gewesen, und vielleicht weniger arrogant, wenn sie es benutzt hätten /etc/upstart.d stattdessen).

¹ Initrd nicht mitzählen


217
2017-10-01 23:28



Esoterische historische Notiz: die .d Verzeichnisse, die mit System V eingegeben wurden. Es war eine verwirrende Schreibweise und dann wahrscheinlich die Idee einer Person, die in die Codebasis kam und nicht gehen konnte. Zum Beispiel, wenn Sie das denken cat ist ein schlechter Name für die Aufgabe, die es ausführt, stellen Sie sich vor, wie viele Dateien im System Sie berühren müssten, um es zu ändern. - msw
Auf Systemen, die beide Verzeichnisse haben, welche von Upstart und SysVinit wird verwendet? Gibt es eine Möglichkeit zu überprüfen? - asheeshr
@AsheeshR Überprüfen Sie, ob ein Paket aufgerufen wurde upstart oder sysvinit. Und in den letzten Versionen könnte es sein systemd auch (die für Ubuntu nicht existierte, als ich meine Antwort schrieb). Es ist das Paket, das Ihnen zur Verfügung steht /sbin/init (dpkg -S /sbin/init). - Gilles
Auf der AWS Ubuntu-Instanz, die ich benutze (von Bitnami), ist es die upstart Paket, das / sbin / init (ran dpkg -S /sbin/init). Aber Bitnami hat sein Skript in das Verzeichnis /etc/init.d gestellt. Ist das nicht widersprüchlich mit Ihrer Antwort auf @ AsheeshR oben? Vielen Dank. - Sabuncu
@Sabuncu Dies ist ein Beispiel für "SysVinit-Skripte werden von einer Kompatibilitätsschicht in Upstart verarbeitet". - Gilles


Das ".d" wird normalerweise an einen Verzeichnisnamen angehängt, um anzuzeigen, dass das, was einmal von einem einzelnen Skript oder einer einzelnen Konfigurationsdatei gehandhabt wurde (oder was hätte sein können), aus Gründen der Zweckmäßigkeit in mehrere Dateien aufgeteilt wurde sollte zusammen enthalten oder ausgeführt werden.

Beispielsweise, /etc/apache/conf.d/ oder /etc/apt/sources.d/

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

Im Falle des /etc/init.d/ Es zeigt an, dass alle Skripte in "init.d" ausgeführt werden sollten. Heutzutage ist das Init-System moderner Betriebssysteme jedoch etwas komplizierter, aber der Verzeichnisname ist immer noch da.


26
2018-05-10 02:51



Vielleicht das .d bedeutet, dass es sich auf einen "Deamon" -Prozess bezieht, der normalerweise beim Booten gestartet wird.
.d ist definitiv für Verzeichnis, nicht für Daemon. - Martin


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

Der Grund für das Verzeichnis ist /etc/init und nicht /etc/upstart Weil Upstart der Projektname ist, ist die tatsächlich installierte Binärdatei immer noch vorhanden /sbin/init daher wäre es für die Konfiguration nicht sinnvoll, einen Namen zu haben, der nicht mit der Binärdatei übereinstimmt.


12
2017-10-13 01:59



Dies ist falsch, siehe z.B. udevs rules.d, Xorg ist relativ neu xorg.conf.d, Nicht zu alt /etc/profile.d etc.. - Ruslan