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 la racine filesystème.
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' racine filesystème iSun:

VFS: Gendarmerie racine (ext2 filesystème) 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 quelques variantes différentes, mais la plupart des distributions Linux utilisent le 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

À 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.

Le moyen le plus simple d'obtenir une poignée sur les niveaux d'exécution est d'examiner la configuration d'initialisation file, / etc / inittab. Recherchez une ligne comme celle-ci:

Identifiant: 5: initdefault:

Cette ligne signifie que le niveau d'exécution par défaut sur le système est 5. Toutes les lignes de l'inittab file prendre 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'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 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 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 de réapparition oblige init à exécuter la commande qui suit et, si la commande termine son exécution, à la réexécuter. Vous verrez probablement quelque chose de similaire à cette ligne dans votre inittab file:

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

Le système ctrlL'action altdel contrôle ce que fait le système lorsque vous appuyez sur CONTROL-ALT-DELETE sur une console virtuelle. Sur la plupart des systèmes, 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 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 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 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 devez examiner de plus près le files à 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 d'un répertoire rc * .d sont en fait des liens symboliques vers files dans un répertoire init.d, généralement dans / etc ou /etc/rc.d. Les distributions Linux contiennent ces liens afin de pouvoir 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 elle facilite souvent l'organisation.

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 devez donner un petit coup de pied à init pour lui dire de changer de niveau d'exécution, de relire l'inittab file, ou simplement pour arrêter le système. Comme init est toujours le premier processus sur un système, 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 l'inittab file pour le nouveau niveau d'exécution. Par conséquent, vous devez faire attention à la modification des niveaux d'exécution.

Lorsque vous devez ajouter ou supprimer des tâches en cours de réapparition ou apporter toute autre modification à l'inittab file, vous devez informer init de la modification et lui faire relire le file. Certaines personnes utilisent kill -HUP 1 pour dire à init de faire cela. Cette méthode traditionnelle fonctionne sur la plupart des versions d'Unix, tant que vous la saisissez correctement. Cependant, 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 informe toute personne connectée que la machine est en train de s'arrêter, mais cela ne fonctionne pas vraiment. Si vous spécifiez une heure autre que maintenant, l'arrêt crée un file appelé / etc / nologin. Quand cela file est présent, le système interdit les connexions par quiconque sauf le superutilisateur.

Lorsque l'heure d'arrêt du système 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, système de verrouillage files en place et faire d'autres préparatifs pour l'arrêt.
# Les prochaines commandes rc0.d / rc6.d démontent tout filesystèmes autres que la racine.
# D'autres commandes rc0.d / rc6.d remontent la racine filesystème en lecture seule.
# Encore plus de commandes rc0.d / rc6.d écrivent toutes les données mises en filesystème 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 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.

Bottes Linux

Laisser un commentaire