¿Por qué necesitamos la función de reinicio en diferentes binarios?

12

¿Por qué necesitamos la función de reinicio en diferentes binarios?

shutdown -r

y

reboot

¿O difieren en algo?

LanceBaynes
fuente
1
Consulte unix.stackexchange.com/questions/8690/… para ver la distinción: los comandos pueden comportarse de manera diferente según el sistema operativo (pero generalmente hacen lo mismo en Linux).
favor
Como se señala a continuación y se explica en detalle en unix.stackexchange.com/a/196014/5132 , la premisa de esta pregunta es falsa en los sistemas operativos Linux systemd. Estos no son binarios diferentes en tales sistemas.
JdeBP

Respuestas:

15

No necesariamente los necesitamos a ambos, pero los tenemos a ambos debido a la historia de Unix y su multiplicidad de versiones.

De sus respectivas páginas man:

  • La utilidad de apagado apareció en 4.0BSD.
  • Una utilidad de reinicio apareció en la Versión 6 AT&T UNIX.

el apagado es más general y más potente, mientras que el reinicio es más amigable y fácil de recordar.

shutdown le permite especificar un argumento temporal (para reiniciar en 5 minutos, por ejemplo) y le permite hacer muchas cosas además del reinicio, que incluyen:

  • simplemente puede iniciar usuarios y no cerrar realmente
  • puedes poner el sistema en suspensión en lugar de apagar
  • simplemente puede apagar sin reiniciar (como el comando detener)
  • puede incluir un mensaje de advertencia personalizado para los usuarios en el sistema

Sin embargo, si solo desea reiniciar el sistema ahora, es más fácil escribir rebootque shutdown -r now.

iconoclasta
fuente
1
Dato curioso: algunas versiones de shutdownuso ahora son las predeterminadas. No intente obtener ayuda para el apagado shutdown -hnunca, especialmente en un servidor en algún lugar de un centro de datos.
Residuo
6

Los dos comandos hacen algo diferente, sin embargo, pueden terminar llamándose unos a otros, ¡por eso parecen hacer lo mismo!

rebootinvocará el núcleo para que realmente active un reinicio de hardware. Sin embargo, solo hará esto si el sistema está listo para apagarse: todos los demonios y procesos de usuario deben detenerse, los sistemas de archivos desmontados, etc. Por lo tanto, verifica el nivel de ejecución del sistema, y ​​si no es 0 o 6, entonces invocará El shutdowncomando para ti.

shutdownhace que se cambie el nivel de ejecución del sistema. El cambio de nivel de ejecución (a 0 para detener o 6 para reiniciar) ejecuta muchos scripts en /etc/rc0.d o rc6.d que cierran demonios, desmontan sistemas de archivos, etc. Finalmente, estos scripts invocan halto reboot- esta vez el sistema está en el nivel de ejecución correcto e indican al núcleo que se reinicie (o detenga).

Richard Downer
fuente
6

Además de lo que escribió iconoclasta, hay una distinción importante entre los dos programas: shutdownestá dentro /sbin, mientras rebootestá dentro /usr/bin.

¿Por qué importa esto, preguntas? Te lo diré.

Las cosas debajo /usrson aquellas que no tienen que estar disponibles hasta que el sistema se inicie lo suficiente como para que el sistema sea mínimamente funcional. Directorios de nivel superior que tradicionalmente nunca se montan en sistemas de archivos separados - /bin, /etc, /sbin, etc - se espera que esté disponible mientras el sistema está llegando a este estado mínimamente útil. Hay varias implicaciones de este diseño; por ejemplo, es un mal estilo escribir la cláusula "stop" de un script de inicio SysV que usa programas en /usr/binsi hay una alternativa en /bino /sbin.

shutdownes la utilidad clave, la que siempre está disponible. rebootes solo una utilidad de conveniencia.

Warren Young
fuente
1
rebootestá en /sbinDebian (con SysVinit) y Ubuntu (con upstart).
Gilles 'SO- deja de ser malvado'
Bien, entonces meta-respuesta: conoce tu sistema. :) Yo uso CentOS más a menudo.
Warren Young
Lo mismo para Arch (systemd), ambos en / sbin
daisy
De hecho, en los sistemas operativos Linux de systemd tampoco es la utilidad clave, ya que con systemd todos estos comandos son (como lo dice systemd doco) comandos de "compatibilidad". De hecho, la premisa de la pregunta es falsa. No están en binarios diferentes. Para obtener detalles, consulte unix.stackexchange.com/a/196014/5132 .
JdeBP