Aller au contenu

Commandes de Démarrage de Linux

Mise à jour :

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.

fonctionnement des commandes de démarrage

Les runlevels : héritage de SysVinit

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

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 :

Terminal window
systemctl get-default
graphical.target

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

Terminal window
sudo systemctl set-default multi-user.target

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

Terminal window
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.

Un fonctionnement plus dynamique et intégré

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 :

Terminal window
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.

Commandes pour arrêter une machine Linux

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

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 :

    Terminal window
    sudo shutdown -h now
  • Arrêt dans 10 minutes :

    Terminal window
    sudo shutdown -h +10
  • Avec un message personnalisé :

    Terminal window
    sudo shutdown -h +5 "Maintenance programmée"

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

Terminal window
sudo shutdown -c

halt : l’arrêt immédiat

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

Terminal window
sudo halt

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

poweroff : arrêter et éteindre

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

Terminal window
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.

init 0 ou telinit 0

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

Terminal window
sudo init 0
# ou
sudo telinit 0

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

Avec systemd : systemctl poweroff

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

Terminal window
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.

Commandes pour redémarrer une machine Linux

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.

reboot : le classique

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.

Terminal window
sudo reboot

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

shutdown -r : redémarrage planifié

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

  • Redémarrage immédiat :

    Terminal window
    sudo shutdown -r now
  • Redémarrage dans 5 minutes :

    Terminal window
    sudo shutdown -r +5

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

Terminal window
sudo shutdown -c

init 6 ou telinit 6

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.

Terminal window
sudo init 6
# ou
sudo telinit 6

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

Avec systemd : systemctl reboot

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.

Terminal window
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 :

Terminal window
sudo systemctl reboot --target rescue.target

Redémarrer en mode maintenance

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.

Différence entre mode rescue et mode single-user

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.

Activer le mode rescue avec systemd

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

Terminal window
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.

Activer le mode single-user (ancien SysVinit)

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

Terminal window
sudo init 1
# ou
sudo telinit 1

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

Utilisation pratique : exemples courants

  • 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 :

      Terminal window
      mount -o remount,rw /
    • Réinitialisez le mot de passe :

      Terminal window
      passwd root
  • Corriger des erreurs de montage :

    • Passez en mode rescue.

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

      Terminal window
      fsck /dev/sdX

Mode rescue via live CD / USB

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 :

Terminal window
sudo mount /dev/sdXn /mnt
sudo chroot /mnt

Contrôle de connaissances

Pourquoi ce contrôle ?

Cet contrôle va vous permettre de valider vos connaissances sur le sujet abordé dans le guide. Il comporte des QCM, des questions vrai/faux et des réponses ouvertes à un mot.

🕒 Le chronomètre commence dès que vous cliquez sur Démarrer le test. Vous devrez terminer l’examen avant la fin du temps imparti.

🎯 Pour réussir, vous devez obtenir au moins 80% de bonnes réponses.

💡 Je ne fournis pas directement les réponses aux questions. Cependant, si certaines sont complexes, des pistes d’explication pourront être proposées dans le guide ou après l’examen.

Bonne chance ! 🚀

Conclusion

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.

FAQ : Questions Fréquemment Posées

FAQ - Questions Fréquemment Posées

Quelles sont les principales commandes de démarrage sous Linux ?
Les principales commandes de démarrage sous Linux incluent celles liées aux runlevels (SysVinit) et aux targets (systemd). Historiquement, des commandes comme 'init' ou 'telinit' permettaient de changer de niveau d'exécution. Avec systemd, on utilise des commandes comme 'systemctl start', 'systemctl isolate', ou encore 'systemctl set-default' pour gérer les cibles (targets) qui remplacent les runlevels classiques.
Quelle est la différence entre runlevels et targets sous Linux ?
Les runlevels, issus de SysVinit, représentent des niveaux d'exécution fixes (de 0 à 6) qui définissent l'état du système (arrêt, maintenance, multi-utilisateur, etc.). Les targets sous systemd remplissent le même rôle mais offrent plus de modularité et de flexibilité. Ils permettent de mieux gérer les dépendances et de paralléliser le démarrage, ce qui améliore la rapidité et la stabilité du système.
Comment arrêter proprement une machine Linux ?
Pour arrêter proprement une machine Linux, on peut utiliser la commande 'shutdown' (par exemple 'sudo shutdown -h now'), 'halt', 'poweroff' ou encore 'systemctl poweroff' avec systemd. Ces commandes garantissent la fermeture correcte des processus et la sauvegarde des données avant l'arrêt du système.
Comment redémarrer une machine Linux ?
Pour redémarrer une machine Linux, on peut utiliser 'reboot', 'shutdown -r now', ou 'systemctl reboot' avec systemd. Ces commandes ferment proprement les services en cours avant de redémarrer la machine.
Qu'est-ce que le mode rescue sous Linux ?
Le mode rescue est un mode de secours qui démarre un environnement minimaliste permettant de réparer le système en cas de problème critique. Avec systemd, on peut l'activer via 'systemctl isolate rescue.target', ou en modifiant la ligne de commande du noyau avec 'systemd.unit=rescue.target'.