Bottes Linux

Comme il s'avère, il n'ya pas beaucoup le processus de démarrage:

1. Un chargeur de démarrage Trouve l'image du noyau sur le disque, il se charge en mémoire, et il commence.
2. Le noyau initialiser les périphériques et pilotes STI.
3. Le noyau monte le système de fichiers racine.
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 dans la résolution des problèmes de démarrage et la compréhension du système dans son ensemble. Pour commencer, zéro dans le chargeur de démarrage, qui est l'écran initial ou demander à vous après que l'ordinateur ne ITS power-on self-test, demandant Quel système d'exploitation pour fonctionner. Une fois que vous faites un choix, le chargeur de démarrage lance le noyau Linux, Remise contrôle du système 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 Lorsque le noyau affiche un tas de messages sur le matériel présent sur le système. Le noyau commence à init juste après il affiche un message annonçant que le noyau a monté l' système de fichiers racine:

VFS: Gendarmerie racine (ext2 système de fichiers) en lecture seule.

Peu de temps après, ce que vous voyez un message sur démarrage init, suivi par les messages du système de démarrage de service, et enfin vous obtenez l'invite de connexion d'une certaine sorte.

REMARQUE Sur Red Hat Linux, La note d'initialisation est évidente surtout, parce qu'il «se félicite» vous "Red Hat Linux." Tous les messages par la suite témoignent de la réussite ou de l'échec entre parenthèses à la droite 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. Il s'agit d'un logiciel comme n'importe quel autre sur le système Linux, et vous le trouverez dans / sbin binaires avec d'autres systèmes. Le but principal de init est de démarrer et d'arrêter d'autres programmes dans un ordre particulier. Tout ce que vous devez savoir, c'est comment cette séquence fonctionne.

Il existe différentes variantes de peu, mais la plupart des distributions Linux utilisent le style System V discutés ici. Certaines distributions utilisent une version simplifiée Cela ressemble à la méthode init BSD, mais il est peu probable de rencontrer ce.

Niveaux d'exécution

À un moment donné sur un système Linux, une certaine base un ensemble de processus est en marche. Cet état de la machine est appelée son niveau d'exécution, et il est noté avec un certain nombre de 0 par 6. Le système passe le plus de temps IST dans un niveau d'exécution unique. Toutefois, lorsque vous arrêtez la machine vers le bas, les interrupteurs d'initialisation à un autre niveau d'exécution en vue de mettre fin aux services du système au cours de façon ordonnée et pour dire au noyau d'arrêter. Encore un autre niveau d'exécution est de mode mono-utilisateur, discuté plus tard.

La meilleure façon d'obtenir une poignée sur les niveaux d'exécution est d'examiner le fichier de configuration d'init, / etc / inittab. Cherchez une ligne comme la suivante:

Identifiant: 5: initdefault:

Que cette ligne signifie que le niveau d'exécution par défaut du système est 5. Toutes les lignes dans le fichier inittab prennent cette forme, avec quatre champs séparés par des virgules qui se produisent 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'initialisation qui doivent prendre des mesures (dans l'exemple précédent, l'action consiste à définir le niveau d'exécution par défaut pour 5)
# Une commande à exécuter (en option)

Il n'y a pas de commande à exécuter dans l'exemple précédent initdefault Parce que la commande n'a pas de sens dans le contexte de la mise en niveau d'exécution par défaut. Regarde un peu plus bas dans inittab, jusqu'à ce que vous voyez une ligne comme ceci:

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

Cette ligne déclenche la plupart de la configuration du système et des services à travers le rc *. D et répertoires init.d. Que vous pouvez voir init est mis pour exécuter la commande appelé / etc / rc.d / rc 5 Au niveau d'exécution 5. L'action d'attente indique quand et comment init exécute la commande: run rc 5 au niveau d'exécution 5 une fois, puis attendez que cette commande pour terminer le avant de faire quoi que ce soit d'autre.

Il ya plusieurs actions différentes, en plus de initdefault et attendre, en particulier concernant la gestion d'énergie, et la inittab (5) page de manuel vous dit tout sur eux. Ceux que vous êtes le plus susceptible de rencontrer est expliqué dans les sections suivantes.

respawn

L'action respawn init pour lancer les Causes commande qui suit, et si la commande a fini de s'exécuter, pour le faire fonctionner à nouveau. Vous êtes susceptible de voir quelque chose de semblable à la ligne suivante 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.

ctrlaltdel

Les commandes d'action ctrlaltdel ce que le système ne Lorsque vous appuyez sur CTRL-ALT-SUPPR sur une console virtuelle. Sur la plupart des systèmes, c'est une sorte de commandement redémarrage à l'aide de la commande shutdown.

sysinit

L'action sysinit est la première chose à init qui s'exécute lorsque le démarrage, avant d'entrer dans les niveaux d'exécution.

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

Vous êtes maintenant prêt à apprendre comment init démarre les services du système, juste avant qu'il vous permet de vous connecter sur. Rappelons cette ligne inittab de début:

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 5 niveau d'exécution, dans cet exemple, les commandes ont probablement soit dans / etc / rc.d / rc5.d ou / etc / rc5.d. 1 niveau d'exécution utilise rc1.d, runlevel 2 utilisations rc2.d, et ainsi de suite. Vous pourriez trouver les éléments suivants 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 moyen de nom de la commande qui doit exécuter la commande en mode de démarrage, et le nombre (00 par 99) détermine WHERE dans la séquence rc lance 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 One of These services démarrent à la main. Par exemple, si vous souhaitez démarrer le logiciel de serveur Web httpd manuellement, exécutez la maison S99httpd. De la même façon, si jamais vous avez besoin de tuer l'un des services Lorsque la machine est en marche, vous pouvez exécuter la commande dans le rc *. Répertoire D avec l'argument stop (arrêt S99httpd, par exemple).

Certains répertoires rc *. D qui contiennent les commandes commencent par K (pour "tuer", ou en mode d'arrêt). Dans ce cas, rc exécute la commande avec l'argument stop AU LIEU de la maison. Vous êtes plus susceptible de rencontrer commandes K en niveaux d'exécution qui a fermé le système.

Ajout et suppression de services

Si vous souhaitez ajouter, supprimer ou modifier des services dans les répertoires rc * D., Vous avez besoin de prendre un coup d'œil aux fichiers à l'intérieur. Une longue liste révèle une structure comme ceci:

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

Les commandes de l'année rc *. Répertoire D est en fait des liens symboliques vers les fichiers dans le répertoire init.d année, habituellement dans / etc ou / etc / rc.d. Ces liens contiennent des distributions Linux afin qu'ils puissent utiliser les mêmes scripts de démarrage pour tous les niveaux d'exécution. Cette convention n'est en aucun cas une exigence, mais il fait souvent l'organisation peu plus facile.

Visant à prévenir l'une des commandes dans le répertoire init.d de courir dans un niveau d'exécution particulier, vous pourriez penser à supprimer le lien symbolique dans le APPROPRIÉE rc *. Répertoire D. Ceci fonctionne, mais si vous faites une erreur et jamais besoin de mettre le lien en place, vous pourriez avoir du mal souvenir du nom exact de la liaison. Par conséquent, vous ne devez pas supprimer les liens dans le répertoire rc * D, mais plutôt, ajouter un trait de soulignement (_) au début du nom du lien comme celui-ci.:

_S99httpd S99httpd mv

Au moment du démarrage, rc ignore _S99httpd car il ne démarre pas avec 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 besoin de le lancer à la main.

Pour ajouter un service, vous devez créer un script comme les autres dans le répertoire init.d et puis faire un lien symbolique dans le bon rc *. D répertoire. La façon la plus facile d'écrire un script est d'examiner les scripts init.d déjà, faire une copie de celui que vous comprendre, et modifier la copie.

Lorsque vous ajoutez un service, assurez-vous de choisir Cette année APPROPRIÉ comme dans la séquence d'amorçage pour démarrer le service. Si le service démarre trop tôt, il peut ne pas fonctionner en raison de la dépendance à l'égard d'un autre service. Pour les services non essentiels, la plupart des administrateurs système préfèrent numéros dans les 90s, après que la plupart des services que la came avec le système.

Habituellement distributions Linux sont livrés avec une commande pour activer et désactiver des services dans le rc *. D répertoires. Par exemple, dans Debian, la commande est update-rc.d, et Red Hat Linux, la commande est chkconfig. Interfaces graphiques est également disponible. Utilisation AIDE Ces programmes garder les répertoires de démarrage cohérent qui aide les mises à niveau.

ASTUCE: L'un des problèmes les plus courants d'installation de Linux est mal configuré le serveur année XFree86 Cela films sur et en dehors, ce qui rend le système inutilisable sur la console. Pour arrêter ce comportement, démarrez en mode mono-utilisateur et de modifier votre niveau d'exécution ou des services du niveau d'exécution. Chercher quelque chose contenant xdm, gdm, kdm ou dans votre rc *. Répertoires D, ou votre fichier / etc / inittab.

Contrôle init a

Parfois, vous avez besoin de donner un petit coup à init pour lui dire de changer de niveau d'exécution, de relire le fichier inittab, ou tout simplement pour arrêter le système. Parce que init est toujours le premier processus sur le système, ID du processus IST 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

Lorsque vous passez les niveaux d'exécution, init essaye de tuer tous les processus qui ne sont pas un dans le fichier inittab pour le nouveau niveau d'exécution. Par conséquent, vous devriez faire attention à changer les niveaux.

Lorsque vous avez besoin pour ajouter ou supprimer des emplois réapparaissent ou effectuer tout autre changement dans le fichier inittab, vous devez dire à init du changement et le faire relire le fichier. Certaines personnes utilisent kill-HUP 1 à demander à init de le faire. Cette méthode traditionnelle fonctionne sur la plupart des versions d'Unix, aussi longtemps que vous le tapez correctement. Toutefois, vous pouvez également exécuter cette commande telinit:

telinit q

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

Arrêt

Aussi des contrôles d'initialisation comment le système s'arrête et redémarre. La bonne façon d'arrêter une machine Linux est d'utiliser la commande shutdown.

Il ya deux façons de base pour utiliser l'arrêt. Si vous arrêtez le système, il arrête la machine vers le bas et maintient vers le bas. Pour rendre la machine à l'arrêt immédiatement, utilisez cette commande:

shutdown-h now

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

La procédure d'arrêt prend quelques secondes. Vous ne devriez jamais réinitialiser ou éteindre la machine pendant cette étape.

Dans l'exemple précédent, il est maintenant temps d'arrêter. Cet argument est obligatoire, mais il ya de nombreuses façons de le spécifier. Si vous voulez que la machine à descendre dans l'avenir, un moyen consiste à utiliser + n, où n est le nombre de minutes d'attente avant l'arrêt faisant SON devrait fonctionner. Pour d'autres options, consulter la page de manuel shutdown (8).

Pour faire redémarrer le système minutes 10, exécutez la commande suivante:

shutdown-r + 10

Sous Linux, l'arrêt avise toute personne connectée sur que la machine est en baisse, mais il fait peu de travail réel. Si vous spécifiez un autre moment que maintenant, l'arrêt appelé Crée le nologin fichier / etc /. Lorsque ce fichier est présent, le système interdit les connexions par quiconque à l'exception du super-utilisateur.

Quand le temps d'arrêt du système arrive enfin, l'arrêt indique à init de passer au niveau d'exécution 0 pour une halte et 6 niveau d'exécution d'un redémarrage. Quand init runlevel entre 0 ou 6, toutes les conditions suivantes Prend comme, que vous pouvez vérifier en regardant les scripts au sein 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 premières rc0.d / rc6.d commandes sont exécutées, le verrouillage des fichiers système en place et de faire d'autres préparatifs pour l'arrêt.
# Les prochaines commandes rc0.d / démontage des systèmes de fichiers rc6.d tout autre que la racine.
# De plus rc0.d / commandes remonter le système de fichiers racine rc6.d en lecture seule.
# Toujours plus rc0.d / rc6.d commandes écriture tout en mémoire tampon sur le système de fichiers sur 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 reboot et halt se comportent différemment pour chaque niveau d'exécution, susceptible de provoquer une confusion. Par défaut, ces programmes appellent shutdown avec le paramètre-r ou-h options, mais si le système est déjà au niveau d'exécution arrêt ou le redémarrage, les programmes de dire au noyau de se fermer immédiatement. Si vous voulez vraiment arrêter votre machine à la hâte (abstraction faite des dommages causés par un arrêt désordonné possible), utilisez l'option-f.

Laisser un commentaire

Ce site utilise Akismet pour réduire les spams. Découvrez comment vos données de commentaire sont traitées.