L'administration d'un système Linux nécessite une compréhension précise des mécanismes de fermeture et de redémarrage. Bien que plusieurs commandes semblent accomplir la même tâche, leurs comportements internes et leurs interactions avec les niveaux d'exécution (runlevels) varient.
Les niveaux d'exécution (Runlevels)
Sous les systèmes utilisant SysVinit (et par extension la compatibilité maintenue par Systemd), le système opère selon différents niveaux d'exécution :
- 0 : Arrêt complet (Halt). Ne jamais définir comme niveau par défaut.
- 1 : Mode mono-utilisateur (Maintenance).
- 2 : Multi-utilisateur sans support réseau NFS.
- 3 : Mode multi-utilisateur complet en console (standard pour les serveurs).
- 4 : Non utilisé / Personnalisable.
- 5 : Mode multi-utilisateur avec interface graphique (X11).
- 6 : Redémarrage (Reboot). Ne jamais définir comme niveau par défaut.
La commande init
La commande init permet de basculer manuellement entre ces niveaux. Par exemple, init 0 déclenche l'arrêt tandis que init 6 déclenche le redémarrage.
Lorsqu'on exécute init 0, le système parcourt le répertoire associé au niveau 0 pour fermer les services :
# Observation des scripts de terminaison pour le niveau 0
$ ls -F /etc/rc.d/rc0.d/S*
/etc/rc.d/rc0.d/S00killall*
/etc/rc.d/rc0.d/S01halt*
Pour init 6, le répertoire cible contient les scripts de redémarrage :
# Observation des scripts pour le niveau 6
$ ls -F /etc/rc.d/rc6.d/S*
/etc/rc.d/rc6.d/S00killall*
/etc/rc.d/rc6.d/S01reboot*
La commande shutdown
shutdown est la méthode recommandée car elle est plus "propre" : elle avertit les utilisateurs connectés et permet de planifier l'action.
Syntaxe de base : shutdown [OPTIONS] TEMPS [MESSAGE]
-r: Redémarre le système après l'arrêt des processus (équivalent àinit 6).-h: Arrête le système (choisit entre halt ou poweroff selon le matériel).-H: Force l'arrêt (halt) sans couper l'alimentation.-P: Force la mise hors tension (poweroff).-c: Annule un arrêt planifié en cours.-k: Envoie un faux message d'alerte sans réellement arrêter le système (utile pour les tests).
# Exemple : Programmer un redémarrage dans 5 minutes avec un message
$ shutdown -r +5 "Maintenance système prévue, veuillez enregistrer vos travaux."
Distinction entre reboot, poweroff et halt
Sur la plupart des distributions modernes, ces trois commandes sont en réalité des liens symboliques vers le même binaire ou vers systemctl.
# Vérification de la nature des commandes
$ ls -l /sbin/{reboot,poweroff,halt}
lrwxrwxrwx. 1 root root 6 Jan 12 10:00 /sbin/halt -> reboot
lrwxrwxrwx. 1 root root 6 Jan 12 10:00 /sbin/poweroff -> reboot
-rwxr-xr-x. 1 root root 18240 Jan 12 10:00 /sbin/reboot
Leur comportement dépend du contexte :
- Sans argument forcé : Ces commandes appellent généralement
shutdownde manière transparente pour assurer une fermeture propre des services. - Avec l'option --force : Le système ne tente pas de fermer proprement les services via
initousystemd; il invoque directement l'appel système du noyau pour redémarrer ou s'arrêter immédiatement, ce qui peut causer des pertes de données sur le système de fichiers.