Hoe de dmesg-opdracht op Linux te gebruiken

Een gestileerde terminalprompt op een Linux-laptop.
Fatmawati Achmad Zaenuri / Shutterstock

De dmesg commando laat je een kijkje nemen in de verborgen wereld van de Linux-opstartprocessen. Bekijk en controleer berichten van hardwareapparaten en stuurprogramma’s vanuit de eigen ringbuffer van de kernel met “de vriend van de foutzoeker”.

Hoe de Ring Buffer van Linux werkt

Op Linux en Unix-achtige computers zijn opstarten en opstarten twee verschillende fasen van de reeks gebeurtenissen die plaatsvinden wanneer de computer wordt ingeschakeld.

De opstartprocessen (BIOS of UEFI, MBR en GRUB) brengen de initialisatie van het systeem tot het punt waarop de kernel in het geheugen wordt geladen en verbonden met de initiële ramdisk (initrd of initramfs), en systemd wordt gestart.

De opstartprocessen neem vervolgens het stokje over en voltooi de initialisatie van het besturingssysteem. In de zeer vroege stadia van initialisatie zijn logging-daemons zoals syslogd of rsyslogd nog niet actief. Om te voorkomen dat opmerkelijke foutmeldingen en waarschuwingen tijdens deze fase van initialisatie verloren gaan, bevat de kernel een ringbuffer die wordt gebruikt als opslag voor berichten.

Een ringbuffer is een geheugenruimte die is gereserveerd voor berichten. Het is eenvoudig van ontwerp en heeft een vaste grootte. Als het vol is, overschrijven nieuwere berichten de oudste berichten. Conceptueel kan het worden gezien als een ‘circulaire buffer’.

De kernelringbuffer slaat informatie op zoals de initialisatieberichten van apparaatstuurprogramma’s, berichten van hardware en berichten van kernelmodules. Omdat het deze opstartberichten op laag niveau bevat, is de ringbuffer een goede plek om een ​​onderzoek te starten naar hardwarefouten of andere opstartproblemen.

Maar ga niet met lege handen. Nemen dmesg met jou.

Het dmesg-commando

De dmesg commando stelt u in staat de berichten te bekijken die zijn opgeslagen in de ringbuffer. Standaard moet u sudo gebruiken dmesg.

sudo dmesg

sudo dmesg in een terminalvenster

Alle berichten in de ringbuffer worden weergegeven in het terminalvenster.

Uitvoer van sudo dmesg in een terminalvenster

Dat was een zondvloed. Wat we natuurlijk moeten doen, is het erdoorheen leiden less:

sudo dmesg | less

sudo dmesg |  minder in een terminalvenster

Nu kunnen we door de berichten bladeren op zoek naar interessante items.

dmesg-uitvoer in less in een terminalvenster

U kunt de zoekfunctie binnen gebruiken less om items en termen waarin u geïnteresseerd bent te vinden en te markeren. Start de zoekfunctie door op de schuine streep “/” in te drukken less.

VERWANT: Hoe u de minder opdracht op Linux gebruikt

De noodzaak voor sudo

Als u wilt voorkomen dat u sudo elke keer dat u gebruikt dmesg, kunt u deze opdracht gebruiken. Maar let op: iedereen met een gebruikersaccount kan uw computer gebruiken dmesg zonder te hoeven gebruiken sudo.

sudo sysctl -w kernel.dmesg_restrict=0

sudo sysctl -w kernel.dmesg_restrict = 0 in een terminalvenster

Kleuruitvoer forceren

Standaard, dmesg zal waarschijnlijk worden geconfigureerd om gekleurde uitvoer te produceren. Als dat niet het geval is, kunt u het zien dmesg om de uitvoer in te kleuren met de -L (kleur) optie.

sudo dmesg -L

sudo dmesg -L in een terminalvenster

Te dwingen dmesg gebruik deze opdracht om altijd standaard een gekleurde weergave te gebruiken:

sudo dmesg --color=always

sudo dmesg --color = altijd in een terminalvenster

Menselijke tijdstempels

Standaard, dmesg gebruik een tijdstempelnotatie van seconden en nanoseconden sinds de kernel is gestart. Om dit weer te geven in een meer mensvriendelijk formaat, gebruikt u de -H (menselijke) optie.

sudo dmesg -H

sudo dmesg -H in een terminalvenster

Hierdoor gebeuren er twee dingen.

uitvoer van sudo dmesg -H in een terminalvenster

  • De output wordt automatisch weergegeven in less.
  • De tijdstempels tonen een tijdstempel met de datum en tijd, met een minuutresolutie. De berichten die in elke minuut voorkwamen, zijn gelabeld met de seconden en nanoseconden vanaf het begin van die minuut.

Door mensen leesbare tijdstempels

Als u geen nauwkeurigheid op nanoseconde nodig heeft, maar u wilt wel tijdstempels die gemakkelijker te lezen zijn dan de standaardinstellingen, gebruik dan de -T (door mensen leesbare) optie. (Het is een beetje verwarrend. -H is de “menselijke” optie, -T is de optie “leesbaar door mensen”.)

sudo dmesg -T

sudo dmesg -T in een terminalvenster

De tijdstempels worden weergegeven als standaarddatums en -tijden, maar de resolutie wordt verlaagd tot een minuut.

uitvoer van sudo dmesg -T in een terminalvenster

Alles wat er binnen een minuut is gebeurd, heeft hetzelfde tijdstempel. Als u zich alleen maar zorgen maakt over de volgorde van de gebeurtenissen, is dit goed genoeg. Merk ook op dat u terug wordt gedumpt bij de opdrachtprompt. Deze optie wordt niet automatisch aangeroepen less.

Live-evenementen bekijken

Om berichten te zien zodra ze in de kernelringbuffer aankomen, gebruik je de --follow (wacht op berichten) optie. Die zin lijkt misschien een beetje vreemd. Als de ringbuffer wordt gebruikt om berichten op te slaan van gebeurtenissen die plaatsvinden tijdens het opstarten, hoe kunnen live-berichten dan in de ringbuffer aankomen als de computer eenmaal aan de gang is?

Alles wat een wijziging veroorzaakt in de hardware die op uw computer is aangesloten, zorgt ervoor dat berichten naar de kernelringbuffer worden gestuurd. Werk een kernelmodule bij of voeg een kernelmodule toe, en u zult ringbufferberichten over die wijzigingen zien. Als u een USB-station aansluit of een Bluetooth-apparaat aansluit of loskoppelt, ziet u berichten in het dmesg output. Zelfs virtuele hardware zorgt ervoor dat nieuwe berichten in de ringbuffer verschijnen. Start een virtuele machine en je ziet nieuwe informatie aankomen in de ringbuffer.

sudo dmesg --follow

sudo dmesg --follow in een terminalvenster

Merk op dat u niet terugkeert naar de opdrachtprompt. Als er nieuwe berichten verschijnen, worden ze weergegeven door dmesg onderaan het terminalvenster.

Uitvoer van sudo dmesg --follow na terminalvenster

Zelfs het mounten van een cd-rom-schijf wordt als een verandering gezien, omdat u de inhoud van de cd-rom-schijf op de directorystructuur hebt geënt.

dmesg-ringbufferberichten als gevolg van het mounten van een cd-rom-schijf

Om de real-time feed te verlaten, drukt u op Ctrl+C.

Haal de laatste tien berichten op

Gebruik het tail-commando om de laatste tien kernelringbufferberichten op te halen. U kunt natuurlijk een willekeurig aantal berichten opvragen. Tien is slechts ons voorbeeld.

sudo dmesg | last -10

sudo dmesg |  laatste -10 in een terminalvenster

De laatste tien berichten worden opgehaald en weergegeven in het terminalvenster.

Uitvoer van sudo dmsesg |  tail -10 in een terminalvenster

Zoeken naar specifieke termen

Leid de output van dmesg door grep om te zoeken naar bepaalde snaren of patronen. Hier gebruiken we de -i (hoofdlettergebruik negeren) zodat het hoofdlettergebruik van overeenkomende strings wordt genegeerd. onze resultaten omvatten “usb” en “USB” en elke andere combinatie van kleine letters en hoofdletters.

sudo dmesg | grep -i usb

sudo dmesg |  grep -i usb in een terminalvenster

De gemarkeerde zoekresultaten zijn in hoofdletters en kleine letters.

Zoekresultaten met resultaten in hoofdletters en kleine letters in een terminalvenster

We kunnen de berichten isoleren die verwijzingen bevatten naar de eerste SCSI-harde schijf op het systeem sda. (Werkelijk, sda wordt tegenwoordig ook gebruikt voor de eerste SATA-harde schijf en voor USB-drives.)

sudo dmesg | grep -i sda

sudo dmesg |  grep -i sda in een terminalvenster

Alle berichten die vermelden sda worden opgehaald en weergegeven in het terminalvenster.

uitvoer van sudo dmesg |  grep -i sda in een terminalvenster

Maken grep zoek naar meerdere termen tegelijk, gebruik de -E (verleng reguliere expressie) optie. U moet de zoektermen in een tekenreeks tussen aanhalingstekens opgeven met pijp “|” scheidingstekens tussen de zoektermen:

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

sudo dmesg |  grep -E "geheugen | tty | dma" in een terminalvenster

Elk bericht dat een van de zoektermen vermeldt, wordt in het terminalvenster weergegeven.

uitvoer van sudo dmesg |  grep -E "geheugen | tty | dma" in een terminalvenster

Logniveaus gebruiken

Elk bericht dat in de kernelringbuffer wordt gelogd, heeft een niveau eraan. Het niveau vertegenwoordigt het belang van de informatie in het bericht. De niveaus zijn:

  • tevoorschijn komen: Systeem is onbruikbaar.
  • alert: Er moet onmiddellijk actie worden ondernomen.
  • crit: Kritieke omstandigheden.
  • vergist: Foutcondities.
  • waarschuwen: Waarschuwingsvoorwaarden.
  • merk op: Normale maar belangrijke toestand.
  • info: Informatief.
  • debuggen: Berichten op foutopsporingsniveau.

We kunnen maken dmesg extraheer berichten die overeenkomen met een bepaald niveau door de -l (level) optie en het doorgeven van de naam van het niveau als een opdrachtregelparameter. Gebruik deze opdracht om alleen berichten op het niveau van “informatie” te zien:

sudo dmesg -l info

sudo dmesg -l info in een terminalvenster

Alle vermelde berichten zijn informatieve berichten. Ze bevatten geen fouten of waarschuwingen, alleen nuttige meldingen.

Uitvoer van sudo dmesg -l info in een terminalvenster

Combineer twee of meer logboekniveaus in één opdracht om berichten van verschillende logboekniveaus op te halen:

sudo dmesg -l debug,notice

sudo dmesg -l debug, let op in een terminalvenster

De output van dmesg is een mix van berichten van elk logboekniveau:

Uitvoer van sudo dmesg -l debug, let op in een terminalvenster

De faciliteitscategorieën

De dmesg berichten zijn gegroepeerd in categorieën die “faciliteiten” worden genoemd. De lijst met faciliteiten is:

  • kern: Kernel-berichten.
  • gebruiker: Berichten op gebruikersniveau.
  • mail: Mailsysteem.
  • demon: Systeemdaemons.
  • auth: Beveiligings- / autorisatieberichten.
  • syslog: Interne syslogd-berichten.
  • lpr: Lijnprinter-subsysteem.
  • nieuws: Subsysteem netwerknieuws.

We kunnen het vragen dmesg om zijn uitvoer te filteren om alleen berichten in een specifieke faciliteit weer te geven. Om dit te doen, moeten we de -f (faciliteit) optie:

sudo dmesg -f daemon

sudo dmesg -f daemon in een terminalvenster

dmesg geeft een overzicht van alle berichten met betrekking tot daemons in het terminalvenster.

uitvoer van sudo dmesg -f daemon in een terminalvenster

Zoals we deden met de niveaus, kunnen we vragen dmesg om berichten van meer dan één installatie tegelijk weer te geven:

sudo dmesg -f syslog, daemon

sudo dmesg -f syslog, daemon in een terminalvenster

De uitvoer is een mix van syslog- en daemon-logboekberichten.

uitvoer van sudo dmesg -f syslog, daemon in een terminalvenster

Faciliteit en niveau combineren

De -x (decodeer) optie maakt dmesg toon de faciliteit en het niveau als door mensen leesbare voorvoegsels voor elke regel.

sudo dmesg -x

sudo dmesg -x in een terminalvenster

De faciliteit en het niveau zijn te zien aan het begin van elke regel:

Uitvoer van sudo dmesg -x in een terminalvenster

De eerste gemarkeerde sectie is een bericht van de “kernel” -faciliteit met een niveau van “kennisgeving”. De tweede gemarkeerde sectie is een bericht van de “kernel” -faciliteit met een niveau van “info”.

Dat is geweldig, maar waarom?

In een notendop: foutopsporing.

Als u problemen ondervindt met een stuk hardware dat niet wordt herkend of zich niet goed gedraagt, dmesg kan enig licht werpen op de kwestie.

  • Gebruik dmesg om berichten van de hoogste te bekijken niveau door elk lager niveau, op zoek naar fouten of waarschuwingen die het hardware-item vermelden, of die van invloed kunnen zijn op het probleem.
  • Gebruik dmesg om te zoeken naar een vermelding van het juiste faciliteit om te zien of ze nuttige informatie bevatten.
  • Pijp dmesg door grep en zoek naar verwant tekenreeksen of ID’s zoals productfabrikant of modelnummers.
  • Pijp dmesg door grep en zoek naar generieke termen zoals “gpu” of “opslag”, of termen als “mislukt”, “mislukt” of “niet in staat”.
  • Gebruik de --follow optie en kijk dmesg berichten in realtime.

Goede jacht.

Nieuwste artikelen

spot_img

Related Stories

Leave A Reply

Vul alstublieft uw commentaar in!
Vul hier uw naam in