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