Processus de démarrage du système Linux

Lorsque Linux démarre, on voit beaucoup d'informations de démarrage.

Le processus de démarrage de Linux n'est pas aussi compliqué qu'on pourrait l'imaginer. Il peut être divisé en 5 étapes :

  • Démarrage du noyau.
  • Exécution d'init.
  • Initialisation du système.
  • Configuration du terminal.
  • Connexion de l'utilisateur.

Types de programmes init :

  • SysV :init, avant CentOS 5, fichier de configuration : /etc/inittab.
  • Upstart :init, CentOS 6, fichiers de configuration : /etc/inittab, /etc/init/*.conf.
  • Systemd :systemd, CentOS 7, fichiers de configuration : /usr/lib/systemd/system, /etc/systemd/system.

Démarrage du noyau

Après la mise sous tension de l'ordinateur, le BIOS effectue d'abord un autotest de mise sous tension, puis démarre selon le périphérique de démarrage défini dans le BIOS (généralement le disque dur).

Après que le système d'exploitation prend le contrôle du matériel, il lit d'abord les fichiers du noyau dans le répertoire /boot.


Exécution d'init

Le processus init est le point de départ de tous les processus système. Vous pouvez le comparer à l'ancêtre de tous les processus système. Sans ce processus, aucun processus du système ne démarrerait.

Le programme init doit d'abord lire le fichier de configuration /etc/inittab.

Niveaux d'exécution

De nombreux programmes doivent être lancés au démarrage. Ils sont appelés « services » sous Windows et « démons » sous Linux.

Une tâche majeure du processus init est d'exécuter ces programmes de démarrage.

Cependant, différentes situations nécessitent le démarrage de différents programmes. Par exemple, lorsqu'il est utilisé comme serveur, Apache doit être démarré, mais pas lorsqu'il est utilisé comme ordinateur de bureau.

Linux permet d'affecter différents programmes de démarrage à différentes situations, ce qu'on appelle « niveau d'exécution » (runlevel). Autrement dit, au moment du démarrage, le niveau d'exécution détermine quels programmes exécuter.

Les systèmes Linux disposent de 7 niveaux d'exécution :

  • Niveau d'exécution 0 : état d'arrêt du système. Le niveau d'exécution par défaut ne peut pas être défini sur 0, sinon le système ne peut pas démarrer normalement.
  • Niveau d'exécution 1 : état de travail mono-utilisateur, privilèges root, utilisé pour la maintenance du système, la connexion à distance est interdite.
  • Niveau d'exécution 2 : état multi-utilisateur (sans NFS)
  • Niveau d'exécution 3 : état multi-utilisateur complet (avec NFS), passe en mode console en ligne de commande après connexion.
  • Niveau d'exécution 4 : non utilisé par le système, réservé.
  • Niveau d'exécution 5 : console X11, passe en mode graphique (GUI) après connexion.
  • Niveau d'exécution 6 : le système s'arrête normalement et redémarre. Le niveau d'exécution par défaut ne peut pas être défini sur 6, sinon le système ne peut pas démarrer normalement.

Initialisation du système

Dans le fichier de configuration d'init, il y a une ligne comme ceci : si::sysinit:/etc/rc.d/rc.sysinit. Elle appelle et exécute /etc/rc.d/rc.sysinit. rc.sysinit est un script shell bash qui effectue principalement quelques travaux d'initialisation du système. rc.sysinit est un script important qui doit être exécuté en premier à chaque niveau d'exécution.

Les principales tâches qu'il accomplit comprennent : activer la partition d'échange, vérifier les disques, charger les modules matériels et d'autres tâches qui doivent être exécutées en premier.

l5:5:wait:/etc/rc.d/rc 5

Cette ligne signifie exécuter /etc/rc.d/rc avec 5 comme paramètre. /etc/rc.d/rc est un script Shell qui accepte 5 comme paramètre et exécute tous les scripts de démarrage rc dans le répertoire /etc/rc.d/rc5.d/. Les scripts de démarrage dans le répertoire /etc/rc.d/rc5.d/ sont en réalité tous des fichiers de lien, et non les véritables scripts de démarrage rc. Les véritables scripts de démarrage rc sont en fait placés dans le répertoire /etc/rc.d/init.d/.

Ces scripts de démarrage rc ont un usage similaire ; ils acceptent généralement des paramètres tels que start, stop, restart, status, etc.

Les scripts de démarrage rc dans /etc/rc.d/rc5.d/ sont généralement des fichiers de lien commençant par K ou S. Pour les scripts de démarrage commençant par S, ils seront exécutés avec le paramètre start.

Si un script correspondant avec un lien préfixé par K est trouvé, et qu'il est déjà à l'état en cours d'exécution (marqué par des fichiers sous /var/lock/subsys/), les démons déjà démarrés seront d'abord arrêtés avec le paramètre stop, puis réexécutés.

Cela est fait pour garantir que lorsque init change de niveau d'exécution, tous les démons associés seront redémarrés.

Quant aux démons qui s'exécuteront à chaque niveau d'exécution, les utilisateurs peuvent les définir via chkconfig ou "System Services" dans setup.


Configuration des terminaux

Une fois que rc a terminé son exécution, il rend la main à init. À ce stade, l'environnement système de base a été configuré, et divers démons ont également été démarrés.

init ouvre ensuite 6 terminaux afin que les utilisateurs puissent se connecter au système. Les 6 lignes suivantes dans inittab définissent les 6 terminaux :

1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6

D'après ce qui précède, nous pouvons voir que dans les niveaux d'exécution 2, 3, 4 et 5, le programme mingetty s'exécutera en mode respawn. Le programme mingetty peut ouvrir des terminaux et définir des modes.

En même temps, il affiche une interface de connexion textuelle, qui est l'interface de connexion que nous voyons souvent. Dans cette interface de connexion, l'utilisateur est invité à saisir un nom d'utilisateur, et le nom d'utilisateur saisi par l'utilisateur est passé comme paramètre au programme login pour vérifier l'identité de l'utilisateur.


Connexion utilisateur

De manière générale, il existe trois façons pour les utilisateurs de se connecter :

  • (1) Connexion en ligne de commande
  • (2) Connexion SSH
  • (3) Connexion via l'interface graphique

Pour les utilisateurs en mode graphique avec le niveau d'exécution 5, la connexion se fait via une interface de connexion graphique. Après une connexion réussie, ils peuvent entrer directement dans des gestionnaires de fenêtres tels que KDE, Gnome, etc.

Cet article traite principalement de la connexion en mode texte : lorsque nous voyons l'interface de connexion de mingetty, nous pouvons saisir le nom d'utilisateur et le mot de passe pour nous connecter au système.

Le programme de vérification de compte de Linux est login. login reçoit le nom d'utilisateur transmis par mingetty comme paramètre de nom d'utilisateur.

Ensuite, login analyse le nom d'utilisateur : si le nom d'utilisateur n'est pas root et que le fichier /etc/nologin existe, login affiche le contenu du fichier nologin puis quitte.

Ceci est généralement utilisé pour empêcher les utilisateurs non-root de se connecter pendant la maintenance du système. Seuls les terminaux enregistrés dans /etc/securetty sont autorisés pour la connexion de l'utilisateur root. Si ce fichier n'existe pas, l'utilisateur root peut se connecter sur n'importe quel terminal.

Le fichier /etc/usertty est utilisé pour imposer des restrictions d'accès supplémentaires aux utilisateurs. Si ce fichier n'existe pas, il n'y a pas d'autres restrictions.


Basculement entre les modes graphique et texte

Linux fournit par défaut six consoles de terminal en ligne de commande pour nous permettre de nous connecter.

Par défaut, nous nous connectons à la première fenêtre, qui est tty1. Les six fenêtres sont tty1, tty2 ... tty6. Vous pouvez appuyer sur Ctrl + Alt + F1 ~ F6 pour basculer entre elles.

Si vous avez installé une interface graphique, vous entrerez dans l'interface graphique par défaut. À ce stade, vous pouvez appuyer sur Ctrl + Alt + F1 ~ F6 pour entrer dans l'une des interfaces de fenêtre en ligne de commande.

Lorsque vous souhaitez revenir à l'interface graphique depuis une interface de fenêtre en ligne de commande, appuyez simplement sur Ctrl + Alt + F7.

Si vous utilisez une machine virtuelle VMware, les raccourcis clavier pour basculer entre les fenêtres de commande sont Alt + Space + F1~F6. Si vous êtes dans l'interface graphique, appuyez sur Alt + Shift + Ctrl + F1~F6 pour basculer vers une fenêtre de commande.


Arrêt de Linux

Dans le domaine de Linux, il est principalement utilisé sur des serveurs, de sorte que les opérations d'arrêt sont rarement rencontrées. Après tout, un service exécuté sur un serveur est sans fin ; sauf dans des circonstances particulières, l'arrêt n'est utilisé que lorsque c'est absolument nécessaire.

Le processus d'arrêt correct est : sync > shutdown > reboot > halt

La commande d'arrêt est : shutdown. Vous pouvez exécuter man shutdown pour consulter la documentation d'aide.

Par exemple, vous pouvez exécuter la commande suivante pour éteindre le système :

sync 将数据由内存同步到硬盘中。

shutdown 关机指令,你可以man shutdown 来看一下帮助文档。例如你可以运行如下命令关机:

shutdown –h 10 ‘This server will shutdown after 10 mins’ 这个命令告诉大家,计算机将在10分钟后关机,并且会显示在登陆用户的当前屏幕中。

shutdown –h now 立马关机

shutdown –h 20:25 系统会在今天20:25关机

shutdown –h +10 十分钟后关机

shutdown –r now 系统立马重启

shutdown –r +10 系统十分钟后重启

reboot 就是重启,等同于 shutdown –r now

halt 关闭系统,等同于shutdown –h now 和 poweroff

Enfin, pour résumer, que ce soit pour redémarrer ou éteindre le système, exécutez d'abord la commandesyncpour écrire les données en mémoire sur le disque.

Les commandes d'arrêt incluentshutdown –h now halt poweroffet init 0, les commandes de redémarrage incluentshutdown –r now reboot init 6。


Articles de référence :

Autres extensions