Linux Proceso de arranque del sistema

Cuando Linux arranca, veremos mucha información de inicio.

El proceso de arranque del sistema Linux no es tan complicado como la gente imagina; el proceso se puede dividir en 5 etapas:

  • Arranque del kernel.
  • Ejecutar init.
  • Inicialización del sistema.
  • Establecer terminal.
  • Los usuarios inician sesión en el sistema.

Tipos de programas init:

  • SysV:init, antes de CentOS 5, archivo de configuración: /etc/inittab.
  • Upstart:init, CentOS 6, archivos de configuración: /etc/inittab, /etc/init/*.conf.
  • Systemd:systemd, CentOS 7, archivos de configuración: /usr/lib/systemd/system, /etc/systemd/system.

Arranque del kernel

Cuando se enciende la computadora, primero la BIOS realiza el autotest de encendido (POST), y se inicia desde el dispositivo de arranque configurado en la BIOS (normalmente el disco duro).

Después de que el sistema operativo toma el control del hardware, primero lee el archivo del kernel en el directorio /boot.


Ejecutar init

El proceso init es el punto de partida de todos los procesos del sistema. Puedes compararlo con el antepasado de todos los procesos del sistema; sin este proceso, ningún proceso del sistema se iniciaría.

El programa init primero necesita leer el archivo de configuración /etc/inittab.

Niveles de ejecución

Muchos programas necesitan iniciarse al arrancar. En Windows se llaman "servicios" (service), y en Linux se llaman "demonios" (daemon).

Una de las principales tareas del proceso init es ejecutar estos programas que se inician al arrancar.

Pero diferentes situaciones requieren iniciar diferentes programas. Por ejemplo, cuando se usa como servidor, hay que iniciar Apache; como escritorio, no es necesario.

Linux permite asignar diferentes programas de inicio para diferentes situaciones; esto se llama "nivel de ejecución" (runlevel). Es decir, al arrancar, se determina qué programas ejecutar según el "nivel de ejecución".

El sistema Linux tiene 7 niveles de ejecución (runlevel):

  • Nivel de ejecución 0: estado de parada del sistema. El nivel de ejecución predeterminado del sistema no puede establecerse en 0; de lo contrario, no se iniciará normalmente.
  • Nivel de ejecución 1: estado de trabajo de un solo usuario, permisos de root, para mantenimiento del sistema, se prohíbe el inicio de sesión remoto.
  • Nivel de ejecución 2: estado multiusuario (sin NFS).
  • Nivel de ejecución 3: estado multiusuario completo (con NFS); después de iniciar sesión se entra al modo de línea de comandos de la consola.
  • Nivel de ejecución 4: no utilizado por el sistema, reservado.
  • Nivel de ejecución 5: consola X11; después de iniciar sesión se entra al modo GUI gráfico.
  • Nivel de ejecución 6: el sistema se apaga y reinicia normalmente. El nivel de ejecución predeterminado no puede establecerse en 6; de lo contrario, no se iniciará normalmente.

Inicialización del sistema

En el archivo de configuración de init hay una línea: si::sysinit:/etc/rc.d/rc.sysinit. Esta llama y ejecuta /etc/rc.d/rc.sysinit, y rc.sysinit es un script de bash shell que principalmente realiza algunos trabajos de inicialización del sistema. rc.sysinit es un script importante que debe ejecutarse primero en cada nivel de ejecución.

El trabajo que realiza principalmente incluye: activar la partición de intercambio, revisar el disco, cargar módulos de hardware y otras tareas que requieren ejecución prioritaria.

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

Esta línea indica ejecutar /etc/rc.d/rc con 5 como parámetro. /etc/rc.d/rc es un script de Shell que acepta 5 como parámetro para ejecutar todos los scripts de inicio rc en el directorio /etc/rc.d/rc5.d/. Estos scripts de inicio en el directorio /etc/rc.d/rc5.d/ son en realidad archivos de enlace, no los scripts rc de inicio reales. Los scripts rc de inicio reales se encuentran en el directorio /etc/rc.d/init.d/.

Y estos scripts de inicio rc tienen un uso similar; generalmente aceptan parámetros como start, stop, restart, status, etc.

Los scripts de inicio rc en /etc/rc.d/rc5.d/ suelen ser archivos de enlace que comienzan con K o S. Para los scripts de inicio que comienzan con S, se ejecutan con el parámetro start.

Y si se encuentra que existen correspondientes enlaces que comienzan con K para el script, y que ya está en estado de ejecución (marcado por los archivos en /var/lock/subsys/), primero se detienen esos demonios ya iniciados con el parámetro stop, y luego se vuelven a ejecutar.

Esto se hace para asegurar que cuando init cambie el nivel de ejecución, todos los demonios relacionados se reinicien.

En cuanto a qué demonios se ejecutarán en cada nivel de ejecución, el usuario puede configurarlo mediante chkconfig o "System Services" en setup.


Establecer terminal

Después de que rc termina de ejecutarse, vuelve a init. En este momento, el entorno básico del sistema ya está configurado y varios demonios ya se han iniciado.

A continuación, init abrirá 6 terminales para que los usuarios inicien sesión en el sistema. Las siguientes 6 líneas en inittab definen los 6 terminales:

1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6

De lo anterior se puede ver que en los niveles de ejecución 2, 3, 4 y 5, el programa mingetty se ejecutará en modo respawn. El programa mingetty puede abrir terminales y configurar el modo.

Al mismo tiempo, mostrará una interfaz de inicio de sesión de texto, que es la interfaz de inicio de sesión que vemos a menudo. En esta interfaz de inicio de sesión se le pedirá al usuario que ingrese un nombre de usuario, y el usuario ingresado se pasará como parámetro al programa login para verificar la identidad del usuario.


Los usuarios inician sesión en el sistema

En general, hay tres formas de inicio de sesión para los usuarios:

  • (1) Inicio de sesión por línea de comandos
  • (2) Inicio de sesión SSH
  • (3) Inicio de sesión por interfaz gráfica

Para los usuarios en modo gráfico con nivel de ejecución 5, su inicio de sesión se realiza a través de una interfaz de inicio de sesión gráfica. Después de iniciar sesión correctamente, pueden entrar directamente a administradores de ventanas como KDE, Gnome, etc.

Pero este artículo se centra principalmente en el caso del inicio de sesión en modo texto: cuando vemos la interfaz de inicio de sesión de mingetty, podemos ingresar el nombre de usuario y la contraseña para iniciar sesión en el sistema.

El programa de verificación de cuentas de Linux es login; login recibe el nombre de usuario enviado por mingetty como parámetro de usuario.

Luego login analiza el nombre de usuario: si el nombre de usuario no es root y existe el archivo /etc/nologin, login mostrará el contenido del archivo nologin y luego saldrá.

Esto se usa normalmente para evitar que usuarios no root inicien sesión durante el mantenimiento del sistema. Solo los terminales registrados en /etc/securetty permiten el inicio de sesión del usuario root. Si este archivo no existe, el usuario root puede iniciar sesión en cualquier terminal.

El archivo /etc/usertty se utiliza para imponer restricciones de acceso adicionales a los usuarios. Si este archivo no existe, no hay otras restricciones.


Forma de cambiar entre el modo gráfico y el modo texto

Linux proporciona por defecto seis terminales de ventana de comandos para que iniciemos sesión.

Por defecto, iniciamos sesión en la primera ventana, es decir, tty1. Estas seis ventanas son tty1, tty2 ... tty6. Puedes presionar Ctrl + Alt + F1 ~ F6 para cambiar entre ellas.

Si has instalado una interfaz gráfica, por defecto se entra a la interfaz gráfica. En este momento, puedes presionar Ctrl + Alt + F1 ~ F6 para entrar a una de las interfaces de ventana de comandos.

Cuando has entrado en la interfaz de ventana de comandos, para volver a la interfaz gráfica solo tienes que presionar Ctrl + Alt + F7.

Si usas una máquina virtual VMware, los atajos para cambiar de ventana de comandos son Alt + Space + F1~F6. Si estás en la interfaz gráfica, presiona Alt + Shift + Ctrl + F1~F6 para cambiar a la ventana de comandos.


Apagado de Linux

En el ámbito de Linux, se utiliza principalmente en servidores, y rara vez se realiza una operación de apagado. Después de todo, un servicio que se ejecuta en un servidor no tiene fin; solo en circunstancias especiales, y por necesidad, se apaga.

El flujo correcto de apagado es: sync > shutdown > reboot > halt

La instrucción de apagado es: shutdown. Puedes usar man shutdown para ver el documento de ayuda.

Por ejemplo, puedes ejecutar el siguiente comando para apagar:

sync 将数据由内存同步到硬盘中。

shutdown 关机指令,你可以man shutdown 来看一下帮助文档。例如你可以运行如下命令关机:

shutdown –h 10 ‘This server will shutdown after 10 mins’ 这个命令告诉大家,计算机将在10分钟后关机,并且会显示在登陆用户的当前屏幕中。

shutdown –h now 立马关机

shutdown –h 20:25 系统会在今天20:25关机

shutdown –h +10 十分钟后关机

shutdown –r now 系统立马重启

shutdown –r +10 系统十分钟后重启

reboot 就是重启,等同于 shutdown –r now

halt 关闭系统,等同于shutdown –h now 和 poweroff

En resumen, ya sea reiniciando el sistema o apagándolo, primero hay que ejecutar elsynccomando, para escribir los datos de la memoria en el disco.

Los comandos de apagado sonshutdown –h now halt poweroffy init 0los comandos para reiniciar el sistema sonshutdown –r now reboot init 6。


Artículo de referencia:

Otras extensiones