Commande shutdown, init 6, reboot, etc, quelle différence ?

I. Présentation

Comme beaucoup d'entre vous l'ont probablement déjà remarqué, il existe de multiple commande et façon d'éteindre son système quand on se trouve sous Linux, reboot, halt, poweroff, init 6, init 0, shutdown -r et -h sont des commandes que l'on utilise souvent sans connaitre leur différence, c'est ce que nous allons voir ici.

II. Les commandes

Il convient ici de commencer par les commandes les plus basiques, ou disons plutôt celles qui sont à la source des autres. Je parle ici de la commande "init" et de ses paramètres "6" et "0". La commande init et l'outil qui y est associé permet de gérer le "run-level" du système et des processus qui tournent dessus. Pour faire rapide, un run-level de 0 décrit un système en train de s'arrêter et un run-level de 6 décrit un système en train de redémarrer. Cela a une importance car la mise en run-level 0 ou 6 permet d'envoyer des instructions aux différents processus du système disant que celui-ci va s'éteindre et qu'il vaut donc mieux le fermer proprement, fermer les fichiers ouverts, enregistrer les documents de travail, fermer les connexions, démonter les systèmes de fichiers montés, etc ... Pour rebooter une système on utilise donc la commande :

init 6

 et pour l'éteindre :

init 0

Cela a aussi un effet sur les journaux d'application où l'on verra apparaitre des lignes disant que chaque processus s'est fermé à telle date à la réception de tel signal. On évite ainsi les coupures brutes sans aucune explication dans les logs.

Une autre commande très utilisée est la commande shutdown. On l'utilise le plus souvent avec les options "-r" qui signifie "reboot" ou "-h" qui signifie "halt". L'effet de cette commande est tout simplement d'utiliser les commandes "init 0" et "init 6" mais avec quelques étapes en plus qui ne sont pas négligeables et qui en font une commande plus "propre". Dans l'ordre, shutdown (qu'il s'agisse d'un redémarrage ou d'un arrêt simple), va :

  • Avertir les utilisateurs via leur terminal ou bureau que le système va s'éteindre, ce qui en fait une commande intéressante pour les systèmes multi-user
  • Bloquer le processus "login", ce qui rendra impossible toute nouvelle connexion
  • Avoir la possibilité de programmer un délai (fermeture dans 5 minutes) bien que le plus souvent on spécifie un "now" pour dire que la commande prend effet immédiatement
  • Elle va ensuite avertir les processus via un signal SIGTERM que le système va s'éteindre et va finalement envoyer un "init 0" ou "init 6" selon le cas d'utilisation

Les commandes "halt" et "reboot" font respectivement appel à la commande "shutdown -h" et "shutdown -r". Les effets sont donc les mêmes. Il faut néanmoins savoir qu'avant leur version 2.74, ces commandes éteignaient juste le noyau sans appeler la commande shutdown, ce qui avait pour effet de provoquer un arrêt "non propre" car les processus, fichiers, connexions et montages du système n'étaient pas correctement fermés et leur récupération pouvait être compromise (c'était souvent le cas sur les anciens systèmes, moins maintenant). A noter que les deux commandes peuvent prendre l'option "-f" qui a pour effet de ne pas appeler "shutdown" et donc ne pas fermer les processus, fichiers, connexions, etc.

La commande "poweroff" renvoie vers la commande "halt" à laquelle elle passe par défaut l'option "-p" qui permet d'éteindre le système par extinction directe de l'alimentation et donc de ne pas utiliser les signaux habituellement utilisés.

Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Partager sur Google+ Envoyer par mail

Mickael Dorigny

Fondateur d'IT-Connect.fr et d'Information-security.fr. Auditeur sécurité chez Amossys.

    mickael has 478 posts and counting.See all posts by mickael