GNU/Linux >> Tutoriels Linux >  >> Linux

Commande Linux dmesg - Imprimer le tampon en anneau du noyau

Commande Dmesg imprime le tampon de messages du noyau. La commande Dmesg est principalement utilisée pour identifier les périphériques défaillants, les périphériques branchés à chaud tels que les erreurs USB et les périphériques d'E/S.

Lorsque le système démarre les pilotes de périphériques présents dans la configuration du noyau avec les périphériques matériels pertinents. À ce moment-là, les pilotes et autres éléments avec le noyau produisent des messages. Ces messages sont stockés dans un petit espace tampon et écrasé chacun lorsque de nouveaux messages arrivent. La plupart des distributions Linux stockent ces messages dans /var/log/dmesg. Dmesg lit directement depuis le tampon circulaire du noyau, pas depuis /var/log/dmesg. Syslog par défaut (selon les distributions Linux) ou configuré pour capturer les messages.

Magasins Dmesg messages du noyau pendant le démarrage et après le démarrage. Après le démarrage, le noyau produit parfois des messages en cas d'erreurs io, de périphériques branchés, etc. Ces messages sont également envoyés à la console système. La sortie Dmesg est souvent volumineuse et peut être filtrée à l'aide des commandes more, tail ou grep.

Comment utiliser la commande dmesg

La commande Dmesg imprime par défaut le nombre N de messages à partir du tampon circulaire du noyau.

$ dmesg

Exemple de sortie :

[    1.230638] kernel: Run /init as init process
 [    1.336492] kernel: scsi host0: Virtio SCSI HBA
 [    1.338612] kernel: scsi 0:0:0:0: Direct-Access     QEMU     QEMU HARDDISK    2.5+ PQ: 0 ANSI: 5
 [    1.338727] kernel: input: VirtualPS/2 VMware VMMouse as /devices/platform/i8042/serio1/input/input4
 [    1.342266] kernel: input: VirtualPS/2 VMware VMMouse as /devices/platform/i8042/serio1/input/input3
 [    1.345242] kernel: lpc_ich 0000:00:1f.0: I/O space for GPIO uninitialized
 [    1.346920] kernel: ahci 0000:00:1f.2: version 3.0
 [    1.350864] kernel: scsi host1: Virtio SCSI HBA
 [    1.358377] kernel: scsi host2: Virtio SCSI HBA
 [    1.359317] kernel: PCI Interrupt Link [GSIA] enabled at IRQ 16
 [    1.359718] kernel: scsi 1:0:1:2: Direct-Access     QEMU     QEMU HARDDISK    2.5+ PQ: 0 ANSI: 5
 [    1.361478] kernel: ahci 0000:00:1f.2: AHCI 0001.0000 32 slots 6 ports 1.5 Gbps 0x3f impl SATA mode
 [    1.363039] kernel: i801_smbus 0000:00:1f.3: SMBus using PCI interrupt

La sortie de Dmesg est principalement divisée en 3 parties :

  • Heure : Vous montrer le nombre de secondes à partir du moment du démarrage. Si vous trouvez 20.091730. Cela signifie que le message est créé 20 secondes après le démarrage.
  • Nom_appareil : Afficher le nom de l'appareil
  • Message : Le vrai message. À partir de là, nous pouvons analyser ce qui s'est passé.

1) Comment lire dmesg

La commande Dmesg sans aucune option produit une grande sortie. Pour faciliter la lecture, utilisez la commande grep ou less pour filtrer la sortie. Vérifions quelques exemples.

Imprimer la sortie dmesg par page

$ dmesg | less

Exemple de sortie :

[ 0.000000] Initializing cgroup subsys cpuset
[ 0.000000] Initializing cgroup subsys cpu
[ 0.000000] Linux version 3.8.0-31-generic (buildd@aatxe) (gcc version 4.7.3 (Ubuntu/Linaro 4.7.3-1ubuntu1) ) #46-Ubuntu SMP Tue Sep 10 19:56:49 UTC 2013 (Ubuntu 3.8.0-31.46-generic 3.8.13.8)
[ 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

Imprimer les informations relatives à eth

$ dmesg | grep eth

Exemple de sortie :

[ 1.972418] e1000 0000:00:03.0 eth0: (PCI:33MHz:32-bit) 08:00:27:d2:c1:16
[ 1.972430] e1000 0000:00:03.0 eth0: Intel(R) PRO/1000 Network Connection
[ 18.867656] IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready
[ 21.733138] e1000: eth0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX
[ 21.737967] IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready
[ 21.738052] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready

Imprimer les informations relatives à l'USB

$ dmesg | grep usb

Exemple de sortie :

[ 0.131874] ACPI: bus type usb registered
[ 0.131910] usbcore: registered new interface driver usbfs
[ 0.131921] usbcore: registered new interface driver hub
[ 0.131955] usbcore: registered new device driver usb
[ 1.091722] usb usb1: New USB device found, idVendor=1d6b, idProduct=0001
[ 1.091727] usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[ 1.091730] usb usb1: Product: OHCI Host Controller
[ 1.091731] usb usb1: Manufacturer: Linux 3.8.0-31-generic ohci_hcd
[ 1.091733] usb usb1: SerialNumber: 0000:00:06.0

Veuillez noter que la commande grep est sensible à la casse . c'est-à-dire à partir de l'exemple ci-dessus "usb" et "USB" donnent des résultats différents. Pour ignorer la fonctionnalité sensible à la casse, utilisez le paramètre -i après la commande grep . Comparez cette sortie de commande avec le cas USB ci-dessus.

$ dmesg | grep -i usb

Exemple de sortie :

[ 0.131874] ACPI: bus type usb registered
[ 0.131910] usbcore: registered new interface driver usbfs
[ 0.131921] usbcore: registered new interface driver hub
[ 0.131955] usbcore: registered new device driver usb
[ 0.997759] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
[ 0.997783] ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver
[ 0.997929] ohci_hcd 0000:00:06.0: new USB bus registered, assigned bus number 1
[ 1.091722] usb usb1: New USB device found, idVendor=1d6b, idProduct=0001
[ 1.091727] usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[ 1.091730] usb usb1: Product: OHCI Host Controller
[ 1.091731] usb usb1: Manufacturer: Linux 3.8.0-31-generic ohci_hcd
[ 1.091733] usb usb1: SerialNumber: 0000:00:06.0
[ 1.091856] hub 1-0:1.0: USB hub found
[ 1.093110] uhci_hcd: USB Universal Host Controller Interface driver

Afficher la sortie souhaitée à l'aide de head/tail

Par exemple, vous avez inséré un périphérique amovible ou apporté des modifications à des volumes de disque. Pour vérifier les dernières entrées de dmesg en utilisant la tail commande.

Pour afficher les N dernières lignes du log dmesg :

$ dmesg | tail -15

De même, pour trouver les premières lignes du journal dmesg, utilisez la commande head. Cela sera utile pour trouver les changements qui se sont produits juste après le démarrage.

$ dmesg | head -15

Suivi en temps réel

Pour une surveillance continue en temps réel, utilisez l'option -f .

$ tail -f /var/log/dmesg

Alternative, utilisez watch dmesg :

$ watch "dmesg | tail -15"

Certains systèmes Linux prennent en charge l'utilisation de dmesg -w, qui attend les nouveaux messages.

2) Imprimer dans un format lisible par l'homme

Pour imprimer la sortie dmesg dans un format lisible par l'homme, utilisez l'option -H.

$ dmesg -H

3) Convertir l'horodatage au format de date personnalisé

Par défaut, l'horodatage de la sortie dmesg n'est pas lisible par l'homme. Pour modifier l'horodatage au format de date personnalisé, utilisez l'option - -ctime ou -T.

$ dmesg  --ctime

Exemple de sortie :

[Tue Dec 10 16:34:33 2013] 131MB HIGHMEM available.
[Tue Dec 10 16:34:33 2013] 891MB LOWMEM available.
[Tue Dec 10 16:34:33 2013] mapped low ram: 0 - 37bfe000
[Tue Dec 10 16:34:33 2013] low ram: 0 - 37bfe000
[Tue Dec 10 16:34:33 2013] Zone ranges:
[Tue Dec 10 16:34:33 2013] DMA [mem 0x00010000-0x00ffffff]
[Tue Dec 10 16:34:33 2013] Normal [mem 0x01000000-0x37bfdfff]
[Tue Dec 10 16:34:33 2013] HighMem [mem 0x37bfe000-0x3ffeffff]
[Tue Dec 10 16:34:33 2013] Movable zone start for each node
[Tue Dec 10 16:34:33 2013] Early memory node ranges
[Tue Dec 10 16:34:33 2013] node 0: [mem 0x00010000-0x0009efff]
[Tue Dec 10 16:34:33 2013] node 0: [mem 0x00100000-0x3ffeffff

Vous pouvez également utiliser --time-format pour imprimer les horodatages en utilisant le format donné, qui peut être ctime, reltime, delta ou iso.

Si l'horodatage n'est pas activé alors la commande dmesg peut ne pas afficher l'horodatage dans la sortie.

Pour vérifier que les horodatages sont activés ou non, ouvrez le fichier /sys/module/printk/parameters/time :

$ cat /sys/module/printk/parameters/time
N

Si le contenu du fichier est N, l'horodatage n'est pas activé. Vous pouvez exécuter la commande suivante pour activer l'horodatage :

$ echo Y > /sys/module/printk/parameters/time

4) Effacer dmesg

Pour effacer les messages du tampon circulaire du noyau, utilisez l'option -C.

$ dmesg -C

Pour effacer le tampon circulaire après avoir imprimé son contenu, utilisez l'option -c.

$ dmesg -c

Même si vous effacez dmesg à l'aide des paramètres -c ou -C, vous pouvez toujours afficher les journaux dans /var/log/kern.log ou /var/log/dmesg.

5) Empêcher Dmesg de se connecter à la console

Pour désactiver l'impression des messages sur la console, utilisez l'option -D.

$ dmesg -D

Une autre option consiste à utiliser -n 1 pour empêcher tous les messages, à l'exception des messages d'urgence (panique), d'apparaître sur la console.

Pour activer l'impression de messages sur la console, utilisez -E.

$ dmesg -E

6) Afficher les messages spécifiques à l'établissement

Pour imprimer les messages d'une catégorie ou d'un établissement spécifique. Pour remplir cet objectif, utilisez l'option --facility.

À partir de l'exemple pour imprimer un message spécifique au courrier, tapez :

$ dmesg --facility=daemon

Installations de journalisation prises en charge sont :

kern - messages du noyau
utilisateur - messages aléatoires au niveau de l'utilisateur
courrier - système de messagerie
démon - démons système
auth - messages de sécurité/autorisation
syslog - messages générés en interne par syslogd
lpr - sous-système d'imprimante en ligne
actualités - sous-système d'actualités du réseau

7) Imprimer le niveau du journal

Pour imprimer des messages spécifiques au niveau de journalisation, utilisez l'option --level. Par exemple, pour imprimer tous les messages d'avertissement, exécutez la commande suivante :

$ dmesg --level=warn

Exemple de sortie :

[ 0.000000] tsc: Fast TSC calibration failed
[ 19.595760] piix4_smbus 0000:00:07.0: SMBus base address uninitialized - upgrade BIOS or use force_addr=0xaddr

Niveaux de journalisation pris en charge sont :

urgence - le système est inutilisable
alerte - des mesures doivent être prises immédiatement
crit - conditions critiques
err - conditions d'erreur
avertir - conditions d'avertissement
avis - état normal mais significatif
info - informatif
debug - messages de niveau de débogage

8) Installation et niveau d'affichage lisibles par l'homme

Pour imprimer le niveau de l'installation et du journal dans un format lisible par l'homme, utilisez l'option -x.

$ dmesg -x

Exemple de sortie :

kern :debug : [ 0.000000] e820: remove [mem 0x000a0000-0x000fffff] usable
kern :info : [ 0.000000] e820: last_pfn = 0x3fff0 max_arch_pfn = 0x1000000
kern :debug : [ 0.000000] MTRR default type: uncachable
kern :debug : [ 0.000000] MTRR variable ranges disabled:
kern :info : [ 0.000000] x86 PAT enabled: cpu 0, old 0x7040600070406, new 0x7010600070106
kern :info : [ 0.000000] CPU MTRRs all blank - virtualized system.

9) Afficher le message du noyau

Pour imprimer des messages spécifiques au noyau, utilisez l'option -k.

$ dmesg -k

10) Ignorer l'horodatage

Si vous ne voulez pas imprimer l'horodatage du noyau, utilisez l'option -t.

$ dmesg -t

Conclusion

Dmesg peut être très utile pour diagnostiquer les problèmes liés au système. Dans ce tutoriel, nous avons appris à utiliser la commande dmesg sous Linux.


Linux
  1. Commande Linux mv

  2. Linux du command

  3. Commande IP Linux

  4. Commande cd Linux

  5. Exemples de commandes awk sous Linux

Commande Modprobe sous Linux

Commande Sysctl sous Linux

Tutoriel de commande Linux dmesg pour les débutants (5 exemples)

Commande Linux id - Imprimer les informations d'ID utilisateur et d'ID de groupe

Commande sysctl sous Linux

3 façons de vérifier la version du noyau Linux en ligne de commande