Lectura "¿Cuál es la diferencia entre los comandos Halt y Shutdown?" , Generalmente tengo una idea de lo que hace el comando shutdown, con o sin las opciones -h / -r.
El comando "detener" realiza el apagado del sistema para ejecutar el nivel 0 del sistema.
El comando "shutdown" apaga el sistema para ejecutar el nivel 1 sin el comando -h o -r.
¿Qué pasa con el comando "poweroff" que entra en el nivel de ejecución 0 o 1? ¿Es esta la única diferencia principal entre estos tres comandos?

Respuestas:
Y ahora, la respuesta del sistema.
Está utilizando, según la etiqueta de su pregunta, Red Hat Enterprise Linux. Desde la versión 7, que ha usado systemd. Ninguna de las otras respuestas son correctas para el mundo de systemd; ni siquiera son algunos de los supuestos en su pregunta.
haltcomando de las utilidades "System 5" de Van Smoorenburginit./sbin/haltes un enlace simbólico a/sbin/reboot; Eso no es cierto con systemd. No hay ningúnrebootprograma separado en absoluto.haltorebootinvocar unshutdownprograma con argumentos de línea de comandos; tampoco son ciertas con systemd. No hay ningúnshutdownprograma separado en absoluto.Cada conjunto de herramientas de administración del sistema tiene su versión de estas utilidades. systemd, advenedizo, nosh , van Smoorenburg
init, BSD yinittodos tienen su propiahalt,poweroffy así sucesivamente. En cada uno sus mecanismos son ligeramente diferentes. Así son sus páginas de manual.En el conjunto de herramientas systemd
halt,poweroff,reboot,telinit, yshutdownson todos los enlaces simbólicos a/bin/systemctl. Son todas las cuñas compatibilidad hacia atrás, 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 programa único . (Por convención, el shell le dice con qué nombre ha sido invocado).objetivos, no niveles de ejecución
La mayoría de esos comandos son shorthands para decirle a systemd, usar
systemctl, para aislar un objetivo particular . El aislamiento se explica en lasystemctlpágina del manual (qv), pero se puede considerar, a los efectos de esta respuesta, como iniciar un objetivo y detener cualquier otro. Los objetivos estándar utilizados en systemd se enumeran en lasystemd.special(8) página del manual.Los diagramas en la
bootuppágina del manual (7) en el conjunto de herramientas systemd, en particular el último, muestran que hay tres objetivos "finales" que son relevantes aquí:halt.target- Una vez que el sistema ha alcanzado el estado de aislar completamente este objetivo, habrá llamado la llamada alreboot(RB_HALT_SYSTEM)sistema. El kernel habrá intentado ingresar a un programa de monitor ROM, o simplemente detuvo la CPU (utilizando cualquier mecanismo apropiado para hacerlo).reboot.target- Una vez que el sistema ha alcanzado el estado de aislar completamente este objetivo, habrá llamado la llamada alreboot(RB_AUTOBOOT)sistema (o el equivalente con la línea de comando mágico). El núcleo habrá intentado activar un reinicio.poweroff.target- Una vez que el sistema ha alcanzado el estado de aislar completamente este objetivo, habrá llamado la llamada alreboot(RB_POWER_OFF)sistema. El núcleo habrá intentado eliminar la energía del sistema, si es posible.Estas son las cosas en las que debería estar pensando en los estados finales del sistema, no en los niveles de ejecución. Observe en el diagrama que el sistema de destino systemd mismo 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.targetobjetivo, de modo que uno describe los servicios que deben detenerse antes del apagado por hacer que entren en conflicto con elshutdown.targetobjetivo.systemctlintenta enviar solicitudes asystemd-logindcuando el usuario que llama no es el superusuario. También pasa a los retrasos en los cierressystemd-shutdownd. Y algunas manos cortas activanwallnotificaciones. Dejando a un lado esas complejidades, lo que haría que esta respuesta fuera varias veces más larga, suponiendo que usted es actualmente el superusuario y no solicita una acción programada:systemctl isolate halt.targettiene las manos cortas:shutdown -H nowsystemctl halthaltsystemctl isolate reboot.targettiene las manos cortas:shutdown -r nowtelinit 6systemctl rebootrebootsystemctl isolate poweroff.targettiene las manos cortas:shutdown -P nowtelinit 0shutdown nowsystemctl poweroffpoweroffsystemctl isolate rescue.targettiene las manos cortas:telinit 1systemctl rescuesystemctl isolate multi-user.targettiene las manos cortas:telinit 2telinit 3telinit 4systemctl isolate graphical.targettiene la taquigrafía:telinit 5Después de analizar las diferentes sintaxis de línea de comandos, todas estas terminan en las mismas rutas de código dentro del
systemctlprograma.Notas:
shutdown nowha 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 con elshutdowncomando.telinitrealmente ignora por completo todos esos y enlaces simbólicos en el sistema de archivos que describen las páginas del manual. Las asignaciones anteriores están cableadas al programa, en una tabla.runlevelN.targetdefault.targetsystemctl--forceopción de lahalt,rebootypoweroffcomandos es lo mismo que decir--force --forcea lossystemctl halt,systemctl rebootysystemctl powerofflos comandos. Esto hace quesystemctlintente llamarreboot()directamente. Normalmente solo trata de aislar objetivos.telinitNo es lo mismo queinit. Son programas diferentes en el mundo systemd, siendo este último otro nombre para elsystemdprograma, no para elsystemctlprograma. Elsystemdprograma no está necesariamente compilado con ninguna compatibilidad de Van Smoorenburg, y en algunos sistemas operativos systemd se queja de ser invocado incorrectamente si se intenta .init NOtras lecturas
systemctl. páginas de manual de systemd. freedesktop.org.systemd.special. páginas de manual de systemd. freedesktop.org.bootup. páginas de manual de systemd. freedesktop.org.init. nosh Guide . Softwaresfuente
systemctl rebootdebe ser equivalente asystemctl start reboot.target --job-mode=replace-irreversible. Usar cualquier otro modo de trabajo es menos robusto. unix.stackexchange.com/questions/381739/…systemctl rebootla forma "segura" de reiniciar, por ejemplo,init 6cuál es la forma en que de otro modo sería seguro reiniciar?haltindica al hardware que detenga todas las funciones de la CPU , pero lo deja en estado encendido. Esto generalmente significa que alguien tiene que reiniciar o apagar la máquina manualmente presionando el botón de encendido después. La forma específica de lograr esto es específica de la arquitectura, pero, por ejemplo, el conjunto de instrucciones x86 proporciona lasHLTinstrucciones que detienen la unidad central de procesamiento (CPU) hasta que se dispara la próxima interrupción externa.poweroff, comohalt, detiene la CPU pero también envía una señal de hardware ACPI que indicará al sistema que comience con un apagado completo e inmediato. Esto es aproximadamente equivalente a presionar el botón de encendido en una computadora de escritorio típica.Ambos
haltypoweroffgeneralmente son enlaces simbólicos alrebootejecutable, que generalmente invocará lashutdownherramienta con los argumentos apropiados (-h,-Por) dependiendo de sihalt,powerofforebootse usó para invocar la herramienta. Sin embargo, cuando--forcese pasa la opción areboot, o cuando está en el nivel de ejecución 0 o 6,rebootinvocará lareboot()llamada del sistema con un código de comando apropiado.fuente
/sbin/init 0o/sbin/telinit 0debería ser lo mismo que detener el sistema, aunque los pasos específicos que se tomen dependerían del sistema init en cuestión, como System-V init , upstart o systemd . Si está ejecutando RHEL, estaría utilizando systemd.halt,poweroffyshutdown -hson completamente equivalentes. De hecho, detener y apagar no hacen más que llamarshutdown -h. Desde la página de manual de alto / apagado:El apagado luego procede a apagar el sistema cambiando al nivel de ejecución 0.
Detener y apagar (y reiniciar) desempeñan un doble papel; cuando se ejecutan en el proceso de apagado (es decir, en el nivel de ejecución 0 o 6), realizan las operaciones de bajo nivel requeridas para detener físicamente, apagar o reiniciar la máquina, como se describe en otra respuesta.
fuente