La réponse est dans le journal
Les paiements d'une boutique s'arrêtent à minuit. Personne n'a rien touché. La première chose que fait l'ingénieur, c'est lire la fin d'un fichier où le programme de paiement écrit ce qu'il a fait. Il dit ce qui s'est passé, avec l'heure.
À la fin de cette leçon
Remarque
Je peux lire un journal et arrêter un processus qui se comporte mal.
Mots-clés
- Journal : un fichier où un programme écrit ce qu'il a fait.
- Tube :
|, qui passe la réponse d'une commande à la suivante. - Processus : un programme qui tourne en ce moment.
- PID : le numéro qui désigne un processus.
- Signal : un message envoyé à un processus, par exemple « arrête-toi ».
Pour commencer : ce que tu sais déjà
Remarque
Réponds dans ta tête. 1. Que fait >> à un fichier ? 2. Qu'est-ce qu'un chemin ? 3. Quelle commande affiche tout un fichier ? Tu vas voir une commande qui n'affiche que la fin d'un fichier.
Avant de commencer
Remarque
Appuie sur Démarrer le lab dans la barre en haut de cette leçon. Ce lab est une machine Ubuntu entière, rien que pour toi : elle met un peu plus de temps à démarrer qu'un conteneur. Chaque bouton Exécuter tape sa commande dans le terminal de la machine, l'une après l'autre, dans la même session. Si l'un d'eux dit que la machine démarre encore, attends quelques secondes et appuie de nouveau. Quand la leçon dit Tape ceci, la commande ne se termine pas toute seule ou te pose une question : appuie sur Ouvrir le terminal dans la barre et tape-la toi-même.
Lire la fin d’un journal, et le fouiller
La fin d'un journal, c'est la partie la plus récente. tail -n 5 affiche les cinq dernières lignes. grep n'affiche que les lignes qui contiennent certains mots, et -c les compte à la place. La dernière commande en relie trois par des tubes : lire tout le journal, garder les lignes hello, montrer les trois plus récentes.
tail -n 5 /var/log/test.logAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
grep 'hello' /var/log/test.logAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
grep -c ERROR /var/log/test.logAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
cat /var/log/test.log | grep 'hello' | tail -n 3Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Tape ceci : suivre un journal pendant qu’il grandit
Dans le terminal, tape tail -f /var/log/test.log. Les nouvelles lignes apparaissent au fur et à mesure qu'elles sont écrites. Appuie sur Ctrl+C pour arrêter. Un bouton Exécuter ne peut pas appuyer sur Ctrl+C, donc tu tapes celle-ci toi-même. Tu verras aussi tail -200f dans les notes des autres : elle montre d'abord les 200 dernières lignes, puis suit.
Vérifie
Astuce
Quelle commande montre seulement la fin d'un fichier, et laquelle garde seulement les lignes qui contiennent un mot ? Réponse : tail et grep. Reliées par un tube, elles répondent à la plupart des questions sur un journal.
Trouver un fichier, et une commande
find / -name 'test.log' cherche dans toute la machine. Certaines parties te sont interdites, donc 2>/dev/null jette ces messages d'erreur. which ls dit où se trouve une commande.
find / -name 'test.log' 2>/dev/nullAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
which lsAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Trouver un processus
Un programme qui tourne est un processus et il a un numéro, son PID. ps -ef les liste tous, et | grep worker garde les lignes qui contiennent ce mot. Deux lignes reviennent : le worker, et le grep que tu viens de lancer. pgrep -f lab-worker n'affiche que le numéro.
ps -ef | grep workerAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
pgrep -f lab-workerAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Tape ceci : l’arrêter
Prends le numéro de la réponse ci-dessus. Dans le terminal, tape kill 1234, avec ton numéro, puis relance ps -ef | grep worker : le worker a disparu. Cherche maintenant le deuxième processus avec ps -ef | grep stubborn, tape kill et son numéro, et regarde encore. Il est toujours là, car il ignore une demande polie. Tape kill -9 et son numéro, et il s'arrête. top montre les processus les plus occupés en direct ; appuie sur q pour quitter.
Une erreur fréquente
Attention
Beaucoup de gens croient que kill -9 est simplement un kill plus fort et l'utilisent en premier. kill demande à un programme de finir, pour qu'il puisse enregistrer son travail et ranger. kill -9 l'enlève tout de suite, sans rien ranger, et peut laisser des fichiers à moitié écrits. Utilise kill, attends quelques secondes, et n'emploie -9 que si le programme refuse toujours de s'arrêter.
Vérification finale
Astuce
Réponds sans regarder en arrière. 1. Comment arrêtes-tu tail -f ? 2. Que fait 2>/dev/null ? 3. Que dois-tu essayer d'abord, kill ou kill -9 ? Réponses : Ctrl+C ; il jette les messages d'erreur ; kill.
Pour les enseignants
Astuce
Cette leçon se fait dans un lab de type machine virtuelle : chaque élève a sa propre machine Ubuntu, et un bouton Exécuter tape dans son terminal et montre ce qui s'est affiché. Points clés : 1. tail et grep lisent un journal. 2. find et which localisent des choses. 3. ps trouve un processus et kill l'arrête. Erreur fréquente : utiliser kill -9 en premier. Matériel : le lab et un navigateur. Conseil : lancez tail -f sur l'écran de l'enseignant et demandez à la classe de dire quand la prochaine ligne arrivera. Le lab n'a pas de vérification et ne note rien ; donnez un travail à rendre de votre choix si vous voulez une note.