Aller au contenu
Administration Linux medium

Commandes de Démarrage de Linux

12 min de lecture

Sur Linux, la gestion des arrêts, démarrages et redémarrages s’appuie sur des commandes simples mais essentielles pour tout administrateur système. Comprendre ces commandes, ainsi que le fonctionnement des runlevels et leurs équivalents modernes sous systemd, permet de maîtriser le cycle de vie d’une machine Linux.

Les runlevels sont des niveaux d’exécution qui définissent l’état d’un système Linux. Chaque niveau représente un mode précis de fonctionnement : arrêt complet, maintenance, mode multi-utilisateur ou interface graphique. Ce concept provient du modèle SysVinit, un héritage direct des systèmes Unix System V.

Historiquement, au démarrage du système, Linux lançait un script principal (/etc/inittab), qui déterminait le runlevel à atteindre. Chaque runlevel avait des répertoires associés, tels que /etc/rc0.d, /etc/rc1.d, jusqu’à /etc/rc6.d. Ces répertoires contenaient des scripts nommés de façon standardisée :

  • SXXnom_du_service : démarrait un service.
  • KXXnom_du_service : arrêtait un service.

L’ordre d’exécution était déterminé par les numéros XX. Par exemple, au runlevel 3 (multi-utilisateur avec réseau), Linux exécutait tous les scripts K pour stopper les services inutiles du runlevel précédent, puis tous les scripts S pour activer les services requis.

Voici un récapitulatif des runlevels standards :

  • 0 : arrêt du système (shutdown)
  • 1 : mode mono-utilisateur (maintenance)
  • 2 : multi-utilisateur sans réseau (variable selon les distributions)
  • 3 : multi-utilisateur avec réseau (mode console)
  • 4 : non standard (réservé à l’administrateur)
  • 5 : multi-utilisateur avec interface graphique (X11)
  • 6 : redémarrage du système

Ce système avait des limites : chaque changement de runlevel impliquait d’exécuter manuellement ou via script les modifications nécessaires, ce qui pouvait rendre la gestion lourde et peu flexible.

L’évolution vers systemd : la fin des runlevels classiques

Section intitulée « L’évolution vers systemd : la fin des runlevels classiques »

Avec l’adoption massive de systemd dans la plupart des distributions Linux modernes (comme Debian, Ubuntu, CentOS, Arch Linux), la gestion des runlevels a été remplacée par une approche plus puissante : les targets.

Les targets dans systemd remplissent le même rôle que les runlevels, mais avec des avantages clés :

  • Modularité : un target peut dépendre d’autres targets, ce qui permet d’organiser finement les services à lancer.
  • Flexibilité : il est possible de créer ses propres targets pour des besoins spécifiques.
  • Parallélisation : systemd lance les services en parallèle pour accélérer le démarrage.

Les principales équivalences entre les anciens runlevels et les nouveaux targets sont :

Runlevel (SysV)Target (systemd)
0poweroff.target
1rescue.target
2multi-user.target
3multi-user.target
4multi-user.target
5graphical.target
6reboot.target

Le mode par défaut est défini par un lien symbolique vers le target choisi. Pour vérifier le target par défaut :

Fenêtre de terminal
systemctl get-default
graphical.target

Pour changer le target par défaut, utilisez la commande suivante :

Fenêtre de terminal
sudo systemctl set-default multi-user.target

Changer l’état du système à la volée se fait également via la commande isolate :

Fenêtre de terminal
sudo systemctl isolate rescue.target
sudo systemctl isolate graphical.target

Cette commande interrompt les services inutiles pour le nouveau target et active uniquement ceux qui sont nécessaires.

Outre la gestion des niveaux d’exécution, systemd gère l’ensemble du cycle de vie des services : démarrage, arrêt, redémarrage, surveillance et relance automatique en cas d’échec. Chaque target regroupe des unités (units), qui peuvent être :

  • des services (.service)
  • des points de montage (.mount)
  • des dispositifs (.device)
  • ou encore des sockets (.socket)

Cela permet une approche globale et moderne, où chaque élément du système est sous contrôle. Le démarrage est plus rapide et plus stable, car les dépendances sont gérées de manière explicite et optimisée.

Pour explorer tous les targets existants :

Fenêtre de terminal
systemctl list-units --type=target

En résumé, si les runlevels représentaient des “niveaux fixes”, les targets de systemd offrent une vision modulaire et adaptative de l’état du système. Cela garantit à la fois compatibilité avec les outils traditionnels (via des liens symboliques de compatibilité comme /lib/systemd/system/runlevel3.target) et une flexibilité accrue pour les besoins actuels des administrateurs systèmes.

Arrêter proprement une machine Linux est une opération courante mais essentielle pour garantir l’intégrité du système de fichiers et éviter toute perte de données. Plusieurs commandes permettent de réaliser cette tâche, chacune avec des particularités et des options adaptées aux besoins spécifiques.

La commande shutdown est la méthode la plus classique pour planifier un arrêt immédiat ou différé. Elle informe les utilisateurs connectés de l’arrêt et leur laisse le temps de se préparer.

Exemples d’utilisation :

  • Arrêt immédiat :

    Fenêtre de terminal
    sudo shutdown -h now
  • Arrêt dans 10 minutes :

    Fenêtre de terminal
    sudo shutdown -h +10
  • Avec un message personnalisé :

    Fenêtre de terminal
    sudo shutdown -h +5 "Maintenance programmée"

Pour annuler un arrêt programmé (avant que l’arrêt ne débute) :

Fenêtre de terminal
sudo shutdown -c

La commande halt arrête immédiatement la machine sans forcément éteindre l’alimentation (sur certains matériels anciens).

Fenêtre de terminal
sudo halt

Cette commande est généralement équivalente à shutdown -h now mais sans la même gestion des notifications.

poweroff est similaire à halt, mais son but est aussi d’éteindre la machine complètement (utile pour les serveurs physiques).

Fenêtre de terminal
sudo poweroff

Cette commande est souvent utilisée sur des systèmes où l’on souhaite s’assurer que l’alimentation est coupée après l’arrêt.

Ces commandes changent directement le runlevel du système à 0, ce qui correspond à un arrêt complet dans le modèle SysVinit.

Fenêtre de terminal
sudo init 0
# ou
sudo telinit 0

Elles restent compatibles avec de nombreuses distributions Linux même si systemd est maintenant la norme.

Sur les distributions modernes, systemctl permet de gérer facilement l’arrêt via targets :

Fenêtre de terminal
sudo systemctl poweroff

Cette commande est la méthode recommandée avec systemd car elle suit la nouvelle architecture de gestion des services et des états.

Redémarrer une machine Linux est indispensable après certaines mises à jour critiques, des changements de configuration du noyau ou en cas de maintenance planifiée. Comme pour l’arrêt, plusieurs commandes existent pour redémarrer proprement le système.

La commande reboot est la méthode la plus directe pour redémarrer immédiatement la machine. Elle prévient les utilisateurs connectés, termine les processus en cours, démonte les systèmes de fichiers et relance la machine.

Fenêtre de terminal
sudo reboot

Cette commande est rapide et fonctionne sur toutes les distributions, quelle que soit l’init utilisée.

La commande shutdown permet aussi de planifier un redémarrage, avec les mêmes options que pour l’arrêt.

  • Redémarrage immédiat :

    Fenêtre de terminal
    sudo shutdown -r now
  • Redémarrage dans 5 minutes :

    Fenêtre de terminal
    sudo shutdown -r +5

Pour annuler un redémarrage programmé (avant qu’il ne commence) :

Fenêtre de terminal
sudo shutdown -c

Pour les systèmes utilisant encore SysVinit ou pour des compatibilités anciennes, on peut forcer le passage au runlevel 6, qui correspond au redémarrage.

Fenêtre de terminal
sudo init 6
# ou
sudo telinit 6

Cela permet un redémarrage propre en suivant le modèle traditionnel des runlevels.

Sous systemd, la commande recommandée est systemctl reboot. Elle respecte les nouvelles conventions de gestion des services et s’intègre pleinement au système moderne.

Fenêtre de terminal
sudo systemctl reboot

Pour redémarrer directement en mode single-user ou vers un autre target après le redémarrage, on peut préciser la target souhaitée :

Fenêtre de terminal
sudo systemctl reboot --target rescue.target

Le mode rescue (mode de secours) est une fonctionnalité essentielle pour les administrateurs systèmes confrontés à des problèmes critiques : corruption du système de fichiers, erreurs de configuration réseau, ou besoin de changer un mot de passe root perdu. Ce mode démarre un environnement minimaliste permettant de diagnostiquer et réparer un système sans démarrer tous les services habituels.

Il existe souvent une confusion entre le mode rescue et le mode single-user (mono-utilisateur) :

  • Single-user (runlevel 1 / rescue.target) : Démarre un système avec un minimum de services et monte le système de fichiers en lecture/écriture. → Utilisé pour des tâches de maintenance rapide.

  • Mode rescue complet : Propose souvent un environnement complet avec des outils plus avancés, par exemple via un live CD ou un environnement de récupération.

Pour basculer vers le mode rescue directement depuis un système en cours de fonctionnement :

Fenêtre de terminal
sudo systemctl isolate rescue.target

Cette commande arrête tous les services non essentiels et active uniquement le strict minimum nécessaire pour la maintenance.

Pour démarrer directement en mode rescue lors du boot, modifiez la ligne de commande du noyau (dans le menu GRUB) :

  1. Éditez la ligne de démarrage en ajoutant systemd.unit=rescue.target à la fin.
  2. Démarrez.

Sous SysVinit, le mode mono-utilisateur était accessible via le runlevel 1 :

Fenêtre de terminal
sudo init 1
# ou
sudo telinit 1

Cette méthode reste fonctionnelle sur certains systèmes ou via des cibles de compatibilité avec systemd.

  • Réinitialiser un mot de passe root oublié :

    • Démarrez en mode rescue.

    • Montez le système de fichiers en lecture/écriture si nécessaire :

      Fenêtre de terminal
      mount -o remount,rw /
    • Réinitialisez le mot de passe :

      Fenêtre de terminal
      passwd root
  • Corriger des erreurs de montage :

    • Passez en mode rescue.

    • Utilisez des outils comme fsck pour réparer les partitions :

      Fenêtre de terminal
      fsck /dev/sdX

Si le système est totalement inopérant, le recours à un live CD (comme celui d’Ubuntu, Debian ou SystemRescue) permet d’accéder à un shell de secours, monter les partitions et effectuer des réparations :

Fenêtre de terminal
sudo mount /dev/sdXn /mnt
sudo chroot /mnt

Contrôle de connaissances

Validez vos connaissances avec ce quiz interactif

10 questions
5 min.
80%

Informations

  • Le chronomètre démarre au clic sur Démarrer
  • Questions à choix multiples, vrai/faux et réponses courtes
  • Vous pouvez naviguer entre les questions
  • Les résultats détaillés sont affichés à la fin

Lance le quiz et démarre le chronomètre

La gestion des démarrages, arrêts et redémarrages sous Linux est essentielle pour tout administrateur système. Que ce soit via les anciennes commandes SysVinit ou les modernes commandes systemd, il est crucial de comprendre comment ces mécanismes fonctionnent pour garantir la stabilité et la sécurité du système. En maîtrisant ces commandes, vous serez en mesure de gérer efficacement le cycle de vie de vos machines Linux, que ce soit pour des opérations de maintenance, des mises à jour ou des interventions d’urgence.