¿Cuál es la conexión entre los directorios "/etc/init.d" y "/etc/rcX.d" en Linux?

25

Estoy aprendiendo la línea de comandos de un libro llamado " Linux Command Line and Shell Scripting Bible, Second Edition ". El libro dice esto:

Algunas implementaciones de Linux contienen una tabla de procesos para iniciarse automáticamente en el arranque. En los sistemas Linux, esta tabla generalmente se encuentra en el archivo especial / etc / inittabs.

Otros sistemas (como la popular distribución de Ubuntu Linux) utilizan la carpeta /etc/init.d, que contiene scripts para iniciar y detener aplicaciones individuales en el momento del arranque. Los scripts se inician a través de entradas en las carpetas /etc/rcX.d, donde X es un nivel de ejecución.

Probablemente porque soy nuevo en Linux, no entendí lo que significaba el segundo párrafo citado. ¿Alguien puede explicar lo mismo en un lenguaje mucho más claro?

soy yo
fuente
esto se ha pedido muchas veces antes
bsd
@bdowning Este es diferente. Tengo un contexto Las preguntas que veo en la página a la que enlazaste son diferentes, IMO.
its_me
@bdowning off, pero marcar como duplicado habría sido más informativo si lo crees así
n611x007

Respuestas:

30

Vamos a olvidar init.do rcx.dy mantener las cosas muy simple. Imagine que está programando un programa cuya única responsabilidad es ejecutar o eliminar otros scripts uno por uno.

Sin embargo, su próximo problema es asegurarse de que funcionen en orden. ¿Cómo realizarías eso?

Y imaginemos que este programa buscó dentro de una scriptscarpeta para ejecutar los scripts. Para ordenar la prioridad de los scripts, debe nombrarlos en un orden numérico. Este orden es lo que dicta la relación entre init.dyrc

En otras palabras, init.dcontiene los scripts para ejecutar y rcX.dcontiene su orden de ejecución.

El Xvalor en rcX.d es el nivel de ejecución. Esto podría traducirse libremente al estado actual del sistema operativo.

Si cava dentro de los rcX.dscripts, encontrará este formato:

Xxxabcd
  • Xse reemplaza con Ko S, que significa si el script debe estar killedo starteden el nivel de ejecución actual
  • xx es el número de orden
  • abcd es el nombre del script (el nombre es irrelevante, sin embargo, donde apunta es el script que se ejecutará)
quién soy
fuente
2
maravillosa explicación, muy clara. Gracias @whoami
its_me
9

Existen varios sistemas init diferentes para Linux. Los principales son SysVinit (el tradicional), Upstart (reemplazo de Ubuntu) y SystemD (impulsado por Fedora y Gnome). Los directorios /etc/init.dy /etc/rc?.dson utilizados por SysVinit. El libro puede mencionarlos con respecto a Ubuntu porque la información está un poco anticuada (Ubuntu solía usar SysVinit como todos los demás) o porque esos directorios todavía existen por compatibilidad.

/etc/init.dcontiene un montón de scripts, cada uno con instrucciones para iniciar y detener un servicio. Algunos de estos servicios deben iniciarse en el momento del arranque; otros deben iniciarse en modo multiusuario pero no en modo de mantenimiento de usuario único; y es posible definir diferentes modos con diferentes conjuntos de servicios deseados. SysVinit maneja esto a través de los niveles de ejecución . El directorio /etc/rc$N.dcontiene los scripts para ejecutar al ingresar el nivel de ejecución N ( /etc/rc$N.d/S*) y los scripts para ejecutar al salir del nivel de ejecución N ( /etc/rc$N.d/K*). Debido a que muchos niveles de ejecución tienen secuencias de comandos en común, en lugar de almacenar una copia de las secuencias de comandos para cada nivel de ejecución, las secuencias de comandos se almacenan en una única ubicación /etc/init.dy los directorios específicos del nivel de ejecución/etc/rc?.dcontienen enlaces simbólicos. Además, los nombres de los enlaces simbólicos indican si el servicio se debe iniciar ( S*) o detener (eliminar K*) en ese nivel de ejecución, y se utiliza un prefijo numérico para controlar el orden en que se ejecutan los scripts.

El script responsable de la travesía /etc/rc$N.des /etc/init.d/rc(en Ubuntu pre-Upstart y en Debian; las ubicaciones pueden variar en otras distribuciones de Linux).

Gilles 'SO- deja de ser malvado'
fuente
Por lo tanto, no está usando Ubuntu /etc/init.dy /etc/rc?.dmás, y tiene Upstart en su lugar?
its_me
1
@ KrishD'Souza No del todo. Ubuntu usa Upstart en lugar de SysVinit, pero muchos paquetes aún envían scripts /etc/init.d( en lugar de .confarchivos Upstart /etc/init), por lo que Upstart todavía es compatible /etc/init.dy /etc/rc?.dpor compatibilidad.
Gilles 'SO- deja de ser malvado'
Ubuntu cambió de Upstart a systemd desde 15.04. Entonces, en este momento (16.04) Ubuntu tiene tres sistemas de inicio: SysVinit, Upstart y systemd. Primero y segundo quedan para compatibilidad con versiones anteriores.
PetroCliff
4

/etc/init.d es el directorio al que pertenecen los scripts de inicio.

Aquí etc/rcX.des donde los enlaces controlan qué servicios se eliminan o inician al ingresar al nivel de ejecución X. Los archivos que rcX.dcomienzan con K se ejecutan con el parámetro stopy los archivos que comienzan con Sse ejecutan con el parámetro start. Es típico secuenciar el inicio y el fin de la orden usando un número de dos dígitos después de Ko S. Para garantizar el correcto inicio y finalización del pedido, es común que las dos secuencias sumen 100.

Los programas se pueden deshabilitar en un nivel de ejecución eliminando los enlaces o cambiando el caso de Ko Shacia ko s.

EDITAR: Los administradores generalmente ejecutan los scripts desde los /etc/init.dcuales puede haber un enlace simbólico a otro directorio dependiendo de la distribución. (Diferentes distribuciones tienen diferentes estándares).

El rcX.dcódigo de inicialización los utiliza para cambiar los niveles de ejecución.

BillThor
fuente
En la mayoría de los sistemas, /etc/init.des un enlace simbólico al directorio bajo/etc/rc.d/init.d
Nikhil Mulley
1
Entonces, básicamente /etc/init.des inútil sin /etc/rcX.d? Y dado /etc/rcX.dque el controlador de los programas que se inician al inicio, su función es similar a la de /etc/init.d¿correcto?
its_me
Esto depende del sistema. Gentoo, por ejemplo, usa solo /etc/init.d para sus archivos init; no tiene directorios /etc/rc*.d. Arch Linux, del mismo modo, solo tiene /etc/rc.d, en lugar de /etc/init.d.
laebshade
1

Aunque @BillThor lo ha respondido muy bien, aquí tengo mi comprensión /etc/rcX.dy /etc/init.d:

  • /etc/init.d contiene scripts para iniciar y detener aplicaciones individuales en el momento del arranque.
  • /etc/rc?.dLos directorios representan varios niveles de ejecución y los scripts que contiene no son más que enlaces simbólicos a los scripts reales en el /etc/init.ddirectorio. Cambiar los niveles de ejecución cambia el modo del sistema, como el modo de usuario único muy básico al modo de solo consola a la interfaz gráfica avanzada.

Por lo tanto, no hay uso de /etc/rc?.ddirectorios sin el /etc/init.dpropio (y, por supuesto, viceversa).

soy yo
fuente