Slik bruker du dmesg-kommandoen på Linux

Kommandoen dmesg lar deg kikke inn i den skjulte verdenen til Linux-oppstartsprosessene. Se gjennom og overvåk meldinger om maskinvareenhet og drivere fra kjernens egen ringbuffer med «feilsøkerens venn.»

Hvordan Linuxs ringbuffer fungerer

I Linux- og Unix-lignende datamaskiner er oppstart og oppstart to forskjellige faser av hendelsesforløpet som finner sted når datamaskinen slås på.

Oppstartsprosessene (BIOS eller UEFI, MBRog GRUB) ta initialiseringen av systemet til det punktet hvor kjernen er lastet inn i minnet og koblet til den opprinnelige ramdisken (initrd eller initramfs), og systemd er startet.

Oppstartsprosessene tar deretter opp stafettpinnen og fullfører initialiseringen av operativsystemet. I de aller tidligste stadiene av initialisering, loggedemoner som f.eks syslogd eller rsyslogd er ennå ikke oppe og går. For å unngå å miste bemerkelsesverdige feilmeldinger og advarsler fra denne fasen av initialiseringen, inneholder kjernen en ringbuffer som den bruker som meldingslager.

En ringebuffer er et minne som er reservert for meldinger. Den er enkel i design, og av fast størrelse. Når den er full, overskriver nyere meldinger de eldste meldingene. Konseptuelt kan det betraktes som en «sirkulær buffer

Kjerneringbufferen lagrer informasjon som initialiseringsmeldinger til enhetsdrivere, meldinger fra maskinvare og meldinger fra kjernemoduler. Fordi den inneholder disse oppstartsmeldingene på lavt nivå, er ringebufferen et godt sted å starte en undersøkelse av maskinvarefeil eller andre oppstartsproblemer.

Men ikke gå tomhendt. Ta dmesg med deg.

dmesg-kommandoen

Kommandoen dmesg lar deg for å se på meldingene som er lagret i ringebufferen. Som standard må du bruke sudo for å bruke dmesg.

sudo dmesg

Alle meldingene i ringebufferen vises i terminalvinduet.

Det var en syndflod. Det vi trenger å gjøre er åpenbart mindre:

sudo dmesg | less

Nå kan vi bla gjennom meldingene på jakt etter gjenstander av interesse.

Du kan bruke søkefunksjonen innenfor mindre for å finne og markere elementer og termer du er interessert i. Start søkefunksjonen ved å trykke skråstrektasten «/» i mindre.

  Linux 5.0 "Shy Crocodile" kommer med Googles Adiantum-kryptering

Fjerner behovet for sudo

Hvis du vil unngå å måtte bruke sudo hver gang du bruker dmesg, kan du bruke denne kommandoen. Men vær oppmerksom: den lar alle med en brukerkonto datamaskinen din bruke dmesg uten å måtte bruke sudo.

sudo sysctl -w kernel.dmesg_restrict=0

Forsering av fargeutgang

Som standard vil dmesg sannsynligvis være konfigurert til å produsere farget utdata. Hvis den ikke er det, kan du be dmesg om å fargelegge utdataene ved å bruke alternativet -L (farge).

sudo dmesg -L

For å tvinge dmesg til alltid å bruke en farget skjerm som standard, bruk denne kommandoen:

sudo dmesg --color=always

Menneskelige tidsstempler

Som standard bruker dmesg en tidsstempelnotasjon på sekunder og nanosekunder siden kjernen startet. For å få dette gjengitt i et mer menneskevennlig format, bruk alternativet -H (menneske).

sudo dmesg -H

Dette fører til at to ting skjer.

Utgangen vises automatisk i mindre.
Tidsstemplene viser et tidsstempel med dato og klokkeslett, med minuttoppløsning. Meldingene som oppsto i hvert minutt er merket med sekunder og nanosekunder fra begynnelsen av det minuttet.

Lesbare tidsstempler for mennesker

Hvis du ikke krever nanosekunders nøyaktighet, men du vil ha tidsstempler som er lettere å lese enn standardinnstillingene, bruk alternativet -T (lesbare mennesker). (Det er litt forvirrende. -H er det «menneskelige» alternativet, -T er det «lesbare» alternativet.)

sudo dmesg -T

Tidsstemplene er gjengitt som standard datoer og klokkeslett, men oppløsningen senkes til ett minutt.

Alt som skjedde i løpet av et enkelt minutt har samme tidsstempel. Hvis alt du bryr deg om er hendelsesforløpet, er dette bra nok. Vær også oppmerksom på at du blir dumpet tilbake ved ledeteksten. Dette alternativet påkaller ikke automatisk mindre.

Ser på livebegivenheter

For å se meldinger når de kommer inn i kjerneringbufferen, bruk –følg (vent på meldinger). Den setningen kan virke litt merkelig. Hvis ringebufferen brukes til å lagre meldinger fra hendelser som finner sted under oppstartssekvensen, hvordan kan direktemeldinger ankomme i ringebufferen når datamaskinen er oppe og går?

Alt som forårsaker en endring i maskinvaren koblet til datamaskinen din, vil føre til at meldinger sendes til kjerneringbufferen. Oppdater eller legg til en kjernemodul, og du vil se ringebuffermeldinger om disse endringene. Hvis du kobler til en USB-stasjon eller kobler til eller fra en Bluetooth-enhet, vil du se meldinger i dmesg-utgangen. Selv virtuell maskinvare vil føre til at nye meldinger vises i ringebufferen. Fyr opp en virtuell maskin, og du vil se ny informasjon som kommer inn i ringbufferen.

sudo dmesg --follow

Merk at du ikke kommer tilbake til ledeteksten. Når nye meldinger vises, vises de av dmesg nederst i terminalvinduet.

  Hvordan bruke Pipes på Linux

Selv montering av en CD-ROM-disk blir sett på som en endring, fordi du har podet innholdet på CD-ROM-disken inn i katalogtreet.

For å gå ut av sanntidsfeeden, trykk Ctrl+C.

Hent de ti siste meldingene

Bruk halekommandoen for å hente de ti siste kjerneringbuffermeldinger. Selvfølgelig kan du hente et hvilket som helst antall meldinger. Ti er bare vårt eksempel.

sudo dmesg | last -10

De siste ti meldingene hentes og listes opp i terminalvinduet.

Søker etter spesifikke vilkår

Pipe utdataene fra dmesg gjennom grep for å søke etter bestemte strenger eller mønstre. Her bruker vi alternativet -i (ignorer store og små bokstaver), slik at tilfellet med samsvarende strenger blir sett bort fra. resultatene våre vil inkludere «usb» og «USB» og enhver annen kombinasjon av små og store bokstaver.

sudo dmesg | grep -i usb

De uthevede søkeresultatene er med store og små bokstaver.

Vi kan isolere meldingene som inneholder referanser til den første SCSI harddisk på systemet sda. (Faktisk brukes sda også i dag til den første SATA-harddiskenog for USB-stasjoner.)

sudo dmesg | grep -i sda

Alle meldingene som nevner sda blir hentet og listet opp i terminalvinduet.

For å få grep til å søke etter flere termer samtidig, bruk alternativet -E (utvid regulært uttrykk). Du må oppgi søkeordene i en angitt streng med pipe «|» skilletegn mellom søkeordene:

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

sudo dmesg |  grep -E

Enhver melding som nevner noen av søkeordene er oppført i terminalvinduet.

utgang fra sudo dmesg |  grep -E

Bruke loggnivåer

Hver melding som er logget til kjerneringbufferen har et nivå knyttet til seg. Nivået representerer viktigheten av informasjonen i meldingen. Nivåene er:

emerg: Systemet er ubrukelig.
advarsel: Handling må iverksettes umiddelbart.
crit: Kritiske forhold.
err: Feilforhold.
advarsel: Advarselsforhold.
merknad: Normal, men betydelig tilstand.
info: Informasjon.
debug: Meldinger på feilsøkingsnivå.

  Slik bruker du Shutter-skjermbildeappen på Linux

Vi kan lage dmesg-ekstraktmeldinger som samsvarer med et bestemt nivå ved å bruke alternativet -l (nivå) og sende navnet på nivået som en kommandolinjeparameter. For å kun se meldinger på «informasjonsnivå», bruk denne kommandoen:

sudo dmesg -l info

Alle meldingene som er oppført er informasjonsmeldinger. De inneholder ikke feil eller advarsler, bare nyttige varsler.

Kombiner to eller flere loggnivåer i én kommando for å hente meldinger med flere loggnivåer:

sudo dmesg -l debug,notice

Utdataene fra dmesg er en blanding av meldinger for hvert loggnivå:

Fasilitetskategoriene

Dmesg-meldingene er gruppert i kategorier kalt «fasiliteter». Listen over fasiliteter er:

kern: Kjernemeldinger.
bruker: Meldinger på brukernivå.
mail: Mail system.
daemon: Systemdemoner.
auth: Sikkerhets-/autorisasjonsmeldinger.
syslog: Interne syslogd-meldinger.
lpr: Undersystem for linjeskriver.
nyheter: Undersystem for nettverksnyheter.

Vi kan be dmesg om å filtrere utdataene slik at de bare viser meldinger i et spesifikt anlegg. For å gjøre det, må vi bruke alternativet -f (fasilitet):

sudo dmesg -f daemon

dmesg viser alle meldingene relatert til demoner i terminalvinduet.

Som vi gjorde med nivåene, kan vi be dmesg om å liste meldinger fra mer enn ett anlegg samtidig:

sudo dmesg -f syslog, daemon

Utdataene er en blanding av syslog- og daemon-loggmeldinger.

Kombinerer anlegg og nivå

Alternativet -x (dekode) får dmesg til å vise anlegget og nivået som menneskelesbare prefikser til hver linje.

sudo dmesg -x

Anlegget og nivået kan sees i starten av hver linje:

Den første uthevede delen er en melding fra «kjerne»-fasiliteten med et nivå av «varsel.» Den andre uthevede delen er en melding fra «kjerne»-fasiliteten med et nivå av «info.»

Det er flott, men hvorfor?

I et nøtteskall, feilsøking.

Hvis du har problemer med at en maskinvare ikke gjenkjennes eller ikke fungerer som den skal, kan dmesg kaste lys over problemet.

Bruk dmesg for å gjennomgå meldinger fra det høyeste nivået og ned gjennom hvert lavere nivå, og se etter eventuelle feil eller advarsler som nevner maskinvareelementet, eller som kan ha betydning for problemet.
Bruk dmesg for å søke etter omtale av det aktuelle anlegget for å se om de inneholder nyttig informasjon.
Pip dmesg gjennom grep og se etter relaterte strenger eller identifikatorer som produktprodusent eller modellnumre.
Pipe dmesg gjennom grep og se etter generiske termer som «gpu» eller «lagring», eller termer som «failure», «failed» eller «unable».
Bruk –follow-alternativet og se dmesg-meldinger i sanntid.

God jakt.