Linux Botas

Resulta que no hay mucho en el proceso de arranque:

1. Un cargador de arranque encuentra la imagen del kernel en el disk, lo carga en la memoria y lo inicia.
2. El núcleo inicializar los dispositivos y sus controladores.
3. El kernel monta el archivo raíz.system.
4. El kernel comienza el programa llamado init.
5. init establece el resto de los procesos en movimiento.
6. Los últimos procesos que init inicia como parte de la secuencia de inicio le permiten iniciar la sesión.

Identificar cada etapa del proceso de arranque es invaluable para solucionar problemas de arranque y comprender los system como un todo. Para comenzar, concéntrese en el cargador de arranque, que es la pantalla inicial o el mensaje que recibe después de que la computadora hace su autoprueba de encendido, preguntando qué system correr. Después de elegir, el gestor de arranque ejecuta el Linux núcleo, entregando el control del system al núcleo.

Hay una discusión detallada del kernel En otras partes de este libro es un extracto de la cual este artículo. Este artículo cubre el fase de inicialización del kernel, la etapa en la que el kernel imprime un montón de mensajes sobre el hardware presente en el system. El kernel inicia init justo después de mostrar un mensaje que proclama que el kernel ha montado el archivo raízsystem:

VFS: Montado raíz (archivos ext2system) solo lectura.

Poco después, verá un mensaje sobre el inicio de init, seguido de system mensajes de inicio del servicio y, finalmente, aparece un mensaje de inicio de sesión de algún tipo.

NOTA en Red Hat Linux, la nota de inicio es especialmente obvia, porque le da la "bienvenida" a Red Hat Linux.” Todos los mensajes posteriores muestran el éxito o el fracaso entre paréntesis en el lado derecho de la pantalla.

La mayor parte de este capítulo trata con init, Porque es la parte de la secuencia de arranque donde es que haya un mayor control.
init

No hay nada especial acerca de init. Es un programa como cualquier otro en el Linux systemy lo encontrará en / sbin junto con otros system binarios. El propósito principal de init es iniciar y detener otros programas en una secuencia particular. Todo lo que tienes que saber es cómo funciona esta secuencia.

Hay algunas variaciones diferentes, pero la mayoría Linux Las distribuciones usan el System V estilo discutido aquí. Algunas distribuciones usan una versión más simple que se parece a BSD init, pero es poco probable que encuentre esto.

los niveles de ejecución

En un momento dado en un Linux system, se está ejecutando un determinado conjunto básico de procesos. Este estado del machine se llama su nivel de ejecución, y se denota con un número del 0 al 6. El system pasa la mayor parte de su tiempo en un solo nivel de ejecución. Sin embargo, cuando cierra el machine down, init cambia a un nivel de ejecución diferente para terminar el system servicios de forma ordenada y decirle al núcleo que se detenga. Otro nivel de ejecución es para un solo usuario mode, discutido después.

La forma más fácil de controlar los niveles de ejecución es examinar el archivo de configuración de inicio, /etc/inittab. Busque una línea como la siguiente:

ID: 5: initdefault:

Esta línea significa que el default nivel de ejecución en el system es 5. Todas las líneas en el archivo inittab toman esta forma, con cuatro campos separados por dos puntos que aparecen en el siguiente orden:
# Un identificador único (una cadena corta, tales como identificador en el ejemplo anterior)
# El número aplicable el nivel de ejecución (s)
# La acción que debe realizar init (en el ejemplo anterior, la acción es establecer el default nivel de ejecución a 5)
# Un comando a ejecutar (opcional)

No hay ningún comando para ejecutar en el init anteriordefault ejemplo porque un comando no tiene sentido en el contexto de establecer el default nivel de ejecución. Mire un poco más abajo en inittab, hasta que vea una línea como esta:

l5: 5: esperar: /etc/rc.d/rc 5

Esta línea desencadena la mayoría de system configuración y servicios a través de los directorios rc * .d e init.d. Puede ver que init está configurado para ejecutar un comando llamado /etc/rc.d/rc 5 cuando está en el nivel de ejecución 5. La acción de espera indica cuándo y cómo init ejecuta el comando: ejecute rc 5 una vez entering runlevel 5, y luego espere a que termine este comando antes de hacer cualquier otra cosa.

Hay varias acciones diferentes en addición para iniciardefault y espere, especialmente en lo que respecta a la administración de energía, y la página de manual inittab (5) le informa todo sobre ellos. Los que es más probable que encuentre se explican en las siguientes secciones.

respawn

La acción de reaparición hace que init ejecute el siguiente comando y, si el comando termina de ejecutarse, lo vuelva a ejecutar. Es probable que vea algo similar a esta línea en su archivo inittab:

1: 2345: respawn: / sbin / mingetty tty1

Los Programas Getty Proporcionar indicadores de conexión. La línea anterior es para la primera consola virtual (/ dev / tty1), el que se ve el Al presionar ALT-CONTROL-ALT-F1 o F1. La acción de reaparición lleva de nuevo el indicador de entrada después de que finalice la sesión.

ctrlen otra parte

La ctrlLa acción altdel controla lo que system hace cuando presiona CONTROL-ALT-DELETE en una consola virtual. En la mayoría systems, se trata de una especie de comando de reinicio que utiliza el comando de apagado.

sysinit

La acción sysinit es lo primero que debe ejecutar init cuando se inicia, antes de enteren cualquier nivel de ejecución.

Cómo procesa en los niveles de ejecución comienzan

Ahora está listo para aprender cómo iniciar el system services, justo antes de que le permita iniciar sesión. Recuerde esta línea inittab de antes:

l5: 5: esperar: /etc/rc.d/rc 5

Esta pequeña línea desencadena muchos otros programas. RC significa órdenes de marcha, y se oye la gente se refiere a los comandos como secuencias de comandos, programas o servicios. Así que, ¿dónde están estos comandos, de todos modos?

Para el nivel de ejecución 5, en este ejemplo, los comandos están probablemente en /etc/rc.d/rc5.d o /etc/rc5.d. El nivel de ejecución 1 usa rc1.d, el nivel de ejecución 2 usa rc2.d, y así sucesivamente. Puede encontrar lo siguiente items en el directorio rc5.d:

S10sysklogd S20ppp S99gpm
S12kerneld S25netstd_nfs S99httpd
S15netstd_init S30netstd_misc S99rmnologin
S18netbase S45pcmcia S99sshd
S20acct S89atd
S20logoutd S89cron

El comando inicia programas de nivel de ejecución 5 rc en este directorio ejecutando comandos GMT:

casa S10sysklogd
casa S12kerneld
casa S15netstd_init
casa S18netbase
...
casa S99sshd

Observe el argumento de inicio en cada comando. La S en el nombre de un comando significa que el comando debe ejecutarse al principio mode, y el número (00 a 99) determina en qué lugar de la secuencia rc inicia el comando.

El rc * .d comandos suele ser scripts de shell que los programas de inicio en / sbin o / usr / sbin. Normalmente, lo que pueda averiguar lo que uno de los comandos que realmente hace mirando el guión con menos o buscapersonas Otro programa.

Puede iniciar uno de estos servicios a mano. Por ejemplo, si desea iniciar el programa del servidor web httpd manualmente, ejecute S99httpd start. Del mismo modo, si alguna vez necesita eliminar uno de los servicios cuando el machine está activado, puede ejecutar el comando en el directorio rc * .d con el argumento stop (S99httpd stop, por ejemplo).

Algunos directorios rc*.d contienen comandos que comienzan con K (para "matar" o detener mode). En este caso, rc ejecuta el comando con el argumento de detención en lugar de inicio. Lo más probable es que encuentre comandos K ​​en los niveles de ejecución que cierran el system hacia abajo.

Adding y eliminando servicios

Si deseas add, elimine o modifique servicios en los directorios rc*.d, debe observar más de cerca los archivos que contiene. Una larga lista revela una estructura como esta:

lrwxrwxrwx. . . S10sysklogd -> ../init.d/sysklogd
lrwxrwxrwx. . . S12kerneld -> ../init.d/kerneld
lrwxrwxrwx. . . S15netstd_init -> ../init.d/netstd_init
lrwxrwxrwx. . . S18netbase -> ../init.d/netbase
...

Los comandos en un directorio rc*.d son en realidad enlaces simbólicos a archivos en un directorio init.d, generalmente en /etc o /etc/rc.d. Linux Las distribuciones contienen estos enlaces para que puedan usar los mismos scripts de inicio para todos los niveles de ejecución. Esta convención no es de ninguna manera un requisito, pero a menudo facilita un poco la organización.

Para evitar que uno de los comandos del directorio init.d se ejecute en un nivel de ejecución en particular, puede pensar en eliminar el enlace simbólico en el directorio rc * .d apropiado. Esto funciona, pero si comete un error y alguna vez necesita volver a colocar el enlace en su lugar, es posible que tenga problemas para recordar el nombre exacto del enlace. Por lo tanto, no debe eliminar los enlaces en los directorios rc * .d, sino más bien, add un guión bajo (_) al principio del nombre del enlace como este:

mv _S99httpd S99httpd

En el momento del arranque, rc ignora _S99httpd porque no comienza con S o K. Además, el nombre original sigue siendo obvio y tiene acceso rápido al comando si está en apuros y necesita iniciarlo manualmente.

A add un servicio, debe crear un script como los demás en el directorio init.d y luego hacer un enlace simbólico en el directorio rc * .d correcto. La forma más fácil de escribir una secuencia de comandos es examinar las secuencias de comandos que ya están en init.d, hacer una copia de una que comprenda y modificar la copia.

Cuándo adding un servicio, asegúrese de elegir un lugar apropiado en la secuencia de inicio para iniciar el servicio. Si el servicio se inicia demasiado pronto, es posible que no funcione debido a la dependencia de algún otro servicio. Para los servicios no esenciales, la mayoría systems administratorPrefiero los números de los años 90, después de la mayoría de los servicios que venían con el system.

Linux Las distribuciones generalmente vienen con un comando para habilitar y deshabilitar servicios en los directorios rc * .d. Por ejemplo, en Debian, el comando es update-rc.d, y en Red Hat Linux, el comando es chkconfig. Las interfaces gráficas de usuario también están disponibles. El uso de estos programas ayuda a mantener la coherencia de los directorios de inicio y ayuda con las actualizaciones.

SUGERENCIA: Uno de los más comunes Linux installproblemas de instalación es un servidor XFree86 configurado incorrectamente que se enciende y apaga, lo que system inutilizable en consolas. Para detener este comportamiento, arranque en monousuario mode y alterar su nivel de ejecución o servicios de nivel de ejecución. Busque algo que contenga xdm, gdm o kdm en sus directorios rc*.d, o en su archivo /etc/inittab.

init controlar

Ocasionalmente, necesita darle un pequeño empujón a init para decirle que cambie de nivel de ejecución, que vuelva a leer el archivo inittab, o simplemente para shut down las system. Porque init es siempre el primer proceso en un system, su ID de proceso es siempre 1.

Puede controlar init con telinit. Por ejemplo, si desea cambiar el nivel de ejecución 3, utilice este comando:

telinit 3

Al cambiar de nivel de ejecución, init intenta eliminar cualquier proceso que no esté en el archivo inittab para el nuevo nivel de ejecución. Por lo tanto, debe tener cuidado al cambiar los niveles de ejecución.

Cuando necesite add o elimine los trabajos de reaparición o realice cualquier otro cambio en el archivo inittab, debe informar a init sobre el cambio y hacer que vuelva a leer el archivo. Algunas personas usan kill -HUP 1 para decirle a init que haga esto. Este método tradicional funciona en la mayoría de las versiones de Unix, siempre que lo escriba correctamente. Sin embargo, también puede ejecutar este comando telinit:

telinit q

También puede usar telinit s para cambiar a un solo usuario mode.

cerrar

init también controla cómo system se apaga y se reinicia. La forma correcta de shut down a Linux machine es utilizar el comando de apagado.

Hay dos formas básicas de utilizar el apagado. Si detienes el system, cierra el machine hacia abajo y lo mantiene bajo. Para hacer el machine detener inmediatamente, use este comando:

shutdown-h now

En la mayoría modern machines con versiones razonablemente recientes de Linux, un apeadero corta el suministro eléctrico al machine. También puede reiniciar el machine. Para reiniciar, use -r en lugar de -h.

El proceso de apagado tarda varios segundos. Nunca debe reiniciar o apagar un machine durante esta etapa.

En el ejemplo anterior, ahora es el momento de shut down. Este argumento es obligatorio, pero hay muchas formas de especificarlo. Si quieres el macSi la máquina se apaga en algún momento en el futuro, una forma es usar + n, donde n es la cantidad de minutos que debe esperar el apagado antes de hacer su trabajo. Por otro options, consulte la página del manual de apagado (8).

Para hacer que el system reinicie en 10 minutos, ejecute este comando:

shutdown -r + 10

On Linux, shutdown notifica a cualquiera que haya iniciado sesión que el machine está bajando, pero hace poco trabajo real. Si especifica una hora que no sea ahora, el apagado crea un archivo llamado /etc/nologin. Cuando este archivo está presente, el system prohíbe los inicios de sesión de cualquier persona excepto el superusuario.

Cuándo system El tiempo de apagado finalmente llega, el apagado le dice a init que cambie al nivel de ejecución 0 para detener y al nivel de ejecución 6 para reiniciar. Cuando init enterEn el nivel de ejecución 0 o 6, tiene lugar todo lo siguiente, que puede verificar mirando los scripts dentro de rc0.d y rc6.d:

1. Que mata Cada proceso init de la lata (como lo haría Al cambiar a cualquier otro nivel de ejecución).

# Los comandos rc0.d / rc6.d iniciales se ejecutan, bloqueando system colocar los archivos en su lugar y realizar otros preparativos para el apagado.
# Los siguientes comandos rc0.d/rc6.d desmontan todos los archivossystems distintos de la raíz.
# Otros comandos rc0.d/rc6.d vuelven a montar el archivo raízsystem solo lectura.
# Todavía más comandos rc0.d/rc6.d escriben todos los datos almacenados en el búfer en el archivosystem con el programa de sincronización.
# Las órdenes finales rc0.d / rc6.d le dicen al núcleo que reiniciar o detener el reinicio, detenga o programa El apagado.

Los programas de reinicio y detención se comportan de manera diferente para cada nivel de ejecución, lo que puede causar confusión. por default, estos programas llaman a shutdown con -r o -h options, pero si el system ya está en el nivel de ejecución de detener o reiniciar, los programas le dicen al kernel que se apague inmediatamente. Si realmente quieres cerrar tu macDesconecte apresuradamente (sin tener en cuenta cualquier posible daño de un apagado desordenado), use la opción -f.

Apasionado por la tecnología, escribo con gusto en StealthSettings.com desde el año 2006. Tengo una amplia experiencia en sistemas operativos: macOS, Windows y Linux, así como en lenguajes de programación y plataformas de blogs (WordPress) y para tiendas en línea (WooCommerce, Magento, PrestaShop).

Deja un comentario