Sådan bruger du dmesg-kommandoen på Linux

Kommandoen dmesg lader dig kigge ind i den skjulte verden af ​​Linux-startprocesserne. Gennemgå og overvåg hardwareenheds- og drivermeddelelser fra kernens egen ringebuffer med “fejlfinderens ven.”

Hvordan Linuxs ringbuffer virker

I Linux- og Unix-lignende computere er opstart og opstart to forskellige faser af sekvensen af ​​begivenheder, der finder sted, når computeren tændes.

Opstartsprocesserne (BIOS eller UEFI, MBR, og GRUB) tag initialiseringen af ​​systemet til det punkt, hvor kernen er indlæst i hukommelsen og forbundet til den oprindelige ramdisk (initrd eller initramfs), og systemd er i gang.

Startprocesserne tager derefter stafetten op og fuldfører initialiseringen af ​​operativsystemet. I de meget tidlige stadier af initialisering, loggede dæmoner som f.eks syslogd eller rsyslogd er endnu ikke oppe at køre. For at undgå at miste bemærkelsesværdige fejlmeddelelser og advarsler fra denne initialiseringsfase, indeholder kernen en ring buffer som den bruger som beskedlager.

En ringebuffer er en hukommelsesplads, der er reserveret til beskeder. Den er enkel i designet og af en fast størrelse. Når den er fuld, overskriver nyere beskeder de ældste beskeder. Konceptuelt kan det opfattes som et “cirkulær buffer.”

Kerneringbufferen gemmer information såsom initialiseringsmeddelelser fra enhedsdrivere, meddelelser fra hardware og meddelelser fra kernemoduler. Fordi den indeholder disse opstartsmeddelelser på lavt niveau, er ringebufferen et godt sted at starte en undersøgelse af hardwarefejl eller andre opstartsproblemer.

Men gå ikke tomhændet. Tag dmesg med dig.

dmesg kommandoen

Kommandoen dmesg giver dig mulighed for for at gennemgå de beskeder, der er gemt i ringebufferen. Som standard skal du bruge sudo for at bruge dmesg.

sudo dmesg

Alle beskeder i ringebufferen vises i terminalvinduet.

Det var en syndflod. Det, vi skal gøre, er naturligvis at røre det igennem mindre:

sudo dmesg | less

Nu kan vi rulle gennem beskederne på udkig efter emner af interesse.

Du kan bruge søgefunktionen inden for mindre til at finde og fremhæve emner og termer, du er interesseret i. Start søgefunktionen ved at trykke på skråstregen “/” i mindre.

  Sådan bruger du tmux på Linux (og hvorfor det er bedre end skærm)

Fjerner behovet for sudo

Hvis du vil undgå at skulle bruge sudo hver gang du bruger dmesg, kan du bruge denne kommando. Men vær opmærksom: det lader alle med en brugerkonto på din computer bruge dmesg uden at skulle bruge sudo.

sudo sysctl -w kernel.dmesg_restrict=0

Tvinger farveoutput

Som standard vil dmesg sandsynligvis være konfigureret til at producere farvet output. Hvis det ikke er det, kan du bede dmesg om at farvelægge sit output ved at bruge -L (farve) muligheden.

sudo dmesg -L

For at tvinge dmesg til altid at være standard til en farvet skærm, brug denne kommando:

sudo dmesg --color=always

Menneskelige tidsstempler

Som standard bruger dmesg en tidsstempelnotation på sekunder og nanosekunder siden kernen startede. For at få dette gengivet i et mere menneskevenligt format, skal du bruge -H (menneske) indstillingen.

sudo dmesg -H

Dette får to ting til at ske.

Udgangen vises automatisk i mindre.
Tidsstemplerne viser et tidsstempel med dato og klokkeslæt, med en minutopløsning. De beskeder, der opstod i hvert minut, er mærket med sekunder og nanosekunder fra starten af ​​det pågældende minut.

Tidsstempler, der kan læses af mennesker

Hvis du ikke kræver nanosekunds nøjagtighed, men du ønsker tidsstempler, der er nemmere at læse end standardindstillingerne, skal du bruge -T (human readable) mulighed. (Det er lidt forvirrende. -H er den “menneskelige” mulighed, -T er den “læsbare” mulighed.)

sudo dmesg -T

Tidsstemplerne gengives som standarddatoer og -klokkeslæt, men opløsningen sænkes til et minut.

Alt, hvad der skete inden for et enkelt minut, har det samme tidsstempel. Hvis det eneste du bekymrer dig om er hændelsesforløbet, er dette godt nok. Bemærk også, at du bliver dumpet tilbage ved kommandoprompten. Denne mulighed kalder ikke automatisk mindre.

Ser Live Events

For at se beskeder, når de ankommer til kernel-ringbufferen, skal du bruge –følg (vent på beskeder). Den sætning virker måske lidt mærkelig. Hvis ringebufferen bruges til at gemme beskeder fra begivenheder, der finder sted under opstartssekvensen, hvordan kan live beskeder ankomme til ringebufferen, når computeren er oppe og køre?

Alt, hvad der forårsager en ændring i den hardware, der er forbundet til din computer, vil forårsage, at meddelelser sendes til kerneringbufferen. Opdater eller tilføj et kernemodul, og du vil se ringebuffermeddelelser om disse ændringer. Hvis du tilslutter et USB-drev eller tilslutter eller afbryder en Bluetooth-enhed, vil du se meddelelser i dmesg-udgangen. Selv virtuel hardware vil få nye beskeder til at dukke op i ringebufferen. Tænd en virtuel maskine, og du vil se nye oplysninger, der ankommer i ringbufferen.

sudo dmesg --follow

Bemærk, at du ikke vender tilbage til kommandoprompten. Når nye meddelelser vises, vises de ved dmesg nederst i terminalvinduet.

  Sådan installeres Linux på en Mac

Selv montering af en CD-ROM disk ses som en ændring, fordi du har podet indholdet af CD-ROM disken ind i mappetræet.

Tryk på Ctrl+C for at afslutte realtidsfeedet.

Hent de sidste ti beskeder

Brug halekommandoen at hente de sidste ti kernel ring buffer beskeder. Selvfølgelig kan du hente et vilkårligt antal beskeder. Ti er blot vores eksempel.

sudo dmesg | last -10

De sidste ti beskeder hentes og vises i terminalvinduet.

Søger efter specifikke vilkår

Pipe outputtet fra dmesg gennem grep at søge efter bestemte strenge eller mønstre. Her bruger vi muligheden -i (ignorer store og små bogstaver), så der ses bort fra tilfældet med matchende strenge. vores resultater vil inkludere “usb” og “USB” og enhver anden kombination af små og store bogstaver.

sudo dmesg | grep -i usb

De fremhævede søgeresultater er med store og små bogstaver.

Vi kan isolere de beskeder, der indeholder referencer til den første SCSI harddisk på systemets sda. (Faktisk bruges sda også i dag til den første SATA-harddisk, og til USB-drev.)

sudo dmesg | grep -i sda

Alle meddelelser, der nævner sda, hentes og vises i terminalvinduet.

For at få grep til at søge efter flere termer på én gang, skal du bruge muligheden -E (udvid regulært udtryk). Du skal angive søgetermerne i en citeret streng med røret “|” afgrænsninger mellem søgetermerne:

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

sudo dmesg |  grep -E

Enhver besked, der nævner nogen af ​​søgetermerne, vises i terminalvinduet.

output fra sudo dmesg |  grep -E

Brug af logniveauer

Hver meddelelse, der er logget til kerneringbufferen, har et niveau knyttet til sig. Niveauet repræsenterer vigtigheden af ​​informationen i beskeden. Niveauerne er:

emerg: Systemet er ubrugeligt.
advarsel: Handling skal tages straks.
crit: Kritiske forhold.
fejl: Fejltilstande.
advarsel: Advarselsforhold.
Bemærk: Normal, men væsentlig tilstand.
info: Oplysende.
debug: Beskeder på fejlretningsniveau.

  Sådan bruger du KeePass på Linux for at holde dine adgangskoder sikre

Vi kan lave dmesg-udtræksmeddelelser, der matcher et bestemt niveau, ved at bruge -l (niveau)-indstillingen og overføre navnet på niveauet som en kommandolinjeparameter. For kun at se meddelelser på “informationsniveau” skal du bruge denne kommando:

sudo dmesg -l info

Alle de meddelelser, der er angivet, er informationsmeddelelser. De indeholder ikke fejl eller advarsler, kun nyttige meddelelser.

Kombiner to eller flere logniveauer i én kommando for at hente meddelelser på flere logniveauer:

sudo dmesg -l debug,notice

Outputtet fra dmesg er en blanding af meddelelser på hvert logniveau:

Facilitetskategorierne

Dmesg-meddelelserne er grupperet i kategorier kaldet “faciliteter.” Listen over faciliteter er:

kern: Kernel-meddelelser.
bruger: Beskeder på brugerniveau.
mail: Mail system.
daemon: Systemdæmoner.
auth: Sikkerheds-/autorisationsmeddelelser.
syslog: Interne syslogd-meddelelser.
lpr: Line printer undersystem.
nyheder: Netværksnyhedsundersystem.

Vi kan bede dmesg om at filtrere dets output til kun at vise beskeder i en specifik facilitet. For at gøre det skal vi bruge muligheden -f (facilitet):

sudo dmesg -f daemon

dmesg viser alle meddelelser relateret til dæmoner i terminalvinduet.

Som vi gjorde med niveauerne, kan vi bede dmesg om at liste beskeder fra mere end én facilitet på én gang:

sudo dmesg -f syslog, daemon

Outputtet er en blanding af syslog- og daemon-logmeddelelser.

Kombinerer facilitet og niveau

Indstillingen -x (afkode) får dmesg til at vise faciliteten og niveauet som menneskelæselige præfikser til hver linje.

sudo dmesg -x

Faciliteten og niveauet kan ses i starten af ​​hver linje:

Den første fremhævede sektion er en besked fra “kerne”-faciliteten med et niveau af “bemærkning”. Den anden fremhævede sektion er en besked fra “kerne”-faciliteten med et niveau af “info.”

Det er fantastisk, men hvorfor?

Kort sagt, fejlfinding.

Hvis du har problemer med, at et stykke hardware ikke genkendes eller ikke opfører sig korrekt, kan dmesg kaste lys over problemet.

Brug dmesg til at gennemgå meddelelser fra det højeste niveau og ned gennem hvert lavere niveau, på udkig efter eventuelle fejl eller advarsler, der nævner hardwareelementet eller kan have en betydning for problemet.
Brug dmesg til at søge efter en omtale af den relevante facilitet for at se, om de indeholder nyttige oplysninger.
Pipe dmesg gennem grep og se efter relaterede strenge eller identifikatorer såsom produktproducent eller modelnumre.
Pipe dmesg gennem grep og se efter generiske termer som “gpu” eller “storage”, eller udtryk som “failure”, “failed” eller “unable”.
Brug –follow-indstillingen og se dmesg-beskeder i realtid.

God jagt.