Comment utiliser la commande dmesg sous Linux

La commande dmesg vous permet de scruter le monde caché des processus de démarrage Linux. Passez en revue et surveillez les messages du périphérique matériel et du pilote à partir du tampon en anneau du noyau avec «l’ami du chercheur de pannes».

Comment fonctionne le tampon en anneau de Linux

Dans les ordinateurs de type Linux et Unix, le démarrage et le démarrage sont deux phases distinctes de la séquence d’événements qui se produisent lorsque l’ordinateur est mis sous tension.

Les processus de démarrage (BIOS ou UEFI, MBR, et VER) amène l’initialisation du système au point où le noyau est chargé en mémoire et connecté au disque virtuel initial (initrd ou initramfs), et systemd a démarré.

Les processus de démarrage prennent alors le relais et achèvent l’initialisation du système d’exploitation. Au tout début de l’initialisation, les démons de journalisation tels que syslogd ou rsyslogd ne sont pas encore opérationnels. Pour éviter de perdre les messages d’erreur et les avertissements notables de cette phase d’initialisation, le noyau contient un tampon en anneau qu’il utilise comme banque de messages.

Un tampon en anneau est un espace mémoire réservé aux messages. Il est de conception simple et de taille fixe. Lorsqu’il est plein, les messages les plus récents écrasent les messages les plus anciens. Conceptuellement, il peut être considéré comme un « tampon circulaire. »

Le tampon en anneau du noyau stocke des informations telles que les messages d’initialisation des pilotes de périphériques, les messages du matériel et les messages des modules du noyau. Comme il contient ces messages de démarrage de bas niveau, la mémoire tampon en anneau est un bon endroit pour démarrer une enquête sur les erreurs matérielles ou d’autres problèmes de démarrage.

Mais ne partez pas les mains vides. Emmenez dmesg avec vous.

La commande dmesg

La commande dmesg vous permet pour consulter les messages stockés dans la mémoire tampon en anneau. Par défaut, vous devez utiliser sudo pour utiliser dmesg.

sudo dmesg

sudo dmesg dans une fenêtre de terminal

Tous les messages de la mémoire circulaire sont affichés dans la fenêtre du terminal.

Sortie de sudo dmesg dans une fenêtre de terminal

C’était un déluge. De toute évidence, ce que nous devons faire est de le réduire:

sudo dmesg | less

sudo dmesg | moins dans une fenêtre de terminal

Nous pouvons maintenant faire défiler les messages à la recherche d’éléments d’intérêt.

  Comment modifier la date de création d'un fichier sous Windows 10

sortie dmesg en moins dans une fenêtre de terminal

Vous pouvez utiliser la fonction de recherche dans less pour localiser et mettre en évidence les éléments et les termes qui vous intéressent. Démarrez la fonction de recherche en appuyant sur la touche barre oblique «/» dans less.

Suppression du besoin de sudo

Si vous voulez éviter d’avoir à utiliser sudo à chaque fois que vous utilisez dmesg, vous pouvez utiliser cette commande. Mais attention: il permet à toute personne disposant d’un compte utilisateur sur votre ordinateur d’utiliser dmesg sans avoir à utiliser sudo.

sudo sysctl -w kernel.dmesg_restrict=0

sudo sysctl -w kernel.dmesg_restrict = 0 dans une fenêtre de terminal

Forcer la sortie couleur

Par défaut, dmesg sera probablement configuré pour produire une sortie colorée. Si ce n’est pas le cas, vous pouvez demander à dmesg de coloriser sa sortie en utilisant l’option -L (couleur).

sudo dmesg -L

sudo dmesg -L dans une fenêtre de terminal

Pour forcer dmesg à toujours utiliser par défaut un affichage colorisé, utilisez cette commande:

sudo dmesg --color=always

sudo dmesg --color = toujours dans une fenêtre de terminal

Horodatages humains

Par défaut, dmesg utilise une notation d’horodatage de secondes et nanosecondes depuis le démarrage du noyau. Pour que cela soit rendu dans un format plus convivial, utilisez l’option -H (human).

sudo dmesg -H

sudo dmesg -H dans une fenêtre de terminal

Cela provoque deux choses.

sortie de sudo dmesg -H dans une fenêtre de terminal

La sortie est automatiquement affichée en moins.
Les horodatages affichent un horodatage avec la date et l’heure, avec une résolution minute. Les messages qui se sont produits chaque minute sont étiquetés avec les secondes et nanosecondes à partir du début de cette minute.

Horodatages lisibles par l’homme

Si vous n’avez pas besoin d’une précision à la nanoseconde, mais que vous voulez des horodatages plus faciles à lire que les valeurs par défaut, utilisez l’option -T (lisible par l’homme). (C’est un peu déroutant. -H est l’option «humaine», -T est l’option «lisible par l’homme».)

sudo dmesg -T

sudo dmesg -T dans une fenêtre de terminal

Les horodatages sont rendus sous forme de dates et d’heures standard, mais la résolution est réduite à une minute.

sortie de sudo dmesg -T dans une fenêtre de terminal

Tout ce qui s’est passé en une seule minute a le même horodatage. Si vous ne vous souciez que de la séquence des événements, cela suffit. Notez également que vous êtes renvoyé à l’invite de commande. Cette option n’appelle pas automatiquement less.

Regarder des événements en direct

Pour voir les messages à mesure qu’ils arrivent dans le tampon en anneau du noyau, utilisez l’option –follow (attendez les messages). Cette phrase peut sembler un peu étrange. Si la mémoire tampon en anneau est utilisée pour stocker les messages d’événements qui ont lieu pendant la séquence de démarrage, comment les messages en direct peuvent-ils arriver dans la mémoire tampon en anneau une fois que l’ordinateur est opérationnel?

Tout ce qui provoque une modification du matériel connecté à votre ordinateur entraînera l’envoi de messages au tampon en anneau du noyau. Mettez à jour ou ajoutez un module de noyau, et vous verrez des messages de tampon en anneau sur ces changements. Si vous branchez une clé USB ou connectez ou déconnectez un périphérique Bluetooth, vous verrez des messages dans la sortie dmesg. Même le matériel virtuel provoquera l’apparition de nouveaux messages dans la mémoire tampon en anneau. Lancez une machine virtuelle et vous verrez de nouvelles informations arriver dans le tampon en anneau.

sudo dmesg --follow

sudo dmesg --suivre dans une fenêtre de terminal

Notez que vous n’êtes pas renvoyé à l’invite de commande. Lorsque de nouveaux messages apparaissent, ils sont affichés par dmesg en bas de la fenêtre du terminal.

  Comment créer un masque des diapositives dans Microsoft PowerPoint

Sortie de sudo dmesg --Follow na terminal window

Même le montage d’un CD-ROM est considéré comme un changement, car vous avez greffé le contenu du CD-ROM sur l’arborescence des répertoires.

messages de tampon en anneau dmesg à la suite du montage d'un disque CD-ROM

Pour quitter le flux en temps réel, appuyez sur Ctrl + C.

Récupérer les dix derniers messages

Utilisez la commande tail pour récupérer les dix derniers messages de tampon en anneau du noyau. Bien sûr, vous pouvez récupérer n’importe quel nombre de messages. Dix n’est que notre exemple.

sudo dmesg | last -10

sudo dmesg | dernier -10 dans une fenêtre de terminal

Les dix derniers messages sont récupérés et répertoriés dans la fenêtre du terminal.

Sortie de sudo dmsesg | tail -10 dans une fenêtre de terminal

Recherche de termes spécifiques

Transférer la sortie de dmesg via grep pour rechercher des chaînes ou des modèles particuliers. Ici, nous utilisons l’option -i (ignorer la casse) afin que le cas des chaînes correspondantes soit ignoré. nos résultats incluront «usb» et «USB» et toute autre combinaison de minuscules et de majuscules.

sudo dmesg | grep -i usb

sudo dmesg | grep -i usb dans une fenêtre de terminal

Les résultats de la recherche en surbrillance sont en majuscules et en minuscules.

Résultats de la recherche affichant les résultats en majuscules et minuscules dans une fenêtre de terminal

On peut isoler les messages qui contiennent des références au premier SCSI disque dur sur le système sda. (En fait, sda est également utilisé de nos jours pour le premier disque dur SATAet pour les clés USB.)

sudo dmesg | grep -i sda

sudo dmesg | grep -i sda dans une fenêtre de terminal

Tous les messages qui mentionnent sda sont récupérés et répertoriés dans la fenêtre du terminal.

sortie de sudo dmesg | grep -i sda dans une fenêtre de terminal

Pour que grep recherche plusieurs termes à la fois, utilisez l’option -E (extension de l’expression régulière). Vous devez fournir les termes de recherche dans une chaîne entre guillemets avec le tube « | » délimiteurs entre les termes de recherche:

sudo dmesg | grep -E "memory|tty|dma"

sudo dmesg | grep -E

Tout message qui mentionne l’un des termes de recherche est répertorié dans la fenêtre du terminal.

sortie de sudo dmesg | grep -E

Utilisation des niveaux de journal

Chaque message enregistré dans le tampon en anneau du noyau est associé à un niveau. Le niveau représente l’importance de l’information dans le message. Les niveaux sont:

émerg: le système est inutilisable.
alerte: des mesures doivent être prises immédiatement.
crit: conditions critiques.
err: conditions d’erreur.
avertir: conditions d’avertissement.
remarque: état normal mais significatif.
info: informationnel.
debug: messages au niveau du débogage.

  Quand les écouteurs et les écouteurs peuvent-ils endommager votre audition?

Nous pouvons faire en sorte que dmesg extrait les messages qui correspondent à un niveau particulier en utilisant l’option -l (niveau) et en passant le nom du niveau comme paramètre de ligne de commande. Pour afficher uniquement les messages de niveau «informationnel», utilisez cette commande:

sudo dmesg -l info

sudo dmesg -l info dans une fenêtre de terminal

Tous les messages répertoriés sont des messages d’information. Ils ne contiennent ni erreurs ni avertissements, juste des notifications utiles.

Sortie de sudo dmesg -l info dans une fenêtre de terminal

Combinez deux ou plusieurs niveaux de journalisation en une seule commande pour récupérer les messages de plusieurs niveaux de journalisation:

sudo dmesg -l debug,notice

sudo dmesg -l debug, remarque dans une fenêtre de terminal

La sortie de dmesg est un mélange de messages de chaque niveau de journal:

Sortie de sudo dmesg -l debug, remarque dans une fenêtre de terminal

Les catégories d’installations

Les messages dmesg sont regroupés en catégories appelées «fonctionnalités». La liste des installations est:

kern: messages du noyau.
utilisateur: messages de niveau utilisateur.
mail: système de messagerie.
démon: démons système.
auth: messages de sécurité / d’autorisation.
syslog: messages syslogd internes.
lpr: sous-système d’imprimante en ligne.
news: sous-système de nouvelles du réseau.

Nous pouvons demander à dmesg de filtrer sa sortie pour n’afficher que les messages dans une installation spécifique. Pour ce faire, nous devons utiliser l’option -f (facilité):

sudo dmesg -f daemon

démon sudo dmesg -f dans une fenêtre de terminal

dmesg liste tous les messages relatifs aux démons dans la fenêtre du terminal.

sortie du démon sudo dmesg -f dans une fenêtre de terminal

Comme nous l’avons fait avec les niveaux, nous pouvons demander à dmesg de lister les messages de plusieurs installations à la fois:

sudo dmesg -f syslog, daemon

sudo dmesg -f syslog, démon dans une fenêtre de terminal

Le résultat est un mélange de messages de journal syslog et démon.

sortie de sudo dmesg -f syslog, démon dans une fenêtre de terminal

Combiner facilité et niveau

L’option -x (decode) permet à dmesg d’afficher la fonction et le niveau sous forme de préfixes lisibles par l’homme pour chaque ligne.

sudo dmesg -x

sudo dmesg -x dans une fenêtre de terminal

L’installation et le niveau sont visibles au début de chaque ligne:

Sortie de sudo dmesg -x dans une fenêtre de terminal

La première section en surbrillance est un message de la fonction «noyau» avec un niveau de «notification». La deuxième section en surbrillance est un message de la fonction «noyau» avec un niveau «info».

C’est génial, mais pourquoi?

En un mot, recherche de pannes.

Si vous rencontrez des problèmes avec un matériel non reconnu ou ne se comportant pas correctement, dmesg peut éclairer le problème.

Utilisez dmesg pour passer en revue les messages du niveau le plus élevé à chaque niveau inférieur, à la recherche d’erreurs ou d’avertissements qui mentionnent l’élément matériel ou qui peuvent avoir une incidence sur le problème.
Utilisez dmesg pour rechercher toute mention de la fonction appropriée pour voir si elles contiennent des informations utiles.
Dirigez dmesg via grep et recherchez les chaînes ou identifiants associés tels que le fabricant du produit ou les numéros de modèle.
Faites passer dmesg par grep et recherchez des termes génériques comme «gpu» ou «stockage», ou des termes tels que «échec», «échoué» ou «impossible».
Utilisez l’option –follow et regardez les messages dmesg en temps réel.

Bonne chasse.