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.”
Indholdsfortegnelse
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.
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.
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"
Enhver besked, der nævner nogen af søgetermerne, vises i terminalvinduet.
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.
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.