Quelle est la différence entre /etc/init/
et /etc/init.d/
?
Plus généralement, quelle est la signification du suffixe .d
dans un répertoire?
/etc/init.d
contient les scripts utilisés par les outils d'initialisation System V (SysVinit). Il s'agit du package de gestion de services traditionnel pour Linux, qui contient le programme init
(le premier processus exécuté une fois le noyau initialisé¹), ainsi qu'une infrastructure permettant de démarrer et d'arrêter des services et de les configurer. Plus précisément, les fichiers de /etc/init.d
sont des scripts Shell qui répondent aux commandes start
, stop
, restart
et (lorsque cela est pris en charge) reload
pour gérer un service particulier. Ces scripts peuvent être appelés directement ou (le plus souvent) via un autre déclencheur (généralement la présence d'un lien symbolique dans /etc/rc?.d/
).
/etc/init
contient les fichiers de configuration utilisés par Upstart. Upstart est un nouveau progiciel de gestion de services défendu par Ubuntu. Les fichiers de /etc/init
sont des fichiers de configuration indiquant à Upstart comment et quand start
, stop
, reload
la configuration ou interroger le status
d'un service. À partir de lucid, Ubuntu est en train de passer de SysVinit à Upstart, ce qui explique pourquoi de nombreux services sont livrés avec des scripts SysVinit même si les fichiers de configuration Upstart sont préférés. En fait, les scripts SysVinit sont traités par une couche de compatibilité dans Upstart.
.d
dans les noms de répertoire indique généralement un répertoire contenant de nombreux fichiers de configuration ou scripts pour une situation particulière (par exemple, /etc/apt/sources.list.d
contient des fichiers concaténés pour créer un sources.list
virtuel; /etc/network/if-up.d
contient des scripts qui sont exécutés lorsqu’un réseau i nter f as est activé). Cette structure est généralement utilisée lorsque chaque entrée du répertoire est fournie par une source différente, afin que chaque package puisse déposer son propre plug-in sans avoir à analyser un seul fichier de configuration pour se référencer lui-même. Dans ce cas, il se trouve que “init” est un nom logique pour le répertoire, SysVinit est arrivé en premier et a utilisé init.d
, et Upstart a utilisé un init
simple pour un répertoire ayant le même objectif (cela aurait été plus “traditionnel”, et peut-être moins arrogant, s’ils avaient utilisé /etc/upstart.d
à la place).
¹ sans compter initrd
Le ".d" est généralement ajouté à un nom de répertoire pour indiquer que ce qui était (ou aurait pu être) traité par un seul script ou un seul fichier de configuration a été scindé en plusieurs fichiers pour des raisons de commodité. doivent être inclus ou exécutés ensemble.
Par exemple, /etc/Apache/conf.d/
ou /etc/apt/sources.d/
Dans les cas où il est important de savoir dans quel ordre ils doivent être inclus/exécutés, les fichiers de ces répertoires commencent parfois par un numéro, comme "00-default" ou "80-user", afin de s'exécuter dans le bon ordre.
Dans le cas de /etc/init.d/
, cela indique en quelque sorte que les scripts de "init.d" doivent tous être exécutés. De nos jours, cependant, le système init des systèmes d'exploitation modernes est un peu plus compliqué que cela, mais le nom du répertoire est toujours là.
Comme vous l'avez fait remarquer, la nomenclature ".d" est curieuse et étrange et n'a pas sa place dans aucun système moderne - vous remarquerez que la plupart des services modernes ont tendance à la laisser tomber.
La raison pour laquelle le répertoire est /etc/init
et non pas /etc/upstart
est parce que Upstart est le nom du projet, le binaire installé est toujours /sbin/init
et il n’aurait donc aucun sens pour sa configuration d’avoir un nom qui ne correspond pas au binaire.