Leer "¿Cuál es la diferencia entre los comandos Halt y Shutdown?" , generalmente tengo una idea de lo que hace el comando de apagado, con o sin las opciones -h/-r.
 El comando "detener" realiza el apagado del sistema al nivel de ejecución 0 del
 sistema.
 El comando "apagar" realiza un apagado del sistema al nivel de ejecución
 1 sin el comando -h o -r.
 ¿Qué sucede con el comando "apagar" si entra en el nivel de ejecución 0 o 1?
 ¿Es esta la única diferencia principal entre estos tres comandos?
Respuesta aceptada:
Y ahora, la respuesta systemd.
Está utilizando, según la etiqueta de su pregunta, Red Hat Enterprise Linux. Desde la versión 7, que ha utilizado systemd. Ninguna de las otras respuestas es correcta para el mundo de systemd; ni siquiera lo son algunas de las suposiciones en su pregunta.
- Olvídate de los niveles de ejecución; existen, pero solo como cuñas de compatibilidad. La documentación de systemd establece que el concepto está "obsoleto". Si está comenzando a aprender estas cosas en un sistema operativo systemd, no comience allí.
 - Olvídate de la página del manual que citó marcelm; no es del conjunto de herramientas adecuado y es una descripción del comando de otro conjunto de herramientas, incorrecto para systemd. Es el de la 
haltcomando desde el van Smoorenburg “Sistema 5”initutilidades. - Ignore las declaraciones que 
/sbin/haltes un enlace simbólico a/sbin/reboot; eso no es cierto con systemd. No hay unrebootseparado programa en absoluto. - Ignore las declaraciones que 
haltorebootinvocar unshutdownprograma con argumentos de línea de comandos; tampoco son ciertos con systemd. No hay unshutdownseparado programa en absoluto. 
 Cada conjunto de herramientas de administración del sistema tiene su versión de estas utilidades. systemd, advenedizo, nosh, van Smoorenburg init y BSD init todos tienen su propio halt , poweroff , Etcétera. En cada uno su mecánica es ligeramente diferente. También lo son sus páginas de manual.
 En el conjunto de herramientas systemd halt ,poweroff ,reboot , telinit y poweroff son todos enlaces simbólicos a /bin/systemctl . Son todos correcciones de compatibilidad con versiones anteriores, que son simplemente abreviaturas para invocar la interfaz de línea de comandos principal de systemd:systemctl . Todos se asignan a (y de hecho son) ese mismo único programa. (Por convención, el shell le dice qué nombre lo ha invocado).
objetivos, no niveles de ejecución
 La mayoría de esos comandos son abreviaturas para decirle a systemd, usando systemctl , para aislar un objetivo particular . El aislamiento se explica en systemctl página del manual (qv), pero puede ser, para los propósitos de esta respuesta, considerado como iniciar un objetivo y detener cualquier otro. Los objetivos estándar utilizados en systemd se enumeran en systemd.special (8) página del manual.
 Los diagramas en el bootup (7) página de manual en el conjunto de herramientas systemd, en particular la última, muestra que hay tres objetivos "finales" que son relevantes aquí:
halt.target— Una vez que el sistema haya alcanzado el estado de aislamiento total de este objetivo, habrá llamado alreboot(RB_HALT_SYSTEM)llamada del sistema. El núcleo habrá intentado ingresar a un programa de monitoreo de ROM, o simplemente detuvo la CPU (usando cualquier mecanismo que sea apropiado para hacerlo).reboot.target— Una vez que el sistema haya alcanzado el estado de aislamiento total de este objetivo, habrá llamado alreboot(RB_AUTOBOOT)llamada al sistema (o el equivalente con la línea de comando mágica). El núcleo habrá intentado activar un reinicio.poweroff.target— Una vez que el sistema haya alcanzado el estado de aislamiento total de este objetivo, habrá llamado alreboot(RB_POWER_OFF)llamada del sistema. El núcleo habrá intentado eliminar la energía del sistema, si es posible.
 Estos son las cosas en las que debe pensar como establece el sistema final, no en los niveles de ejecución. Observe en el diagrama que el propio sistema de destino systemd codifica cosas que, en otros sistemas, son implícitas en lugar de explícitas:como la noción de que cada uno de estos objetivos finales abarca el shutdown.target objetivo, de modo que uno describa los servicios que deben detenerse antes de apagarlos haciendo que entren en conflicto con el poweroff.target objetivo.
 systemctl intenta enviar solicitudes a systemd-logind cuando el usuario que llama no es el superusuario. También pasa los apagados retrasados a systemd-shutdownd . Y algunas abreviaturas activan wall notificaciones Dejando a un lado esas complejidades, lo que haría que esta respuesta fuera varias veces más larga, suponiendo que actualmente sea el superusuario y no solicite una acción programada:
systemctl isolate halt.targettiene las abreviaturas:shutdown -H nowsystemctl halt- sin adornos 
halt 
systemctl isolate reboot.targettiene las abreviaturas:shutdown -r nowtelinit 6systemctl reboot- sin adornos 
reboot 
systemctl isolate poweroff.targettiene las abreviaturas:shutdown -P nowtelinit 0shutdown nowsystemctl poweroff- sin adornos 
poweroff 
systemctl isolate rescue.targettiene las abreviaturas:telinit 1systemctl rescue
systemctl isolate multi-user.targettiene las abreviaturas:telinit 2telinit 3telinit 4
systemctl isolate graphical.targettiene la abreviatura:telinit 5
 Después de analizar las diferentes sintaxis de la línea de comandos, finalmente terminan en las mismas rutas de código dentro de systemctl programa.
Notas:
- El comportamiento tradicional de 
shutdown nowsin opciones ha sido cambiar al modo de usuario único . Este no es el caso con systemd.rescue.target— el modo de usuario único se renombra como modo de rescate en systemd:no se puede acceder conshutdowncomando. telinitrealmente lo hace ignorar por completo todos esosrunlevelN.targetydefault.targetenlaces simbólicos en el sistema de archivos que describen las páginas del manual. Las asignaciones anteriores están integradas en elsystemctlprograma, en una tabla.- systemd no tiene noción de un nivel de ejecución actual . La operación de estos comandos no está condicionada a ningún "si está en el nivel de ejecución N “.
 - La 
--forceopción alhalt,rebootypoweroffcomandos es lo mismo que decir--force --forcealsystemctl halt,systemctl rebootysystemctl poweroffcomandos Esto hace quesystemctlintenta llamar areboot()directamente. Normalmente solo trata de aislar objetivos. telinitno es lo mismo queinit. Son diferentes programas en el mundo systemd, siendo este último otro nombre para elsystemdprograma, no para elsystemctlprograma. ElsystemdEl programa no está necesariamente compilado con ninguna compatibilidad de van Smoorenburg, y en algunos sistemas operativos systemd se queja de que se invoca incorrectamente si se intentainit N.
Lecturas adicionales
- ¿Hay alguna buena razón para detener el sistema sin cortar la energía?
 - ¿Por qué `init 0` da como resultado "Argumentos en exceso" en la instalación de Arch?
 - Stephen Wadeley (2014). “8. Administración de servicios con systemd” Guía del administrador del sistema Red Hat Enterprise Linux 7 . Sombrero rojo.
 - Lennart Poettering (2013-10-07). 
systemctl. páginas del manual systemd. freedesktop.org. - Lennart Poettering (2013-10-07). 
systemd.special. páginas del manual systemd. freedesktop.org. - Lennart Poettering (2013-10-07). 
bootup. páginas del manual systemd. freedesktop.org. - Jonathan de Boyne Pollard (2018). 
init. Guía de comida . Software.