Linux Bottes

En fait, il n'y a pas grand-chose au processus de démarrage:

1. Un chargeur de démarrage trouve l'image du noyau sur le disk, le charge en mémoire et le démarre.
2. Le noyau initialiser les périphériques et pilotes STI.
3. Le noyau monte le fichier racinesystem.
4. Le noyau init démarre appelé à planifier.
5. init configure le reste des processus en mouvement.
6. Les dernières processus qui commence initialisation dans le cadre de la séquence d'amorçage vous permettent de vous connecter.

Identifier chaque étape du processus de démarrage est inestimable pour résoudre les problèmes de démarrage et comprendre le system dans son ensemble. Pour commencer, concentrez-vous sur le chargeur de démarrage, qui est l'écran initial ou l'invite que vous obtenez une fois que l'ordinateur a effectué son auto-test de mise sous tension, en demandant quel fonctionnement system courir. Après avoir fait votre choix, le chargeur de démarrage exécute le Linux noyau, donnant le contrôle du system au noyau.

Il ya une discussion détaillée du noyau Ailleurs dans ce livre dont cet article est extrait. Cet article porte sur la phase d'initialisation du noyau, l'étape où le noyau imprime un tas de messages sur le matériel présent sur le system. Le noyau démarre init juste après avoir affiché un message proclamant que le noyau a monté le fichier racinesystem:

VFS: Gendarmerie racine (fichiers ext2system) lecture seulement.

Peu de temps après, vous verrez un message sur le démarrage de l'initialisation, suivi de system les messages de démarrage du service, et enfin vous obtenez une invite de connexion.

REMARQUE Sur Red Hat Linux, la note d'initialisation est particulièrement évidente, car elle vous « souhaite la bienvenue » dans Red Hat Linux. » Tous les messages suivants indiquent le succès ou l'échec entre parenthèses sur le côté droit de l'écran.

La plupart de ce chapitre traite avec init, Parce que c'est la partie de la séquence de démarrage où vous avez le plus de contrôle.
init

Il n'y a rien de spécial à propos de init. C'est un programme comme un autre sur le Linux system, et vous le trouverez dans / sbin avec d'autres system binaires. L'objectif principal d'init est de démarrer et d'arrêter d'autres programmes dans une séquence particulière. Tout ce que vous devez savoir, c'est comment fonctionne cette séquence.

Il existe quelques variantes différentes, mais la plupart Linux les distributions utilisent System Style V discuté ici. Certaines distributions utilisent une version plus simple qui ressemble à l'initialisation BSD, mais il est peu probable que vous rencontriez cela.

Niveaux d'exécution

A tout moment d'un Linux system, un certain ensemble de processus de base est en cours d'exécution. Cet état de la machine est appelé son niveau d'exécution, et il est indiqué par un nombre compris entre 0 et 6. Le system passe la plupart de son temps dans un seul niveau d'exécution. Cependant, lorsque vous fermez le machine down, init passe à un autre niveau d'exécution afin de terminer le system services de manière ordonnée et de dire au noyau de s'arrêter. Encore un autre niveau d'exécution est pour un seul utilisateur mode, discuté plus tard.

Le moyen le plus simple de maîtriser les niveaux d'exécution consiste à examiner le fichier de configuration d'initialisation, /etc/inittab. Recherchez une ligne comme celle-ci :

ID: 5: initdefault:

Cette ligne signifie que le default runlevel sur le system est 5. Toutes les lignes du fichier inittab prennent cette forme, avec quatre champs séparés par des deux-points apparaissant dans l'ordre suivant :
# Un identifiant unique (une chaîne courte, telle que id dans l'exemple précédent)
# Le niveau d'exécution applicable (s)
# L'action que init doit entreprendre (dans l'exemple précédent, l'action consiste à définir le default runlevel à 5)
# Une commande à exécuter (en option)

Il n'y a pas de commande à exécuter dans l'init précédentdefault exemple parce qu'une commande n'a pas de sens dans le contexte de la définition de default runlevel. Regardez un peu plus bas dans inittab, jusqu'à ce que vous voyiez une ligne comme celle-ci:

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

Cette ligne déclenche la plupart des system configuration et services via les répertoires rc * .d et init.d. Vous pouvez voir que init est configuré pour exécuter une commande appelée /etc/rc.d/rc 5 lorsqu'il est au niveau d'exécution 5. L'action wait indique quand et comment init exécute la commande: exécutez rc 5 une fois quand enterniveau d'exécution 5, puis attendez que cette commande se termine avant de faire quoi que ce soit d'autre.

Il y a plusieurs actions différentes dans addinitdefault et attendez, en particulier en ce qui concerne la gestion de l'alimentation, et la page de manuel inittab (5) vous en dit long. Ceux que vous êtes le plus susceptible de rencontrer sont expliqués dans les sections suivantes.

respawn

L'action respawn amène init à exécuter la commande qui suit, et si la commande finit de s'exécuter, à l'exécuter à nouveau. Vous verrez probablement quelque chose de similaire à cette ligne dans votre fichier inittab :

1: 2345: respawn :/ sbin / mingetty tty1

Les programmes getty Fournir des invites de connexion. La ligne précédente est la première console virtuelle (/ dev / tty1), celui que vous voyez lorsque vous appuyez sur ALT ou CTRL-ALT-F1 F1. L'action respawn ramène le invite de connexion lorsque vous vous déconnectez.

ctrlautre part

La ctrll'action altdel contrôle ce que system fait lorsque vous appuyez sur CONTROL-ALT-DELETE sur une console virtuelle. Sur la plupart systems, il s'agit d'une sorte de commande de redémarrage utilisant la commande shutdown.

sysinit

L'action sysinit est la toute première chose que init doit exécuter au démarrage, avant enterdans tous les niveaux d'exécution.

Comment les processus dans les niveaux d'exécution démarrer

Vous êtes maintenant prêt à apprendre à lancer le system services, juste avant de vous permettre de vous connecter. Rappelez-vous cette ligne inittab de plus tôt:

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

Cette petite ligne déclenche de nombreux autres programmes. rc représente ordres de marche, et vous entendrez les gens se réfèrent aux commandes que les scripts, programmes ou services. Alors, où sont ces commandes, de toute façon?

Pour le niveau d'exécution 5, dans cet exemple, les commandes se trouvent probablement dans /etc/rc.d/rc5.d ou /etc/rc5.d. Le niveau d'exécution 1 utilise rc1.d, le niveau d'exécution 2 utilise rc2.d, et ainsi de suite. Vous pourriez trouver ce qui suit items dans le répertoire rc5.d:

S10sysklogd S20ppp S99gpm
S12kerneld S25netstd_nfs S99httpd
S15netstd_init S30netstd_misc S99rmnologin
S18netbase S45pcmcia S99sshd
S20acct S89atd
S20logoutd S89cron

La rc 5 commande lance des programmes de ce répertoire niveau d'exécution en exécutant les commandes suivantes:

S10sysklogd maison
S12kerneld maison
S15netstd_init maison
S18netbase maison
...
S99sshd maison

Notez l'argument start dans chaque commande. Le S dans un nom de commande signifie que la commande doit s'exécuter au début mode, et le nombre (00 à 99) détermine où dans la séquence rc commence la commande.

La rc *. Commandes D est habituellement Démarrer Programmes Cela scripts shell dans / sbin ou / usr / sbin. Normalement, vous pouvez comprendre ce que l'une des commandes ne fait en regardant le script avec moins ou pager autre programme.

Vous pouvez démarrer l'un de ces services manuellement. Par exemple, si vous souhaitez démarrer manuellement le programme du serveur Web httpd, exécutez S99httpd start. De même, si jamais vous avez besoin de tuer l'un des services lorsque le machine est activé, vous pouvez exécuter la commande dans le répertoire rc * .d avec l'argument stop (S99httpd stop, par exemple).

Certains répertoires rc*.d contiennent des commandes qui commencent par K (pour "kill" ou stop mode). Dans ce cas, rc exécute la commande avec l'argument stop au lieu de start. Vous êtes plus susceptible de rencontrer des commandes K dans les niveaux d'exécution qui ferment le system vers le bas.

Addservices de création et de suppression

Si tu veux add, supprimer ou modifier des services dans les répertoires rc*.d, vous devez examiner de plus près les fichiers à l'intérieur. Une longue liste révèle une structure comme celle-ci :

lrwxrwxrwx. . . S10sysklogd -> .. / init.d / sysklogd
lrwxrwxrwx. . . S12kerneld -> .. / init.d / kerneld
lrwxrwxrwx. . . S15netstd_init -> .. / init.d / netstd_init
lrwxrwxrwx. . . S18netbase -> .. / init.d / netbase
...

Les commandes dans un répertoire rc*.d sont en fait des liens symboliques vers des fichiers dans un répertoire init.d, généralement dans /etc ou /etc/rc.d. Linux Les distributions contiennent ces liens afin qu'elles puissent utiliser les mêmes scripts de démarrage pour tous les niveaux d'exécution. Cette convention n'est en aucun cas une obligation, mais elle facilite souvent un peu l'organisation.

Pour empêcher l'une des commandes du répertoire init.d de s'exécuter dans un niveau d'exécution particulier, vous pouvez penser à supprimer le lien symbolique dans le répertoire rc * .d approprié. Cela fonctionne, mais si vous faites une erreur et que vous avez besoin de remettre le lien en place, vous pourriez avoir du mal à vous souvenir du nom exact du lien. Par conséquent, vous ne devez pas supprimer les liens dans les répertoires rc * .d, mais plutôt, add un trait de soulignement (_) au début du nom du lien comme ceci :

_S99httpd S99httpd mv

Au démarrage, rc ignore _S99httpd car il ne commence pas par S ou K. De plus, le nom d'origine est toujours évident, et vous avez un accès rapide à la commande si vous êtes dans un pincement et que vous devez la démarrer à la main.

À add un service, vous devez créer un script comme les autres dans le répertoire init.d puis faire un lien symbolique dans le bon répertoire rc * .d. La façon la plus simple d'écrire un script est d'examiner les scripts déjà présents dans init.d, d'en faire une copie que vous comprenez et de modifier la copie.

Quand adding un service, assurez-vous que vous choisissez un endroit approprié dans la séquence de démarrage pour démarrer le service. Si le service démarre trop tôt, il peut ne pas fonctionner, en raison d'une dépendance à un autre service. Pour les services non essentiels, la plupart systems administrators préfèrent les chiffres dans les années 90, après la plupart des services fournis avec le system.

Linux Les distributions sont généralement livrées avec une commande pour activer et désactiver les services dans les répertoires rc * .d. Par exemple, dans Debian, la commande est update-rc.d, et dans Red Hat Linux, la commande est chkconfig. Des interfaces utilisateur graphiques sont également disponibles. L'utilisation de ces programmes aide à maintenir la cohérence des répertoires de démarrage et facilite les mises à niveau.

ASTUCE: L'un des plus courants Linux installproblèmes de gestion est un serveur XFree86 mal configuré qui s'allume et s'éteint, system inutilisable sur consoles. Pour arrêter ce comportement, démarrez en mode mono-utilisateur mode et modifier vos services de niveau d'exécution ou de niveau d'exécution. Recherchez quelque chose contenant xdm, gdm ou kdm dans vos répertoires rc*.d ou votre /etc/inittab.

Contrôle init a

Parfois, vous devez donner un petit coup de pied à init pour lui dire de changer de niveau d'exécution, de relire le fichier inittab ou simplement de shut down le system. Parce que init est toujours le premier processus sur un system, son ID de processus est toujours 1.

Vous pouvez contrôler init avec le céleri. Par exemple, si vous voulez passer au niveau d'exécution 3, utilisez cette commande:

telinit 3

Lors du changement de niveau d'exécution, init essaie de tuer tous les processus qui ne sont pas dans le fichier inittab pour le nouveau niveau d'exécution. Par conséquent, vous devez être prudent lorsque vous modifiez les niveaux d'exécution.

Lorsque vous avez besoin de add ou supprimer des tâches réapparaissant ou apporter toute autre modification au fichier inittab, vous devez informer init de la modification et lui faire relire le fichier. Certaines personnes utilisent kill -HUP 1 pour indiquer à init de le faire. Cette méthode traditionnelle fonctionne sur la plupart des versions d'Unix, tant que vous la tapez correctement. Cependant, vous pouvez également exécuter cette commande telinit :

telinit q

Vous pouvez également utiliser telinit s pour passer en mode mono-utilisateur mode.

Arrêt

init contrôle également la façon dont le system s'arrête et redémarre. La bonne façon de shut down a Linux machine est d'utiliser la commande shutdown.

Il existe deux méthodes de base pour utiliser l'arrêt. Si vous arrêtez le system, il ferme le machine vers le bas et le maintient vers le bas. Pour faire le machine arrêtez-vous immédiatement, utilisez cette commande:

shutdown-h now

Sur la plupart modern machines avec des versions relativement récentes de Linux, un arrêt coupe l'alimentation du machine. Vous pouvez également redémarrer le machine. Pour un redémarrage, utilisez -r au lieu de -h.

Le processus d'arrêt prend plusieurs secondes. Vous ne devez jamais réinitialiser ou éteindre un machine pendant cette étape.

Dans l'exemple précédent, il est maintenant temps de shut down. Cet argument est obligatoire, mais il existe de nombreuses façons de le spécifier. Si vous voulez le machine pour descendre dans le futur, une façon consiste à utiliser + n, où n est le nombre de minutes que l'arrêt doit attendre avant de faire son travail. Pour les autres options, consultez la page de manuel shutdown (8).

Pour rendre le system redémarrez dans 10 minutes, exécutez cette commande:

shutdown-r + 10

On Linux, l'arrêt informe toute personne connectée que le machine est en baisse, mais il fait peu de travail réel. Si vous spécifiez une heure autre que maintenant, shutdown crée un fichier appelé /etc/nologin. Lorsque ce fichier est présent, le system interdit les connexions par quiconque sauf le superutilisateur.

Quand system l'heure d'arrêt arrive enfin, shutdown dit à init de passer au niveau d'exécution 0 pour un arrêt et au niveau d'exécution 6 pour un redémarrage. Lorsque init enters runlevel 0 ou 6, tout ce qui suit a lieu, que vous pouvez vérifier en regardant les scripts à l'intérieur de rc0.d et rc6.d:

1. initialisation tue tous les processus qu'il peut (comme il le ferait Lorsque vous passez à un niveau de fonctionnement autres).

# Les commandes rc0.d / rc6.d initiales s'exécutent, verrouillant system fichiers en place et faire d'autres préparatifs pour l'arrêt.
# Les prochaines commandes rc0.d/rc6.d démontent tous les fichierssystems autre que la racine.
# D'autres commandes rc0.d/rc6.d remontent le fichier racinesystem lecture seulement.
# Encore plus de commandes rc0.d/rc6.d écrivent toutes les données mises en mémoire tampon dans le fichiersystem avec le programme de synchronisation.
# Les finales rc0.d / rc6.d commandes indiquent au noyau de redémarrer ou d'arrêter avec le reboot, halt, poweroff ou programme.

Les programmes de redémarrage et d'arrêt se comportent différemment pour chaque niveau d'exécution, ce qui peut causer de la confusion. par default, ces programmes appellent shutdown avec -r ou -h options, mais si le system est déjà au niveau d'exécution d'arrêt ou de redémarrage, les programmes indiquent au noyau de s'arrêter immédiatement. Si vous voulez vraiment fermer votre machine down à la hâte (sans tenir compte de tout dommage possible d'un arrêt désordonné), utilisez l'option -f.

Passionné par la technologie, j'écris avec plaisir sur StealthSettings.com depuis 2006. J'ai une expérience approfondie dans les systèmes d'exploitation : macOS, Windows et Linux, ainsi que dans les langages de programmation et les plates-formes de blogging (WordPress) et pour les boutiques en ligne (WooCommerce, Magento, PrestaShop).

Laisser un commentaire