4.3 Leçon 2
Certification : |
Linux Essentials |
---|---|
Version : |
1.6 |
Thème : |
4 Le Système d’Exploitation Linux |
Objectif : |
4.3 Lieux de Stockage des Données |
Leçon: |
2 sur 2 |
Introduction
Après avoir exploré les programmes et leurs fichiers de configuration, nous apprendrons dans cette leçon comment les commandes sont exécutées en tant que processus. De même, nous commenterons la messagerie du système, l’utilisation de la mémoire tampon circulaire du noyau et de comment l’arrivée de systemd
et de son démon de journalisation journald
a changé la façon dont les choses ont été faites jusqu’à présent concernant la journalisation du système.
Les Processus
Chaque fois qu’un utilisateur entre une commande, un programme est exécuté et un ou plusieurs processus sont générés.
Les processus existent dans une hiérarchie. Après le chargement du noyau en mémoire au démarrage, le premier processus est lancé qui a son tour démarre d’autres processus, qui, là encore, peuvent lancer d’autres processus. Chaque processus possède un identifiant unique (PID
) et un identifiant de processus parent (PPID
). Il s’agit d’entiers positifs qui sont attribués dans un ordre séquentiel.
Exploration Dynamique des Processus : top
Vous pouvez obtenir une liste dynamique de tous les processus en cours avec la commande top
:
$ top top - 11:10:29 up 2:21, 1 user, load average: 0,11, 0,20, 0,14 Tasks: 73 total, 1 running, 72 sleeping, 0 stopped, 0 zombie %Cpu(s): 0,0 us, 0,3 sy, 0,0 ni, 99,7 id, 0,0 wa, 0,0 hi, 0,0 si, 0,0 st KiB Mem : 1020332 total, 909492 free, 38796 used, 72044 buff/cache KiB Swap: 1046524 total, 1046524 free, 0 used. 873264 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 436 carol 20 0 42696 3624 3060 R 0,7 0,4 0:00.30 top 4 root 20 0 0 0 0 S 0,3 0,0 0:00.12 kworker/0:0 399 root 20 0 95204 6748 5780 S 0,3 0,7 0:00.22 sshd 1 root 20 0 56872 6596 5208 S 0,0 0,6 0:01.29 systemd 2 root 20 0 0 0 0 S 0,0 0,0 0:00.00 kthreadd 3 root 20 0 0 0 0 S 0,0 0,0 0:00.02 ksoftirqd/0 5 root 0 -20 0 0 0 S 0,0 0,0 0:00.00 kworker/0:0H 6 root 20 0 0 0 0 S 0,0 0,0 0:00.00 kworker/u2:0 7 root 20 0 0 0 0 S 0,0 0,0 0:00.08 rcu_sched 8 root 20 0 0 0 0 S 0,0 0,0 0:00.00 rcu_bh 9 root rt 0 0 0 0 S 0,0 0,0 0:00.00 migration/0 10 root 0 -20 0 0 0 S 0,0 0,0 0:00.00 lru-add-drain (...)
Comme nous l’avons vu ci-dessus, top
peut également nous donner des informations sur la consommation de mémoire et de CPU du système global ainsi que pour chaque processus.
top
permet à l’utilisateur une certaine interaction.
Par défaut, la sortie est triée en fonction du pourcentage de temps CPU utilisé par chaque processus, par ordre décroissant. Ce comportement peut être modifié en appuyant sur les touches suivantes dans top
:
M
-
Trie par utilisation de la mémoire.
N
-
Trie par numéro d’identification du processus.
T
-
Trie par durée d’exécution.
P
-
Trie par pourcentage d’utilisation du CPU.
Pour passer de l’ordre descendant à l’ordre ascendant, il suffit d’appuyer sur la touche R
.
Une version plus conviviale de top
est htop
. Une autre alternative peut-être plus exhaustive est atop
. Si elles ne sont pas déjà installées dans votre système, je vous encourage à utiliser votre gestionnaire de paquets pour les installer et les essayer.
Capture Instantanée des Processus : ps
Une autre commande très utile pour obtenir des informations sur les processus est ps
. Alors que top
fournit des informations dynamiques, celles de ps
sont statiques.
Si elle est invoquée sans options, la sortie de ps
est assez discrète et ne concerne que les processus attachés au shell courant :
$ ps PID TTY TIME CMD 2318 pts/0 00:00:00 bash 2443 pts/0 00:00:00 ps
Les informations affichées concernent l’identifiant du processus (PID
), le terminal dans lequel le processus est exécuté (TTY
), le temps CPU pris par le processus (TIME
) et la commande qui a lancé le processus (CMD
).
Une option utile pour ps
est -f
qui affiche la liste complète :
$ ps -f UID PID PPID C STIME TTY TIME CMD carol 2318 1682 0 08:38 pts/1 00:00:00 bash carol 2443 2318 0 08:46 pts/1 00:00:00 ps -f
En combinaison avec d’autres options, -f
montre la relation entre les processus parents et enfants :
$ ps -uf USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND carol 2318 0.0 0.1 21336 5140 pts/1 Ss 08:38 0:00 bash carol 2492 0.0 0.0 38304 3332 pts/1 R+ 08:51 0:00 \_ ps -uf carol 1780 0.0 0.1 21440 5412 pts/0 Ss 08:28 0:00 bash carol 2291 0.0 0.7 305352 28736 pts/0 Sl+ 08:35 0:00 \_ emacs index.en.adoc -nw (...)
De même, ps
peut indiquer le pourcentage de mémoire utilisé lorsqu’il est invoqué avec l’option -v
:
$ ps -v PID TTY STAT TIME MAJFL TRS DRS RSS %MEM COMMAND 1163 tty2 Ssl+ 0:00 1 67 201224 5576 0.1 /usr/lib/gdm3/gdm-x-session (...) (...)
Note
|
Une autre commande visuellement attrayante qui montre la hiérarchie des processus est |
Informations sur les Processus dans le Répertoire /proc
Nous avons déjà vu le système de fichiers /proc
. /proc
comprend un sous-répertoire numéroté pour chaque processus en cours d’exécution dans le système (le numéro est le PID
du processus) :
carol@debian:~# ls /proc 1 108 13 17 21 27 354 41 665 8 9 10 109 14 173 22 28 355 42 7 804 915 103 11 140 18 23 29 356 428 749 810 918 104 111 148 181 24 3 367 432 75 811 105 112 149 19 244 349 370 433 768 83 106 115 15 195 25 350 371 5 797 838 107 12 16 2 26 353 404 507 798 899 (...)
Ainsi, toutes les informations relatives à un processus particulier sont incluses dans son répertoire. Lisons le contenu du premier processus dont le PID
est 1
(la sortie a été tronquée pour des raisons de lisibilité) :
# ls /proc/1/ attr cmdline environ io mem ns autogroup comm exe limits mountinfo numa_maps auxv coredump_filter fd loginuid mounts oom_adj ...
Vous pouvez vérifier par exemple le processus exécutable :
# cat /proc/1/cmdline; echo /sbin/init
Comme vous pouvez le voir, le binaire qui a lancé la hiérarchie des processus était /sbin/init
.
Note
|
Les commandes peuvent être concaténées avec le point-virgule ( |
La Charge du Système
Chaque processus d’un système peut potentiellement consommer des ressources du système. La valeur appelée "charge du système" tente d’agréger la charge globale du système en un seul indicateur numérique. Vous pouvez voir la charge actuelle avec la commande uptime
:
$ uptime 22:12:54 up 13 days, 20:26, 1 user, load average: 2.91, 1.59, 0.39
Les trois derniers chiffres indiquent la moyenne de la charge du système pour la dernière minute (2,91
), les cinq dernières minutes (1,59
) et les quinze dernières minutes (0,39
), respectivement.
Chacun de ces chiffres indique le nombre de processus en attente soit de ressources CPU, soit d’opérations d’entrée/sortie à réaliser. Cela signifie que ces processus étaient prêts à fonctionner s’ils avaient reçu les ressources respectives.
Journalisation du Système et Messagerie du Système
Dès que le noyau et les processus commencent à s’exécuter et à communiquer entre eux, de nombreuses informations sont produites. La plupart d’entre elles sont enregistrées dans des fichiers appelés fichiers journaux (logs) ou, plus simplement, journaux.
Sans journalisation, la recherche d’un événement survenu sur un serveur donnerait aux administrateurs système de nombreux maux de tête, d’où l’importance de disposer d’un moyen normalisé et centralisé de suivi des événements du système. En outre, les journaux sont déterminants et révélateurs en matière de dépannage et de sécurité, ainsi que des sources de données fiables pour comprendre les statistiques du système et faire des prévisions de tendances.
Journalisation avec le Démon syslog
Traditionnellement, les messages du système sont gérés par l’utilitaire de journalisation standard syslog ou l’un de ses dérivés : syslog-ng ou rsyslog. Le démon de journalisation collecte les messages d’autres services et programmes et les stocke dans des fichiers de journalisation, généralement sous /var/log
. Toutefois, certains services s’occupent de leurs propres journaux (exemple du serveur web Apache HTTPD). De même, le noyau Linux utilise un tampon circulaire pour stocker ses messages de journalisation.
Fichiers Journaux dans /var/log
Comme les journaux sont des données qui varient dans le temps, ils se trouvent normalement dans /var/log
.
Si vous explorez /var/log
, vous vous rendrez compte que les noms des fichiers de journalisation sont à un certain degré auto explicatif. En voici quelques exemples :
/var/log/auth.log
-
Il stocke des informations sur l’authentification.
/var/log/kern.log
-
Il stocke les informations du noyau.
/var/log/syslog
-
Il stocke les informations du système.
/var/log/messages
-
Il stocke les données du système et des applications.
Note
|
Le nom exact et le contenu des fichiers journaux peuvent varier selon les distributions Linux. |
Accès aux Fichiers Journaux
Lorsque vous explorez les fichiers journaux, n’oubliez pas d’être root (si vous n’avez pas de droits de lecture) et d’utiliser un pager tel que less
;
# less /var/log/messages Jun 4 18:22:48 debian liblogging-stdlog: [origin software="rsyslogd" swVersion="8.24.0" x-pid="285" x-info="http://www.rsyslog.com"] rsyslogd was HUPed Jun 29 16:57:10 debian kernel: [ 0.000000] Linux version 4.9.0-8-amd64 (debian-kernel@lists.debian.org) (gcc version 6.3.0 20170516 (Debian 6.3.0-18+deb9u1) ) #1 SMP Debian 4.9.130-2 (2018-10-27) Jun 29 16:57:10 debian kernel: [ 0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-4.9.0-8-amd64 root=/dev/sda1 ro quiet
Vous pouvez également utiliser la commande tail
avec l’option -f
pour lire les messages les plus récents du fichier et afficher dynamiquement les nouvelles lignes telles qu’elles sont ajoutées :
# tail -f /var/log/messages Jul 9 18:39:37 debian kernel: [ 2.350572] RAPL PMU: hw unit of domain psys 2^-0 Joules Jul 9 18:39:37 debian kernel: [ 2.512802] input: VirtualBox USB Tablet as /devices/pci0000:00/0000:00:06.0/usb1/1-1/1-1:1.0/0003:80EE:0021.0001/input/input7 Jul 9 18:39:37 debian kernel: [ 2.513861] Adding 1046524k swap on /dev/sda5. Priority:-1 extents:1 across:1046524k FS Jul 9 18:39:37 debian kernel: [ 2.519301] hid-generic 0003:80EE:0021.0001: input,hidraw0: USB HID v1.10 Mouse [VirtualBox USB Tablet] on usb-0000:00:06.0-1/input0 Jul 9 18:39:37 debian kernel: [ 2.623947] snd_intel8x0 0000:00:05.0: white list rate for 1028:0177 is 48000 Jul 9 18:39:37 debian kernel: [ 2.914805] IPv6: ADDRCONF(NETDEV_UP): enp0s3: link is not ready Jul 9 18:39:39 debian kernel: [ 4.937283] e1000: enp0s3 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX Jul 9 18:39:39 debian kernel: [ 4.938493] IPv6: ADDRCONF(NETDEV_CHANGE): enp0s3: link becomes ready Jul 9 18:39:40 debian kernel: [ 5.315603] random: crng init done Jul 9 18:39:40 debian kernel: [ 5.315608] random: 7 urandom warning(s) missed due to ratelimiting
Vous trouverez la sortie dans le format suivant :
-
Horodatage
-
Nom d’hôte d’où provient le message
-
Nom du programme/service qui a généré le message
-
Le PID du programme qui a généré le message
-
Description de l’action qui a eu lieu
La plupart des fichiers journaux sont écrits en texte clair ; cependant, certains peuvent contenir des données binaires comme c’est le cas de /var/log/wtmp
qui stocke les données relatives aux connexions réussies. Vous pouvez utiliser la commande file
pour déterminer quel est le type de fichier :
$ file /var/log/wtmp /var/log/wtmp: dBase III DBT, version number 0, next free block index 8
Ces fichiers sont normalement lus à l’aide de commandes spéciales. last
est utilisée pour interpréter les données dans /var/log/wtmp
:
$ last carol tty2 :0 Thu May 30 10:53 still logged in reboot system boot 4.9.0-9-amd64 Thu May 30 10:52 still running carol tty2 :0 Thu May 30 10:47 - crash (00:05) reboot system boot 4.9.0-9-amd64 Thu May 30 09:11 still running carol tty2 :0 Tue May 28 08:28 - 14:11 (05:42) reboot system boot 4.9.0-9-amd64 Tue May 28 08:27 - 14:11 (05:43) carol tty2 :0 Mon May 27 19:40 - 19:52 (00:11) reboot system boot 4.9.0-9-amd64 Mon May 27 19:38 - 19:52 (00:13) carol tty2 :0 Mon May 27 19:35 - down (00:03) reboot system boot 4.9.0-9-amd64 Mon May 27 19:34 - 19:38 (00:04)
Note
|
Comme |
La Rotation des Journaux
Les fichiers journaux peuvent se développer considérablement en quelques semaines ou mois et occuper tout l’espace disque disponible. Pour y remédier, on utilise l’utilitaire logrotate
. Il met en œuvre la rotation ou le cycle des journaux, ce qui implique des actions telles que le déplacement des fichiers journaux vers un nouveau nom, leur archivage et/ou leur compression, parfois leur envoi par courrier électronique à l’administrateur système et finalement leur suppression au fur et à mesure qu’ils vieillissent. Les conventions utilisées pour nommer ces fichiers de log en rotation sont diverses (ajout d’un suffixe avec la date, par exemple) ; cependant, le simple ajout d’un suffixe avec un nombre entier est courant :
# ls /var/log/apache2/ access.log error.log error.log.1 error.log.2.gz other_vhosts_access.log
Notez que le fichier error.log.2.gz
a déjà été compressé avec gzip
(d’où le suffixe .gz
).
Le Tampon Circulaire du Noyau (Kernel Ring Buffer)
Le tampon circulaire du noyau est une structure de données de taille fixe qui enregistre les messages de démarrage du noyau ainsi que tous les messages du noyau en direct. L’importante fonction de ce tampon est d’enregistrer tous les messages du noyau produits lors du démarrage lorsque syslog
n’est pas encore disponible. La commande dmesg
affiche le tampon circulaire du noyau (qui était également stocké dans /var/log/dmesg
). En raison de l’extension du tampon circulaire, cette commande est normalement utilisée en combinaison avec l’utilitaire de filtrage de texte grep
ou un pager tel que less
. Par exemple, pour rechercher des messages de démarrage :
$ dmesg | grep boot [ 0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-4.9.0-9-amd64 root=UUID=5216e1e4-ae0e-441f-b8f5-8061c0034c74 ro quiet [ 0.000000] smpboot: Allowing 1 CPUs, 0 hotplug CPUs [ 0.000000] Kernel command line: BOOT_IMAGE=/boot/vmlinuz-4.9.0-9-amd64 root=UUID=5216e1e4-ae0e-441f-b8f5-8061c0034c74 ro quiet [ 0.144986] AppArmor: AppArmor disabled by boot time parameter (...)
Note
|
Au fur et à mesure que le tampon circulaire du noyau se développe avec de nouveaux messages, les plus anciens s’effacent. |
Le Journal du Système : systemd-journald
À partir de 2015, systemd a remplacé SysV Init comme gestionnaire de système et de services de facto dans la plupart des grandes distributions Linux. En conséquence, le démon de journalisation journald est devenu le composant de journalisation standard, remplaçant syslog dans la plupart des aspects. Les données ne sont plus stockées en texte brut mais sous forme binaire. Ainsi, l’utilitaire journalctl
est nécessaire pour lire les journaux. En outre, journald est compatible avec syslog et peut être intégré à syslog.
journalctl
est l’utilitaire pour lire et interroger la base de données des journaux de Systemd. S’il est invoqué sans options, il affiche le journal dans son intégralité :
# journalctl -- Logs begin at Tue 2019-06-04 17:49:40 CEST, end at Tue 2019-06-04 18:13:10 CEST. -- jun 04 17:49:40 debian systemd-journald[339]: Runtime journal (/run/log/journal/) is 8.0M, max 159.6M, 151.6M free. jun 04 17:49:40 debian kernel: microcode: microcode updated early to revision 0xcc, date = 2019-04-01 Jun 04 17:49:40 debian kernel: Linux version 4.9.0-8-amd64 (debian-kernel@lists.debian.org) (gcc version 6.3.0 20170516 (Debian 6.3.0-18+deb9u1) ) Jun 04 17:49:40 debian kernel: Command line: BOOT_IMAGE=/boot/vmlinuz-4.9.0-8-amd64 root=/dev/sda1 ro quiet (...)
Cependant, s’il est invoqué avec les options -k
ou --dmesg
, il sera équivalent à l’utilisation de la commande dmesg
:
# journalctl -k [ 0.000000] Linux version 4.9.0-9-amd64 (debian-kernel@lists.debian.org) (gcc version 6.3.0 20170516 (Debian 6.3.0-18+deb9u1) ) #1 SMP Debian 4.9.168-1+deb9u2 (2019-05-13) [ 0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-4.9.0-9-amd64 root=UUID=5216e1e4-ae0e-441f-b8f5-8061c0034c74 ro quiet (...)
D’autres options intéressantes pour journalctl
sont :
-b
,--boot
-
Elle affiche les informations de démarrage.
-u
-
Elle affiche des messages concernant une unité spécifique. En gros, une unité peut être définie comme toute ressource gérée par systemd. Par exemple,
journalctl -u apache2.service
est utilisé pour lire les messages concernant le serveur webapache2
. -f
-
Elle affiche les messages les plus récents du journal et continue d’afficher les nouvelles entrées telles qu’elles sont ajoutées au journal, comme le ferait
tail -f
.
Exercices Guidés
-
Consultez la sortie suivante de
top
et répondez aux questions suivantes :carol@debian:~$ top top - 13:39:16 up 31 min, 1 user, load average: 0.12, 0.15, 0.10 Tasks: 73 total, 2 running, 71 sleeping, 0 stopped, 0 zombie %Cpu(s): 1.1 us, 0.4 sy, 0.0 ni, 98.6 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem : 1020332 total, 698700 free, 170664 used, 150968 buff/cache KiB Swap: 1046524 total, 1046524 free, 0 used. 710956 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 605 nobody 20 0 1137620 132424 34256 S 6.3 13.0 1:47.24 ntopng 444 www-data 20 0 364780 4132 2572 S 0.3 0.4 0:00.44 apache2 734 root 20 0 95212 7004 6036 S 0.3 0.7 0:00.36 sshd 887 carol 20 0 46608 3680 3104 R 0.3 0.4 0:00.03 top 1 root 20 0 56988 6688 5240 S 0.0 0.7 0:00.42 systemd 2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd 3 root 20 0 0 0 0 S 0.0 0.0 0:00.09 ksoftirqd/0 4 root 20 0 0 0 0 S 0.0 0.0 0:00.87 kworker/0:0 (...)
-
Quels processus ont été lancés par l’utilisateur
carol
? -
Quel répertoire virtuel de
/proc
devez-vous visiter pour rechercher des données concernant la commandetop
? -
Quel processus a été lancé en premier ? Comment pouvez-vous le savoir ?
-
Complétez le tableau en précisant dans quelle zone de la sortie de
top
se trouvent les informations suivantes :Informations sur … Zone du résumé Zone d’activité Mémoire
Swap
PID
Temps CPU
Commandes
-
-
Quelle commande est utilisée pour lire les journaux binaires suivants ?
-
/var/log/wtmp
-
/var/log/btmp
-
/run/log/journal/2a7d9730cd3142f4b15e20d6be631836/system.journal
-
-
En combinaison avec
grep
, quelles commandes utiliseriez-vous pour trouver les informations suivantes sur votre système Linux ?-
Quand le système a été redémarré pour la dernière fois (
wtmp
) -
Quels sont les disques durs installés (
kern.log
) -
Date de la dernière connexion (
auth.log
)
-
-
Quelles sont les deux commandes que vous utiliseriez pour afficher le tampon circulaire du noyau ?
-
Indiquez où se trouvent les messages de journal suivant :
-
Jul 10 13:37:39 debian dbus[303]: [system] Successfully activated service 'org.freedesktop.nm_dispatcher'
/var/log/auth.log
/var/log/kern.log
/var/log/syslog
/var/log/messages
-
Jul 10 11:23:58 debian kernel: [ 1.923349] usbhid: USB HID core driver
/var/log/auth.log
/var/log/kern.log
/var/log/syslog
/var/log/messages
-
Jul 10 14:02:53 debian sudo: pam_unix(sudo:session): session opened for user root by carol(uid=0)
/var/log/auth.log
/var/log/kern.log
/var/log/syslog
/var/log/messages
-
Jul 10 11:23:58 debian NetworkManager[322]: <info> [1562750638.8672] NetworkManager (version 1.6.2) is starting…
/var/log/auth.log
/var/log/kern.log
/var/log/syslog
/var/log/messages
-
-
Exécutez
journalctl
pour obtenir des informations sur les unités suivantes ?Unité Commande ssh
networking
rsyslog
cron
Exercices d’Exploration
-
Reconsidérez la sortie du
top
des exercices guidés et répondez aux questions suivantes :-
Quelles sont les deux étapes à suivre pour tuer le serveur web apache ?
-
Dans la zone de résumé, comment pourriez-vous afficher les informations sur la mémoire physique et Swap à l’aide de barres de progression ?
-
Maintenant, triez les processus en fonction de l’utilisation de la mémoire :
-
Maintenant que vous avez des informations sur la mémoire affichée dans les barres de progression et des processus triés par utilisation de la mémoire, enregistrez ces configurations afin de les obtenir par défaut la prochaine fois que vous utiliserez
top
: -
Quel fichier stocke les paramètres de configuration de
top
? Où se trouve-t-il ? Comment pouvez-vous vérifier son existence ?
-
-
Apprenez la commande
exec
dans Bash. Essayez de démontrer sa fonctionnalité en démarrant une session Bash, en trouvant le processus Bash avecps
, puis exécutezexec /bin/sh
et recherchez à nouveau le processus avec le même PID. -
Suivez ces étapes pour explorer les événements du noyau et la gestion dynamique des périphériques par udev :
-
Branchez une clé USB sur votre ordinateur. Lancez
dmesg
et faites attention aux dernières lignes. Quelle est la ligne la plus récente ? -
En gardant à l’esprit la sortie de la commande précédente, exécutez
ls /dev/sd*
et assurez-vous que votre clé USB apparaît dans la liste. Quelle est la sortie ? -
Maintenant, retirez la clé USB et lancez à nouveau
dmesg
. Comment est la ligne la plus récente ? -
Exécutez à nouveau
ls /dev/sd*
et assurez-vous que votre appareil a disparu de la liste. Quel est le résultat ?
-
Résumé
Dans le contexte du stockage des données, les sujets suivants ont été abordés dans cette leçon : la gestion des processus, la journalisation et la messagerie du système.
En ce qui concerne la gestion des processus, nous avons appris ce qui suit :
-
Les programmes génèrent des processus et les processus existent dans une hiérarchie.
-
Chaque processus possède un identifiant unique (
PID
) et un identifiant de processus parent (PPID
). -
top
est une commande très utile pour explorer de manière dynamique et interactive les processus en cours du système. -
ps
peut être utilisé pour obtenir une capture instantanée des processus en cours d’exécution dans le système. -
Le répertoire
/proc
comprend des répertoires pour chaque processus en cours d’exécution dans le système, nommés d’après leur PID. -
Le concept de charge moyenne du système est très utile pour vérifier l’utilisation ou la surcharge du processeur.
En ce qui concerne la journalisation système, nous devons nous souvenir :
-
Qu’un journal est un fichier dans lequel sont enregistrés les événements du système. Les journaux sont d’une valeur inestimable pour le dépannage.
-
Que la journalisation a traditionnellement été assurée par des services spéciaux tels que syslog, syslog-ng ou rsyslog. Néanmoins, certains programmes utilisent leurs propres démons de journalisation.
-
Que comme les journaux sont des données variables, ils sont conservés dans
/var
et parfois leurs noms peuvent vous donner un indice sur leur contenu (kern.log
,auth.log
, etc.) -
Que la plupart des journaux sont écrits en texte simple et peuvent être lus avec n’importe quel éditeur de texte, à condition que vous disposiez des autorisations nécessaires. Toutefois, certains sont binaires et doivent être lus à l’aide de commandes spéciales.
-
Que pour éviter les problèmes d’espace disque, la rotation des journaux est effectuée par l’utilitaire logrotate.
-
Quant au noyau, il utilise une structure de données circulaire, le tampon circulaire, où les messages de démarrage sont conservés (les anciens messages s’effacent avec le temps).
-
Que le gestionnaire du système et des services systemd a remplacé le System V init dans pratiquement toutes les distributions, journald devenant le service de journalisation standard.
-
Que pour lire le journal de Systemd, l’utilitaire
journalctl
est nécessaire.
Commandes utilisées dans cette leçon :
cat
-
Concatène/affiche le contenu du fichier.
dmesg
-
Affiche le tampon circulaire du noyau.
echo
-
Affiche une ligne de texte ou une nouvelle ligne.
file
-
Détermine le type de fichier.
grep
-
Affiche des lignes correspondant à un motif.
last
-
Affiche une liste des derniers utilisateurs connectés.
less
-
Affiche le contenu du fichier une page à la fois.
ls
-
Liste le contenu du répertoire.
journalctl
-
Interroge le journal de
systemd
. tail
-
Affiche les dernières lignes d’un fichier.
Réponses aux Exercices Guidés
-
Consultez la sortie suivante de
top
et répondez aux questions suivantes :carol@debian:~$ top top - 13:39:16 up 31 min, 1 user, load average: 0.12, 0.15, 0.10 Tasks: 73 total, 2 running, 71 sleeping, 0 stopped, 0 zombie %Cpu(s): 1.1 us, 0.4 sy, 0.0 ni, 98.6 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem : 1020332 total, 698700 free, 170664 used, 150968 buff/cache KiB Swap: 1046524 total, 1046524 free, 0 used. 710956 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 605 nobody 20 0 1137620 132424 34256 S 6.3 13.0 1:47.24 ntopng 444 www-data 20 0 364780 4132 2572 S 0.3 0.4 0:00.44 apache2 734 root 20 0 95212 7004 6036 S 0.3 0.7 0:00.36 sshd 887 carol 20 0 46608 3680 3104 R 0.3 0.4 0:00.03 top 1 root 20 0 56988 6688 5240 S 0.0 0.7 0:00.42 systemd 2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd 3 root 20 0 0 0 0 S 0.0 0.0 0:00.09 ksoftirqd/0 4 root 20 0 0 0 0 S 0.0 0.0 0:00.87 kworker/0:0 (...)
-
Quels processus ont été lancés par l’utilisateur
carol
?Réponse : Un seul :
top
. -
Quel répertoire virtuel de
/proc
devez-vous visiter pour rechercher des données concernant la commandetop
?Réponse :
/proc/887
-
Quel processus a été lancé en premier ? Comment pouvez-vous le savoir ?
Réponse :
systemd
. Parce que c’est celui qui a lePID
n°1. -
Complétez le tableau en précisant dans quelle zone de la sortie de
top
se trouvent les informations suivantes :Informations sur … Zone de resumé Zone d’activité Mémoire
Oui
Oui
Swap
Oui
Non
PID
Non
Oui
Temps CPU
Oui
Oui
Commandes
Non
Oui
-
-
Quelle commande est utilisée pour lire les journaux binaires suivants ?
-
/var/log/wtmp
Réponse :
last
-
/var/log/btmp
Réponse :
lastb
-
/run/log/journal/2a7d9730cd3142f4b15e20d6be631836/system.journal
Réponse :
journalctl
-
-
En combinaison avec
grep
, quelles commandes utiliseriez-vous pour trouver les informations suivantes sur votre système Linux ?-
Quand le système a été redémarré pour la dernière fois (
wtmp
)Réponse :
last
-
Quels sont les disques durs installés (
kern.log
)Réponse :
less /var/log/kern.log
-
La date de la dernière connexion (
auth.log
)Réponse :
less /var/log/auth.log
-
-
Quelles sont les deux commandes que vous utiliseriez pour afficher le tampon circulaire du noyau ?
dmesg
etjournalctl -k
(égalementjournalctl --dmesg
). -
Indiquez où se trouvent les messages de journal suivants :
-
Jul 10 13:37:39 debian dbus[303]: [system] Successfully activated service 'org.freedesktop.nm_dispatcher'
/var/log/auth.log
/var/log/kern.log
/var/log/syslog
X
/var/log/messages
-
Jul 10 11:23:58 debian kernel: [ 1.923349] usbhid: USB HID core driver
/var/log/auth.log
/var/log/kern.log
X
/var/log/syslog
/var/log/messages
X
Jul 10 14:02:53 debian sudo: pam_unix(sudo:session): session opened for user root by carol(uid=0)
/var/log/auth.log
X
/var/log/kern.log
/var/log/syslog
/var/log/messages
-
Jul 10 11:23:58 debian NetworkManager[322]: <info> [1562750638.8672] NetworkManager (version 1.6.2) is starting…
/var/log/auth.log
/var/log/kern.log
/var/log/syslog
/var/log/messages
X
-
-
Exécutez
journalctl
pour obtenir des informations sur les unités suivantes :Unité Commande ssh
journalctl -u ssh.service
networking
journalctl -u networking.service
rsyslog
journalctl -u rsyslog.service
cron
journalctl -u cron.service
Réponses aux Exercices d’Exploration
-
Reconsidérez la sortie du
top
des exercices guidés et répondez aux questions suivantes :-
Quelles sont les deux étapes à suivre pour tuer le serveur web apache ?
D’abord, appuyez sur
k
; puis fournissez une valeurkill
. -
Dans la zone de résumé, comment pourriez-vous afficher les informations sur la mémoire physique et le Swap à l’aide de barres de progression ?
En appuyant sur
m
une ou deux fois. -
Maintenant, triez les processus en fonction de l’utilisation de la mémoire :
M
-
Maintenant que vous avez des informations sur la mémoire affichée dans les barres de progression et des processus triés par utilisation de la mémoire, enregistrez ces configurations afin de les obtenir par défaut la prochaine fois que vous utiliserez
top
:W
-
Quel fichier stocke les paramètres de configuration de
top
? Où se trouve-t-il ? Comment pouvez-vous vérifier son existence ?Le fichier est
~/.config/procps/toprc
et se trouve dans le répertoire personnel de l’utilisateur (~
). Comme il s’agit d’un fichier caché (il réside dans un répertoire dont le nom commence par un point), nous pouvons vérifier son existence avecls -a
(listage de tous les fichiers). Ce fichier peut être généré en appuyant sur kbd:[Shift+W] danstop
.
-
-
Apprenez la commande
exec
dans Bash. Essayez de démontrer sa fonctionnalité en démarrant une session Bash, en trouvant le processus Bash avecps
, puis exécutezexec /bin/sh
et recherchez à nouveau le processus avec le même PID.exec
remplace un processus par une autre commande. Dans l’exemple suivant, nous pouvons voir que le processus Bash est remplacé par/bin/sh
(au lieu que/bin/sh
devienne un processus enfant) :$ echo $$ 19877 $ ps auxf | grep 19877 | head -1 carol 19877 0.0 0.0 7448 3984 pts/25 Ss 21:17 0:00 \_ bash $ exec /bin/sh sh-5.0$ ps auxf | grep 19877 | head -1 carol 19877 0.0 0.0 7448 3896 pts/25 Ss 21:17 0:00 \_ /bin/sh
-
Suivez ces étapes pour explorer les événements du noyau et la gestion dynamique des périphériques par udev :
-
Branchez une clé USB à votre ordinateur. Lancez
dmesg
et faites attention aux dernières lignes. Quelle est la ligne la plus récente ?Vous devriez obtenir quelque chose du genre [
1967.700468] sd 6:0:0:0 : [sdb] Attached SCSI removable disk
. -
En gardant à l’esprit la sortie de la commande précédente, exécutez
ls /dev/sd*
et assurez-vous que votre clé USB apparaît dans la liste. Quelle est la sortie ?Selon le nombre de périphériques connectés à votre système, vous devriez obtenir quelque chose comme
/dev/sda /dev/sda1 /dev/sdb /dev/sdb1 /dev/sdb2
. Dans notre cas, nous trouvons notre clé USB (/dev/sdb
) et ses deux partitions (/dev/sdb1
et/dev/sdb2
). -
Maintenant, retirez la clé USB et lancez à nouveau
dmesg
. Comment est la ligne la plus récente ?Vous devriez obtenir quelque chose du genre
[2458.881695] usb 1-9 : USB disconnect, dispositif numéro 6.
-
Exécutez à nouveau
ls /dev/sd*
et assurez-vous que votre appareil a disparu de la liste. Quel est le résultat ?Dans notre cas,
/dev/sda /dev/sda1
.
-