Pourquoi avons-nous besoin de la fonction de redémarrage dans différents binaires?

12

Pourquoi avons-nous besoin de la fonction de redémarrage dans différents binaires?

shutdown -r

et

reboot

Ou diffèrent-ils dans quelque chose?

LanceBaynes
la source
1
Voir unix.stackexchange.com/questions/8690/… pour la distinction - les commandes peuvent se comporter différemment selon le système d'exploitation (mais font généralement la même chose sous Linux).
PleaseStand
Comme indiqué ci-dessous et expliqué en détail sur unix.stackexchange.com/a/196014/5132 , la prémisse de cette question est fausse sur les systèmes d'exploitation Linux systemd. Ce ne sont pas des binaires différents sur de tels systèmes.
JdeBP

Réponses:

15

Nous n'avons pas nécessairement besoin des deux, mais nous les avons tous les deux en raison de l'histoire d'Unix et de sa multiplicité de versions.

Depuis leurs pages de manuel respectives:

  • L'utilitaire d'arrêt est apparu dans 4.0BSD.
  • Un utilitaire de redémarrage est apparu dans la version 6 d'AT & T UNIX.

l'arrêt est plus polyvalent et plus puissant, tandis que le redémarrage est plus convivial et plus facile à mémoriser.

l'arrêt vous permet de spécifier un argument temporel (pour redémarrer dans 5 minutes, par exemple) et vous permet de faire bien d'autres choses que le redémarrage, notamment:

  • vous pouvez simplement lancer les utilisateurs et non pas réellement arrêter
  • vous pouvez mettre le système en veille au lieu de l'arrêter
  • vous pouvez simplement arrêter sans redémarrer (comme la commande d'arrêt)
  • vous pouvez inclure un message d'avertissement personnalisé pour les utilisateurs du système

Cependant, si vous souhaitez simplement redémarrer le système maintenant, il est plus facile de taper rebootque shutdown -r now.

iconoclaste
la source
1
Fait amusant: certaines versions sont shutdownmaintenant utilisées par défaut. N'essayez pas d'obtenir de l'aide pour l'arrêt avec shutdown -hjamais, surtout pas sur un serveur quelque part dans un centre de données.
Residuum
6

Les deux commandes font quelque chose de différent, mais elles peuvent finir par s'appeler, c'est pourquoi elles semblent faire la même chose!

rebootinvoquera le noyau pour déclencher un redémarrage matériel. Cependant, il ne le fera que si le système est prêt pour l'arrêt - tous les démons et processus utilisateur doivent être arrêtés, les systèmes de fichiers démontés, etc. Il vérifie donc le niveau d'exécution du système, et si ce n'est pas 0 ou 6, alors il invoquera réellement la shutdowncommande pour vous.

shutdownentraîne la modification du niveau d'exécution du système. Le changement de niveau d'exécution (à 0 pour l'arrêt ou 6 pour le redémarrage) exécute de nombreux scripts dans /etc/rc0.d ou rc6.d qui arrêtent les démons, démontent les systèmes de fichiers, etc. Enfin, ces scripts invoquent haltou reboot- cette fois le système est en le niveau d'exécution correct et ils demandent au noyau de redémarrer (ou de s'arrêter).

Richard Downer
la source
6

En plus de ce qu'iconoclaste a écrit, il existe une distinction importante entre les deux programmes: shutdownest dans /sbin, tandis que rebootest dans /usr/bin.

Pourquoi est-ce important, demandez-vous? Je vais vous dire.

Les choses sous /usrsont celles qui ne doivent pas être disponibles jusqu'à ce que le système soit démarré suffisamment loin pour que le système soit minimalement fonctionnel. Répertoires de haut niveau qui sont traditionnellement jamais montés sur des systèmes de fichiers séparés - /bin, /etc, /sbin, etc. - devraient être disponibles alors que le système atteint cet état peu utile. Il y a différentes implications de cette conception; par exemple, c'est un mauvais style d'écrire la clause "stop" d'un script d'initialisation SysV qui utilise des programmes dans /usr/bins'il existe une alternative dans /binou /sbin.

shutdownest l'utilitaire clé, celui toujours disponible. rebootest un utilitaire de commodité uniquement.

Warren Young
la source
1
rebootest dans /sbinDebian (avec SysVinit) et Ubuntu (avec upstart).
Gilles 'SO- arrête d'être méchant'
D'accord, alors méta-réponse: connais ton système. :) J'utilise CentOS le plus souvent.
Warren Young
Idem pour Arch (systemd), les deux dans / sbin
daisy
En effet, sur les systèmes d'exploitation Linux systemd, l'utilitaire clé n'est pas non plus , car avec systemd toutes ces commandes sont (comme le doco systemd l'a) des commandes de "compatibilité". En effet, la prémisse de la question est fausse. Ils ne sont pas dans des binaires différents. Pour plus de détails, voir unix.stackexchange.com/a/196014/5132 .
JdeBP