Recherche de site Web

7 commandes 'dmesg' pour le dépannage et la collecte d'informations sur les systèmes Linux


La commande 'dmesg' affiche les messages du tampon en anneau du noyau. Un système passe par plusieurs niveaux d'exécution à partir desquels nous pouvons obtenir de nombreuses informations telles que l'architecture du système, le processeur, le périphérique connecté, la RAM, etc. Lorsque l'ordinateur démarre, un noyau (cœur d'un système d'exploitation) est chargé en mémoire. Pendant cette période, un certain nombre de messages sont affichés où nous pouvons voir les périphériques matériels détectés par le noyau.

Lire aussi : 10 commandes Linux pour collecter des informations sur le système et le matériel

Les messages sont très importants en termes de diagnostic en cas de panne de l'appareil. Lorsque nous connectons ou déconnectons un périphérique matériel sur le système, à l’aide de la commande dmesg, nous obtenons à la volée les informations détectées ou déconnectées. La commande dmesg est disponible sur la plupart des systèmes d'exploitation basés sur Linux et Unix.

Jetons un peu de lumière sur l'outil le plus célèbre appelé commande « dmesg » avec leurs exemples pratiques, comme indiqué ci-dessous. La syntaxe exacte de dmesg est la suivante.

dmseg [options...]

1. Répertoriez tous les pilotes chargés dans le noyau

Nous pouvons utiliser des outils de manipulation de texte, c'est-à-dire 'plus', 'tail', 'moins' ou 'grep ' avec la commande dmesg. Comme la sortie du journal dmesg ne tient pas sur une seule page, l'utilisation de dmesg avec la commande pipe more ou less affichera les journaux sur une seule page.

[[email  ~]# dmesg | more
[[email  ~]# dmesg | less
Exemple de sortie
[    0.000000] Initializing cgroup subsys cpuset
[    0.000000] Initializing cgroup subsys cpu
[    0.000000] Initializing cgroup subsys cpuacct
[    0.000000] Linux version 3.11.0-13-generic (buildd@aatxe) (gcc version 4.8.1 (Ubuntu/Linaro 4.8.1-10ubuntu8) ) #20-Ubuntu SMP Wed Oct 23 17:26:33 UTC 2013 
(Ubuntu 3.11.0-13.20-generic 3.11.6)
[    0.000000] KERNEL supported cpus:
[    0.000000]   Intel GenuineIntel
[    0.000000]   AMD AuthenticAMD
[    0.000000]   NSC Geode by NSC
[    0.000000]   Cyrix CyrixInstead
[    0.000000]   Centaur CentaurHauls
[    0.000000]   Transmeta GenuineTMx86
[    0.000000]   Transmeta TransmetaCPU
[    0.000000]   UMC UMC UMC UMC
[    0.000000] e820: BIOS-provided physical RAM map:
[    0.000000] BIOS-e820: [mem 0x0000000000000000-0x000000000009fbff] usable
[    0.000000] BIOS-e820: [mem 0x00000000000f0000-0x00000000000fffff] reserved
[    0.000000] BIOS-e820: [mem 0x0000000000100000-0x000000007dc08bff] usable
[    0.000000] BIOS-e820: [mem 0x000000007dc08c00-0x000000007dc5cbff] ACPI NVS
[    0.000000] BIOS-e820: [mem 0x000000007dc5cc00-0x000000007dc5ebff] ACPI data
[    0.000000] BIOS-e820: [mem 0x000000007dc5ec00-0x000000007fffffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000e0000000-0x00000000efffffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000fec00000-0x00000000fed003ff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000fed20000-0x00000000fed9ffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000fee00000-0x00000000feefffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000ffb00000-0x00000000ffffffff] reserved
[    0.000000] NX (Execute Disable) protection: active
.....

Lire aussi : Gérer efficacement les fichiers Linux à l'aide des commandes head, tail et cat

2. Répertoriez tous les appareils détectés

Pour découvrir quels disques durs ont été détectés par le noyau, vous pouvez rechercher le mot-clé « sda » avec « grep » comme indiqué ci-dessous.

[[email  ~]# dmesg | grep sda

[    1.280971] sd 2:0:0:0: [sda] 488281250 512-byte logical blocks: (250 GB/232 GiB)
[    1.281014] sd 2:0:0:0: [sda] Write Protect is off
[    1.281016] sd 2:0:0:0: [sda] Mode Sense: 00 3a 00 00
[    1.281039] sd 2:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
[    1.359585]  sda: sda1 sda2 < sda5 sda6 sda7 sda8 >
[    1.360052] sd 2:0:0:0: [sda] Attached SCSI disk
[    2.347887] EXT4-fs (sda1): mounted filesystem with ordered data mode. Opts: (null)
[   22.928440] Adding 3905532k swap on /dev/sda6.  Priority:-1 extents:1 across:3905532k FS
[   23.950543] EXT4-fs (sda1): re-mounted. Opts: errors=remount-ro
[   24.134016] EXT4-fs (sda5): mounted filesystem with ordered data mode. Opts: (null)
[   24.330762] EXT4-fs (sda7): mounted filesystem with ordered data mode. Opts: (null)
[   24.561015] EXT4-fs (sda8): mounted filesystem with ordered data mode. Opts: (null)

REMARQUE : Le premier disque dur SATA « sda », « sdb » est le deuxième disque dur SATA et ainsi de suite. Recherchez avec « hda » ou « hdb » dans le cas d’un disque dur IDE.

3. Imprimez uniquement les 20 premières lignes de sortie

La « tête » avec dmesg affichera les lignes de départ, c'est-à-dire « dmesg | head -20’ n’imprimera que 20 lignes à partir du point de départ.

[[email  ~]# dmesg | head  -20

[    0.000000] Initializing cgroup subsys cpuset
[    0.000000] Initializing cgroup subsys cpu
[    0.000000] Initializing cgroup subsys cpuacct
[    0.000000] Linux version 3.11.0-13-generic (buildd@aatxe) (gcc version 4.8.1 (Ubuntu/Linaro 4.8.1-10ubuntu8) ) #20-Ubuntu SMP Wed Oct 23 17:26:33 UTC 2013 (Ubuntu 3.11.0-13.20-generic 3.11.6)
[    0.000000] KERNEL supported cpus:
[    0.000000]   Intel GenuineIntel
[    0.000000]   AMD AuthenticAMD
[    0.000000]   NSC Geode by NSC
[    0.000000]   Cyrix CyrixInstead
[    0.000000]   Centaur CentaurHauls
[    0.000000]   Transmeta GenuineTMx86
[    0.000000]   Transmeta TransmetaCPU
[    0.000000]   UMC UMC UMC UMC
[    0.000000] e820: BIOS-provided physical RAM map:
[    0.000000] BIOS-e820: [mem 0x0000000000000000-0x000000000009fbff] usable
[    0.000000] BIOS-e820: [mem 0x00000000000f0000-0x00000000000fffff] reserved
[    0.000000] BIOS-e820: [mem 0x0000000000100000-0x000000007dc08bff] usable
[    0.000000] BIOS-e820: [mem 0x000000007dc08c00-0x000000007dc5cbff] ACPI NVS
[    0.000000] BIOS-e820: [mem 0x000000007dc5cc00-0x000000007dc5ebff] ACPI data
[    0.000000] BIOS-e820: [mem 0x000000007dc5ec00-0x000000007fffffff] reserved

4. Imprimez uniquement les 20 dernières lignes de sortie

La commande 'tail' et dmesg n'imprimeront que les 20 dernières lignes, ce qui est utile si nous insérons un périphérique amovible.

[[email  ~]# dmesg | tail -20

parport0: PC-style at 0x378, irq 7 [PCSPP,TRISTATE]
ppdev: user-space parallel port driver
EXT4-fs (sda1): mounted filesystem with ordered data mode
Adding 2097144k swap on /dev/sda2.  Priority:-1 extents:1 across:2097144k
readahead-disable-service: delaying service auditd
ip_tables: (C) 2000-2006 Netfilter Core Team
nf_conntrack version 0.5.0 (16384 buckets, 65536 max)
NET: Registered protocol family 10
lo: Disabled Privacy Extensions
e1000: eth0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: None
Slow work thread pool: Starting up
Slow work thread pool: Ready
FS-Cache: Loaded
CacheFiles: Loaded
CacheFiles: Security denies permission to nominate security context: error -95
eth0: no IPv6 routers present
type=1305 audit(1398268784.593:18630): audit_enabled=0 old=1 auid=4294967295 ses=4294967295 res=1
readahead-collector: starting delayed service auditd
readahead-collector: sorting
readahead-collector: finished

5. Rechercher un périphérique détecté ou une chaîne particulière

Il est difficile de rechercher une chaîne particulière en raison de la longueur de la sortie dmesg. Alors, filtrez les lignes avec une chaîne comme 'usb' 'dma' 'tty' et 'memory ' etc. L'option '-i' demande à la commande grep d'ignorer la casse (lettres majuscules ou minuscules).

[[email  log]# dmesg | grep -i usb
[[email  log]# dmesg | grep -i dma
[[email  log]# dmesg | grep -i tty
[[email  log]# dmesg | grep -i memory
Exemple de sortie
[    0.000000] Scanning 1 areas for low memory corruption
[    0.000000] initial memory mapped: [mem 0x00000000-0x01ffffff]
[    0.000000] Base memory trampoline at [c009b000] 9b000 size 16384
[    0.000000] init_memory_mapping: [mem 0x00000000-0x000fffff]
[    0.000000] init_memory_mapping: [mem 0x37800000-0x379fffff]
[    0.000000] init_memory_mapping: [mem 0x34000000-0x377fffff]
[    0.000000] init_memory_mapping: [mem 0x00100000-0x33ffffff]
[    0.000000] init_memory_mapping: [mem 0x37a00000-0x37bfdfff]
[    0.000000] Early memory node ranges
[    0.000000] PM: Registered nosave memory: [mem 0x0009f000-0x000effff]
[    0.000000] PM: Registered nosave memory: [mem 0x000f0000-0x000fffff]
[    0.000000] please try 'cgroup_disable=memory' option if you don't want memory cgroups
[    0.000000] Memory: 2003288K/2059928K available (6352K kernel code, 607K rwdata, 2640K rodata, 880K init, 908K bss, 56640K reserved, 1146920K highmem)
[    0.000000] virtual kernel memory layout:
[    0.004291] Initializing cgroup subsys memory
[    0.004609] Freeing SMP alternatives memory: 28K (c1a3e000 - c1a45000)
[    0.899622] Freeing initrd memory: 23616K (f51d0000 - f68e0000)
[    0.899813] Scanning for low memory corruption every 60 seconds
[    0.946323] agpgart-intel 0000:00:00.0: detected 32768K stolen memory
[    1.360318] Freeing unused kernel memory: 880K (c1962000 - c1a3e000)
[    1.429066] [drm] Memory usable by graphics device = 2048M

6. Effacer les journaux de tampon dmesg

Oui, nous pouvons effacer les journaux dmesg si nécessaire avec la commande ci-dessous. Il effacera les journaux de messages du tampon en anneau dmesg jusqu'à ce que vous exécutiez la commande ci-dessous. Vous pouvez néanmoins afficher les journaux stockés dans les fichiers « /var/log/dmesg ». Si vous connectez un appareil, une sortie dmesg sera générée.

[[email  log]# dmesg -c

7. Surveillance de dmesg en temps réel

Certaines distributions autorisent également la commande « tail -f /var/log/dmesg » pour la surveillance dmesg en temps réel.

[[email  log]# watch "dmesg | tail -20"

Conclusion : La commande dmesg est utile car dmesg enregistre toutes les modifications du système effectuées ou se produisent en temps réel. Comme toujours, vous pouvez mander dmesg pour obtenir plus d'informations.