Compréhension des Runlevels dans les systèmes Linux
Introduction à init
Dans le processus de démarrage de Linux, init constitue le premier processus utilisateur (PID=1). Ses responsabilités principales incluent :
- Déterminer le niveau d'exécution (runlevel) du système en se basant sur les fichiers de configuration ;
- Démarrer les services et processus correspondants ;
- Gérer les opérations d'arrêt et de redémarrage.
On peut considérer init comme :
Le "contrôleur de trafic" du système Linux, décidant de l'état de fonctionnement dans lequel le système doit entrer.
Les Niveaux d'Exécution (Runlevels)
Les niveaux d'exécution représentent le mode de travail actuel du système Linux. Chaque niveau active différents services et fonctionnalités.
Par exemple :
- Certains niveaux autorisent uniquement les connexions en ligne de commande ;
- D'autres activent l'interface graphique ;
- Certains sont réservés à la maintenance sécurisée ou à l'arrêt du système.
Définitions traditionnelles des Runlevels SysV Init (init 0-6)
| Niveau | Nom | Fonction |
|---|---|---|
| 0 | Arrêt (Halt) | Éteint le système (équivalent à shutdown -h now) |
| 1 | Mode monoutilisateur | Uniquement l'administrateur peut se connecter, pour la maintenance (comme la réparation de systèmes de fichiers) |
| 2 | Mode multi-utilisateurs (sans réseau) | Autorise plusieurs utilisateurs, mais sans services réseau |
| 3 | Mode multi-utilisateurs (ligne de commande) | Mode courant : multi-utilisateurs + réseau + sans interface graphique |
| 4 | Réservé (personnalisable) | Laissé à la disposition des utilisateurs pour des besoins spécifiques |
| 5 | Mode graphique multi-utilisateurs | Active l'interface graphique (X Window / GNOME / KDE) |
| 6 | Redémarrage (Reboot) | Redémarre le système (équivalent à reboot) |
Exemples concrets
init 0→ Arrêt immédiatinit 1→ Mode monoutilisateur, réservé à l'administrateur pour les réparationsinit 3→ Mode courant pour les serveurs (ligne de commande, connexion SSH possible)init 5→ Mode courant pour les postes de travail (interface graphique)init 6→ Redémarrage du système
⚠️ **Attention : n'exécutez pas
init 0ouinit 6au hasard !**Ces commandes éteignent ou redémarrent immédiatement le système, entraînant la perte de toutes les données non sauvegardées.
Consultation et changement de niveau d'exécution
1. Vérifier le niveau d'exécution actuel
runlevel
Exemple de sortie :
N 3
Nindique le niveau précédent (N pour "none" lors du premier démarrage)3indique que le niveau actuel est 3 (mode multi-utilisateurs en ligne de commande)
2. Changer de niveau d'exécution
sudo init 5
Cela passe au mode interface graphique (niveau 5).
On peut aussi utiliser :
sudo telinit 3
telinit est un alias de init, mais sa version est plus recommandée.
Configuration du niveau d'exécution par défaut
Dans les anciens systèmes SysV init, le niveau par défaut est stocké dans :
/etc/inittab
Exemple de contenu :
id:3:initdefault:
Cela signfiie que le système démarrera par défaut au niveau 3.
Les nouveaux concepts dans systemd (applicable à Ubuntu 16.04+ / CentOS 7+)
Les systèmes Linux modernes (comme Ubuntu 20.04, CentOS 7 et versions ultérieures) utilisent systemd à la place de SysV init. systemd n'utilise plus les numéros de "niveaux d'exécution", mais plutôt le concept de cibles (targets).
| Ancien runlevel | Cible systemd correspondante | Description |
|---|---|---|
| 0 | poweroff.target | Arrêt |
| 1 | rescue.target | Mode monoutilisateur |
| 2,3,4 | multi-user.target | Mode multi-utilisateurs en ligne de commande |
| 5 | graphical.target | Mode interface graphique |
| 6 | reboot.target | Redémarrage |
Exemples d'utilisation avec systemd
Vérifier le niveau d'exécution actuel
systemctl get-default
Définir le niveau d'exécution par défaut
sudo systemctl set-default multi-user.target
Changer de niveau d'exécution
sudo systemctl isolate graphical.target
Arrêt et redémarrage (méthode recommandée)
sudo systemctl poweroff
sudo systemctl reboot
Recommandations pratiques
| Objectif | Commande recommandée |
|---|---|
| Passer temporairement à l'interface graphique | sudo systemctl isolate graphical.target |
| Définir définitivement le démarrage en ligne de commande | sudo systemctl set-default multi-user.target |
| Entrer en mode maintenance monoutilisateur | Sélectionner "Advanced options → Recovery mode" dans le menu de démarrage ou exécuter systemctl rescue |
| Arrêt sécurisé | sudo systemctl poweroff |
| Redémarrage sécurisé | sudo systemctl reboot |
Résumé conceptuel
Système traditionnel :
niveau d'exécution init
│
├─ 0 → Arrêt (poweroff)
├─ 1 → Mode monoutilisateur (rescue)
├─ 2 → Multi-utilisateurs (sans réseau)
├─ 3 → Multi-utilisateurs (ligne de commande)
├─ 4 → Personnalisable
├─ 5 → Interface graphique
└─ 6 → Redémarrage
Équivalent systemd :
0 → poweroff.target
1 → rescue.target
3 → multi-user.target
5 → graphical.target
6 → reboot.target
Cosneils pour débutants
- **Pour débuter, utilisez le niveau 3 (multi-user.target)**C'est l'environnement courant pour les serveurs, stable et peu gourmand en ressources.
- L'interface graphique (niveau 5) convient aux postes de travail ou à l'apprentissage.
- Le mode monoutilisateur (niveau 1) est réservé à la réparation du système ou à la réinitialisation du mot de passe root.
- N'exécutez jamais
init 0ouinit 6à la légère !
Exercices pratiques
- Vérifier le niveau d'exécution actuel
runlevel
- Passer en mode monoutilisateur
sudo systemctl isolate rescue.target
- Définir le démarrage par défaut en mode ligne de commande
sudo systemctl set-default multi-user.target
- Restaurer le mode interface graphique
sudo systemctl set-default graphical.target