¿Cuál es la diferencia entre / etc / init / y /etc/init.d/?

230

¿Cuál es la diferencia entre /etc/init/y /etc/init.d/?

En términos más generales, ¿qué significado .dtransmite el sufijo a un directorio?

Olivier Lalonde
fuente

Respuestas:

229

/etc/init.dcontiene scripts utilizados por las herramientas de inicio de System V (SysVinit). Este es el paquete de administración de servicios tradicional para Linux, que contiene el initprograma (el primer proceso que se ejecuta cuando el kernel ha terminado de inicializarse), así como cierta infraestructura para iniciar y detener servicios y configurarlos. En concreto, los archivos de /etc/init.dscripts de shell que responden a start, stop, restart, y (cuando sea compatible) reloadlos comandos para gestionar un servicio en particular. Estas secuencias de comandos se pueden invocar directamente o (más comúnmente) a través de algún otro desencadenante (generalmente, la presencia de un enlace simbólico /etc/rc?.d/).

/etc/initcontiene archivos de configuración utilizados por Upstart. Upstart es un paquete de gestión de servicios joven defendido por Ubuntu. Los archivos en /etc/initson archivos de configuración contando Upstart cómo y cuándo start, stop, reloadla configuración, o consultar la statusde un servicio. A partir de lucid, Ubuntu está haciendo la transición de SysVinit a Upstart, lo que explica por qué muchos servicios vienen con scripts de SysVinit a pesar de que se prefieren los archivos de configuración de Upstart. De hecho, los scripts SysVinit son procesados ​​por una capa de compatibilidad en Upstart.

.den los nombres de directorio indica típicamente un directorio que contiene muchos archivos de configuración o secuencias de comandos para una situación particular (por ejemplo, /etc/apt/sources.list.dcontiene archivos que se concatenan para hacer una virtual sources.list; /etc/network/if-up.dcontiene secuencias de comandos que se ejecutan cuando una red i nter f ace se activa). Esta estructura se usa generalmente cuando cada entrada en el directorio es proporcionada por una fuente diferente, de modo que cada paquete puede depositar su propio complemento sin tener que analizar un solo archivo de configuración para hacer referencia a sí mismo. En este caso, simplemente sucede que "init" es un nombre lógico para el directorio, SysVinit vino primero y se usó init.d, y Upstart usó sin formatoinitpara un directorio con un propósito similar (habría sido más "convencional", y quizás menos arrogante, si hubieran usado en su /etc/upstart.dlugar).

¹ sin contar initrd

Gilles
fuente
28
nota histórica esotérica: los .ddirectorios ingresaron con el Sistema V. Era una notación desconcertante y, en última instancia, probablemente la idea de una persona que entró en la base de código y no pudo salir. Por ejemplo, si cree que cates un mal nombre para la tarea que realiza, imagine cuántos archivos en todo el sistema tendría que tocar para cambiarlo.
msw
En los sistemas que tienen ambos directorios, ¿cuál de Upstart y SysVinit se usa? ¿Hay una manera de comprobar?
asheeshr
3
@AsheeshR Compruebe si hay un paquete llamado upstarto sysvinit. Y en versiones recientes, podría ser systemdasí (que no existía para Ubuntu cuando escribí mi respuesta). Es el paquete que proporcione /sbin/init( dpkg -S /sbin/init).
Gilles
En la instancia de AWS Ubuntu que estoy usando (de Bitnami), es el upstartpaquete el que proporciona / sbin / init (run dpkg -S /sbin/init). Pero Bitnami ha colocado su script en el directorio /etc/init.d. ¿No es esto conflictivo con tu respuesta a @AsheeshR arriba? Gracias.
Sabuncu
@Sabuncu Este es un ejemplo de "Las secuencias de comandos SysVinit son procesadas por una capa de compatibilidad en Upstart".
Gilles
29

El ".d" generalmente se agrega a un nombre de directorio para indicar que lo que solía ser (o lo que podría haber sido) manejado por un solo script o un único archivo de configuración se ha dividido en varios archivos por conveniencia, pero que deben incluirse o ejecutarse juntos.

Por ejemplo, /etc/apache/conf.d/o/etc/apt/sources.d/

En los casos en que es importante en qué orden deben incluirse / ejecutarse, los archivos en estos directorios a veces comienzan con un número, como "00-default" u "80-user" para que se ejecuten en el orden correcto.

En el caso de /etc/init.d/esto, indica que los scripts en "init.d" deberían ejecutarse. Hoy en día, sin embargo, el sistema init de los sistemas operativos modernos está un poco más involucrado que eso, pero el nombre del directorio sigue ahí.

thomasrutter
fuente
Tal vez el .dmedio esté relacionado con un proceso 'deamon' que normalmente se inicia en el momento del arranque.
21
.d definitivamente es para el directorio, no para el demonio.
Martin
13

Como usted señala, la nomenclatura ".d" es desconcertante y extraña, y realmente no tiene ningún lugar en ningún sistema moderno; notará que la mayoría de los servicios modernos han tendido a abandonarla.

La razón por la que el directorio es /etc/inity no /etc/upstartes porque Upstart es el nombre del proyecto, el binario real instalado sigue siendo, /sbin/initpor lo tanto, no tendría sentido que su configuración tenga un nombre que no coincida con el binario.

Scott
fuente
77
Esto está mal, ver, por ejemplo, udev rules.d, Xorg es relativamente reciente xorg.conf.d, no demasiado viejo, /etc/profile.detc.
Ruslan