Qué son los niveles de ejecución en Linux

Qué son los niveles de ejecución en Linux y otros derivados de Unix.

Cuando arrancamos un sistema Linux, este inicia con unas condiciones predefinidas, que definen su estado. Por ejemplo, podemos iniciar un sistema Linux en línea de comandos y trabajar desde allí. Normalmente, esto esta indicado para usuarios expertos y sysadmin.

Por otro lado, tenemos el inicio de sesión con GUI, que es el más común y práctico para la inmensa mayoría de usuarios. Estos son estados diferentes, que comúnmente los denominamos niveles de ejecución. Determinar estos niveles es fundamental, pues de ellos dependen el uso que le daremos al sistema.

  • Especifica las herramientas y aplicaciones, que deben ejecutarse o estar disponibles al iniciar nuestro Linux.
  • Fijar el estado del sistema cuando arranca, por ejemplo si usara entorno de escritorio (GUI) o no.
Que son los niveles de ejecucion

Qué son los niveles de ejecución

 

Qué son los niveles de ejecución en Linux

Antes de comenzar con el artículo, puedes identificar el nivel de tu sistema con el siguiente comando.

runlevel

La salida del comando nos imprime un número, que en este caso es 5. Este es el nivel predeterminado en la mayoría de distribuciones Linux.

root@SoloLinux-demo:~# runlevel
N 5
root@SoloLinux-demo:~#

Puedes ver el manual de runlevel, con el comando man.

man runlevel

Ejemplo.

RUNLEVEL(8)                                                   runlevel                                                  RUNLEVEL(8)

NAME
       runlevel - Print previous and current SysV runlevel

SYNOPSIS
       runlevel [options...]

OVERVIEW
       "Runlevels" are an obsolete way to start and stop groups of services used in SysV init. systemd provides a compatibility
       layer that maps runlevels to targets, and associated binaries like runlevel. Nevertheless, only one runlevel can be "active"
       at a given time, while systemd can activate multiple targets concurrently, so the mapping to runlevels is confusing and only
       approximate. Runlevels should not be used in new code, and are mostly useful as a shorthand way to refer the matching
       systemd targets in kernel boot parameters.

       Table 1. Mapping between runlevels and systemd targets
       ┌─────────┬───────────────────┐
       │Runlevel │ Target            │
       ├─────────┼───────────────────┤
       │0        │ poweroff.target   │
       ├─────────┼───────────────────┤
       │1        │ rescue.target     │
       ├─────────┼───────────────────┤
       │2, 3, 4  │ multi-user.target │
       ├─────────┼───────────────────┤
       │5        │ graphical.target  │
       ├─────────┼───────────────────┤
       │6        │ reboot.target     │
       └─────────┴───────────────────┘

DESCRIPTION
       runlevel prints the previous and current SysV runlevel if they are known.

       The two runlevel characters are separated by a single space character. If a runlevel cannot be determined, N is printed
       instead. If neither can be determined, the word "unknown" is printed.
 Manual page runlevel(8) line 1/62 67% (press h for help or q to quit)

 

Como puedes comprobar, en el manual de runlevel nos indica que en realidad tenemos 7 niveles. Tal vez puedan parecer un poco complejos, pero te aseguro que no lo son. En la siguiente tabla lo verás todo mucho más claro.

NivelesObjetivoDescripción
0poweroff.targetApagado del sistema
1rescue.targetEjecuta un modo de usuario único utilizado por el root. No se permiten otros usuarios y tampoco se inician demonios. Se utiliza para reparar sistemas.
2multi-user.targetSe ejecuta en modo multiusuario, pero sin iniciar demonios, ni interfaces de red.
3multi-user.targetLanza el sistema en modo multiusuario, pero sin interfaz gráfica de usuario. Solo se permite la interfaz de línea de comandos
4multi-user.targetNo está definido por tanto no se utiliza. Se permite que el usuario determine su uso.
5graphical.targetInicia el sistema en modo multiusuario interfaz gráfica de usuario. Este nivel es el más utilizado por las distribuciones linux actuales.
6reboot.targetSe reinicia el sistema.

 

También puedes listar los niveles de tu sistema, con este comando.

ls -l /lib/systemd/system/runlevel*
Listar los niveles

Listar los niveles

 

Cada nivel de ejecución, es un entorno específico y particular que se ejecuta a través de un grupo de scripts. Estos scripts se guardan en directorios únicos, que a su vez se almacenan en el directorio /etc. Estos son los directorios que contienen los archivos específicos y sus scripts.

  • rc0.d
  • rc1.d
  • rc2.d
  • rc3.d
  • rc4.d
  • rc5.d
  • rc6.d

En nuestro primer ejemplo, vemos el contenido de «rc0.d».

ls /etc/rc0.d

Se imprime lo siguiente, pero ojo… esto puede variar dependiendo de tu sistema y configuración.

Contenido de rc0 d

Contenido de rc0.d

 

También puedes ver el contenido de todos los archivos, incluyendo otro directorio rc que contiene otro tipo de scripts que inician con el sistema.

ls /etc/rc*.*

Salida.

sergio@sololinux:~$ ls /etc/rc*.*
/etc/rc0.d:
K01alsa-utils    K01cryptdisks-early  K01hddtemp     K01lightdm        K01networking  K01rsyslog            K01uuidd
K01avahi-daemon  K01cups-browsed      K01irqbalance  K01lvm2-lvmetad   K01openvpn     K01saned
K01cryptdisks    K01exim4             K01kerneloops  K01lvm2-lvmpolld  K01plymouth    K01speech-dispatcher

/etc/rc1.d:
K01alsa-utils    K01cups-browsed  K01irqbalance  K01lvm2-lvmetad   K01rsyslog            K01ufw
K01avahi-daemon  K01exim4         K01kerneloops  K01lvm2-lvmpolld  K01saned              K01uuidd
K01cups          K01hddtemp       K01lightdm     K01openvpn        K01speech-dispatcher

/etc/rc2.d:
K01cups          S01binfmt-support    S01dbus         S01irqbalance    S01lvm2-lvmpolld  S01plymouth  S01speech-dispatcher
S01acpid         S01console-setup.sh  S01exim4        S01kerneloops    S01mintsystem     S01rsync     S01sysstat
S01anacron       S01cron              S01grub-common  S01lightdm       S01ntp            S01rsyslog   S01uuidd
S01avahi-daemon  S01cups-browsed      S01hddtemp      S01lvm2-lvmetad  S01openvpn        S01saned

/etc/rc3.d:
K01cups          S01binfmt-support    S01dbus         S01irqbalance    S01lvm2-lvmpolld  S01plymouth  S01speech-dispatcher
S01acpid         S01console-setup.sh  S01exim4        S01kerneloops    S01mintsystem     S01rsync     S01sysstat
S01anacron       S01cron              S01grub-common  S01lightdm       S01ntp            S01rsyslog   S01uuidd
S01avahi-daemon  S01cups-browsed      S01hddtemp      S01lvm2-lvmetad  S01openvpn        S01saned

/etc/rc4.d:
K01cups          S01binfmt-support    S01dbus         S01irqbalance    S01lvm2-lvmpolld  S01plymouth  S01speech-dispatcher
S01acpid         S01console-setup.sh  S01exim4        S01kerneloops    S01mintsystem     S01rsync     S01sysstat
S01anacron       S01cron              S01grub-common  S01lightdm       S01ntp            S01rsyslog   S01uuidd
S01avahi-daemon  S01cups-browsed      S01hddtemp      S01lvm2-lvmetad  S01openvpn        S01saned

/etc/rc5.d:
K01cups          S01binfmt-support    S01dbus         S01irqbalance    S01lvm2-lvmpolld  S01plymouth  S01speech-dispatcher
S01acpid         S01console-setup.sh  S01exim4        S01kerneloops    S01mintsystem     S01rsync     S01sysstat
S01anacron       S01cron              S01grub-common  S01lightdm       S01ntp            S01rsyslog   S01uuidd
S01avahi-daemon  S01cups-browsed      S01hddtemp      S01lvm2-lvmetad  S01openvpn        S01saned

/etc/rc6.d:
K01alsa-utils    K01cryptdisks-early  K01hddtemp     K01lightdm        K01networking  K01rsyslog            K01uuidd
K01avahi-daemon  K01cups-browsed      K01irqbalance  K01lvm2-lvmetad   K01openvpn     K01saned
K01cryptdisks    K01exim4             K01kerneloops  K01lvm2-lvmpolld  K01plymouth    K01speech-dispatcher

/etc/rcS.d:
S01alsa-utils  S01cryptdisks        S01dns-clean          S01kmod        S01lvm2        S01plymouth-log  S01procps  S01ufw
S01apparmor    S01cryptdisks-early  S01keyboard-setup.sh  S01lm-sensors  S01networking  S01pppd-dns      S01udev    S01x11-common
sergio@sololinux:~$

 

Bueno, ahora ya sabemos qué es un nivel de ejecución y, los directorios donde se almacenan sus archivos de configuración. Ahora vemos como ejecutar y cambiar el nivel de ejecución. Para esta operación disponemos de dos comandos, el init y el telinit. En nuestro caso usamos el init para reiniciar el sistema.

sudo init 6

El sistema reinicia instantáneamente, al iniciar volverá a su nivel anterior, el 5. Con el comando systemctl, también nos ayuda a cambiar de nivel, pero de una forma un poco diferente. En vez de usar el carácter numérico del nivel, opera con el nombre del objetivo (revisa la tabla superior). Identificamos el nivel actual.

systemctl get-default

La respuesta es «graphical.target», que corresponde al nivel de ejecución 5.

Uso de systemctl con niveles

Uso de systemctl con niveles

Si quieres cambiar al nivel 3 (modo línea de comandos), ejecuta este comando.

sudo systemctl isolate multi-user.target

Si ejecutas runlevel de nuevo, te dirá el nivel actual y el nivel anterior.

root@SoloLinux-demo:~# runlevel 
5 3
root@SoloLinux-demo:~#

Para volver al sistema con GUI, cambiamos de nivel otra vez.

sudo systemctl isolate graphical.target

Como último apunte de este artículo, ejecutamos de nuevo el comando runlevel. Vemos que el valor de los niveles se ha invertido, ya que solo tiene la capacidad de imprimir dos niveles, el actual y el anterior.

Resultado del comando runlevel

Resultado del comando runlevel

 

Canales de Telegram: Canal SoloLinux – Canal SoloWordpress

Espero que este artículo te sea de utilidad, puedes ayudarnos a mantener el servidor con una donación (paypal), o también colaborar con el simple gesto de compartir nuestros artículos en tu sitio web, blog, foro o redes sociales.

Chat de SoloLinux en Telegram

 

2 Comentarios

  1. Carlos O
    11/08/2021
    • Sergio G.B.
      11/08/2021

Agregar comentario

1 logo sololinux

Suscríbete a SoloLinux

Recibe todos los nuevos artículos es tu correo electrónico

You have Successfully Subscribed!

Ir al contenido