Cum să utilizați comanda dmesg pe Linux

Comanda dmesg vă permite să priviți lumea ascunsă a proceselor de pornire Linux. Examinați și monitorizați mesajele dispozitivului hardware și ale driverului din propriul buffer de apel al kernelului cu „prietenul detectitorului de erori”.

Cum funcționează Ring Buffer-ul Linux

În computerele Linux și Unix, pornirea și pornirea sunt două faze distincte ale secvenței de evenimente care au loc atunci când computerul este pornit.

Procesele de boot (BIOS sau UEFI, MBR, și GRUB) duce inițializarea sistemului până la punctul în care nucleul este încărcat în memorie și conectat la discul ram inițial (initrd sau initramfs), și systemd este pornit.

Procesele de pornire preiau apoi ștafeta și finalizează inițializarea sistemului de operare. În primele etape ale inițializării, demonii de logare, cum ar fi syslogd sau rsyslogd nu sunt încă în funcțiune. Pentru a evita pierderea mesajelor de eroare notabile și a avertismentelor din această fază de inițializare, nucleul conține a tampon inel pe care îl folosește ca depozit de mesaje.

Un buffer de apel este un spațiu de memorie rezervat pentru mesaje. Are un design simplu și are o dimensiune fixă. Când este plin, mesajele mai noi suprascrie cele mai vechi mesaje. Din punct de vedere conceptual, poate fi gândit ca un „tampon circular.”

Bufferul inel al nucleului stochează informații precum mesajele de inițializare ale driverelor de dispozitiv, mesajele de la hardware și mesajele de la modulele kernelului. Deoarece conține aceste mesaje de pornire de nivel scăzut, tamponul de inel este un loc bun pentru a începe o investigație a erorilor hardware sau a altor probleme de pornire.

Dar nu merge cu mâna goală. Ia dmesg cu tine.

Comanda dmesg

Comanda dmesg vă permite pentru a revizui mesajele care sunt stocate în memoria tampon de apel. În mod implicit, trebuie să utilizați sudo pentru a utiliza dmesg.

sudo dmesg

Toate mesajele din memoria tampon sunt afișate în fereastra terminalului.

A fost un potop. Evident, ceea ce trebuie să facem este să o trecem mai puțin:

sudo dmesg | less

Acum putem parcurge mesajele căutând articole de interes.

Puteți utiliza funcția de căutare în mai puțin pentru a localiza și evidenția elementele și termenii care vă interesează. Porniți funcția de căutare apăsând tasta bară oblică „/” în mai puțin.

  Cum să ștergeți un fișier în Linux

Eliminarea nevoii de sudo

Dacă doriți să evitați să utilizați sudo de fiecare dată când utilizați dmesg, puteți utiliza această comandă. Dar, fiți conștient: permite oricui cu un cont de utilizator computerul dvs. să folosească dmesg fără a fi nevoie să folosească sudo.

sudo sysctl -w kernel.dmesg_restrict=0

Forțarea ieșirii culorilor

În mod implicit, dmesg va fi probabil configurat pentru a produce rezultate colorate. Dacă nu este, puteți spune dmesg să-și coloreze rezultatul folosind opțiunea -L (culoare).

sudo dmesg -L

Pentru a forța dmesg să fie întotdeauna implicit la un afișaj colorat, utilizați această comandă:

sudo dmesg --color=always

Timpurile umane

În mod implicit, dmesg utilizează o notație de marcaj de timp de secunde și nanosecunde de când a început nucleul. Pentru ca aceasta să fie redată într-un format mai prietenos cu oamenii, utilizați opțiunea -H (uman).

sudo dmesg -H

Acest lucru face ca două lucruri să se întâmple.

Ieșirea este afișată automat în mai puțin.
Marcajele temporale afișează un marcaj temporal cu data și ora, cu o rezoluție de minute. Mesajele care au apărut în fiecare minut sunt etichetate cu secundele și nanosecundele de la începutul acelui minut.

Marcaje temporale care pot fi citite de oameni

Dacă nu aveți nevoie de precizie în nanosecunde, dar doriți marcaje de timp care sunt mai ușor de citit decât valorile implicite, utilizați opțiunea -T (lizibilă de om). (Este puțin confuz. -H este opțiunea „umană”, -T este opțiunea „lizibilă de către om”.)

sudo dmesg -T

Marcajele temporale sunt redate ca date și ore standard, dar rezoluția este redusă la un minut.

Tot ceea ce s-a întâmplat într-un singur minut are același marcaj temporal. Dacă tot ce vă deranjează este succesiunea evenimentelor, aceasta este suficient de bună. De asemenea, rețineți că sunteți aruncat înapoi la promptul de comandă. Această opțiune nu invocă automat mai puțin.

Vizionarea evenimentelor live

Pentru a vedea mesajele pe măsură ce sosesc în memoria tampon de inel al nucleului, utilizați opțiunea –follow (așteptați mesajele). Această propoziție ar putea părea puțin ciudată. Dacă tamponul de apel este folosit pentru a stoca mesaje de la evenimente care au loc în timpul secvenței de pornire, cum pot ajunge mesajele live în tamponul de apel odată ce computerul este pornit și rulează?

  Cele mai bune 5 GUI-uri pentru MPV pe Linux

Orice lucru care provoacă o schimbare în hardware-ul conectat la computer va face ca mesajele să fie trimise în buffer-ul de inel al nucleului. Actualizați sau adăugați un modul kernel și veți vedea mesaje tampon de apel despre aceste modificări. Dacă conectați o unitate USB sau conectați sau deconectați un dispozitiv Bluetooth, veți vedea mesaje în ieșirea dmesg. Chiar și hardware-ul virtual va face ca mesaje noi să apară în memoria tampon de apel. Porniți o mașină virtuală și veți vedea informații noi sosind în memoria tampon.

sudo dmesg --follow

Rețineți că nu veți reveni la promptul de comandă. Când apar mesaje noi, acestea sunt afișate prin dmesg în partea de jos a ferestrei terminalului.

Chiar și montarea unui disc CD-ROM este văzută ca o schimbare, deoarece ați grefat conținutul discului CD-ROM în arborele de directoare.

Pentru a ieși din fluxul în timp real, apăsați Ctrl+C.

Preluați ultimele zece mesaje

Folosiți comanda coadă pentru a recupera ultimele zece mesajele bufferului inelului kernelului. Desigur, puteți prelua orice număr de mesaje. Zece este doar exemplul nostru.

sudo dmesg | last -10

Ultimele zece mesaje sunt preluate și listate în fereastra terminalului.

Căutarea unor termeni specifici

Transmite ieșirea de la dmesg prin grep pentru a căuta anumite șiruri sau modele. Aici folosim opțiunea -i (ignora majuscule) astfel încât cazul șirurilor de caractere potrivire să fie ignorat. rezultatele noastre vor include „usb” și „USB” și orice altă combinație de litere mici și majuscule.

sudo dmesg | grep -i usb

Rezultatele căutării evidențiate sunt scrise cu litere mari și mici.

Putem izola mesajele care conțin referințe la primul SCSI hard disk de pe sistem sda. (De fapt, sda este folosit și în zilele noastre pentru primul hard disk SATAși pentru unități USB.)

sudo dmesg | grep -i sda

Toate mesajele care menționează sda sunt preluate și listate în fereastra terminalului.

Pentru a face ca grep să caute mai mulți termeni simultan, utilizați opțiunea -E (extinde expresia regulată). Trebuie să furnizați termenii de căutare într-un șir între ghilimele cu țeava „|” delimitatori între termenii de căutare:

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

sudo dmesg |  grep -E

Orice mesaj care menționează oricare dintre termenii de căutare este listat în fereastra terminalului.

ieșire din sudo dmesg |  grep -E

Utilizarea nivelurilor de jurnal

Fiecare mesaj înregistrat în buffer-ul de inel al nucleului are un nivel atașat. Nivelul reprezintă importanța informațiilor din mesaj. Nivelurile sunt:

emerg: Sistemul este inutilizabil.
alertă: trebuie luate măsuri imediate.
crit: Condiții critice.
err: Condiții de eroare.
warn: Condiții de avertizare.
Notă: Stare normală, dar semnificativă.
info: informativ.
depanare: mesaje la nivel de depanare.

  9 cele mai bune medii desktop Linux de folosit în 2022

Putem face ca dmesg să extragă mesaje care se potrivesc unui anumit nivel utilizând opțiunea -l (nivel) și trecând numele nivelului ca parametru de linie de comandă. Pentru a vedea doar mesajele de nivel „informațional”, utilizați această comandă:

sudo dmesg -l info

Toate mesajele enumerate sunt mesaje informaționale. Nu conțin erori sau avertismente, ci doar notificări utile.

Combinați două sau mai multe niveluri de jurnal într-o singură comandă pentru a prelua mesaje de mai multe niveluri de jurnal:

sudo dmesg -l debug,notice

Ieșirea de la dmesg este un amestec de mesaje de la fiecare nivel de jurnal:

Categoriile de unități

Mesajele dmesg sunt grupate în categorii numite „facilități”. Lista facilitatilor este:

kern: mesaje kernel.
utilizator: mesaje la nivel de utilizator.
mail: sistem de e-mail.
daemon: demoni de sistem.
auth: Mesaje de securitate/autorizare.
syslog: mesaje interne syslogd.
lpr: Subsistem de imprimantă de linie.
știri: subsistem de știri de rețea.

Putem cere dmesg să-și filtreze rezultatul pentru a afișa numai mesajele într-o anumită facilitate. Pentru a face acest lucru, trebuie să folosim opțiunea -f (facilitate):

sudo dmesg -f daemon

dmesg listează toate mesajele referitoare la demoni în fereastra terminalului.

Așa cum am făcut cu nivelurile, putem cere dmesg să listeze mesajele de la mai multe unități simultan:

sudo dmesg -f syslog, daemon

Ieșirea este un amestec de mesaje syslog și daemon.

Combinând Facilitatea și Nivelul

Opțiunea -x (decodificare) face ca dmesg să arate facilitatea și nivelul ca prefixe care pot fi citite de om pentru fiecare linie.

sudo dmesg -x

Facilitatea și nivelul pot fi văzute la începutul fiecărei linii:

Prima secțiune evidențiată este un mesaj de la facilitatea „kernel” cu un nivel de „notificare”. A doua secțiune evidențiată este un mesaj de la facilitatea „kernel” cu un nivel de „informații”.

E grozav, dar de ce?

Pe scurt, găsirea greșelilor.

Dacă întâmpinați probleme cu o piesă hardware care nu este recunoscută sau nu se comportă corect, dmesg poate arunca o lumină asupra problemei.

Utilizați dmesg pentru a examina mesajele de la cel mai înalt nivel până la fiecare nivel inferior, căutând orice erori sau avertismente care menționează elementul hardware sau care pot avea o legătură cu problema.
Utilizați dmesg pentru a căuta orice mențiune despre facilitate adecvată pentru a vedea dacă acestea conțin informații utile.
Transmite dmesg prin grep și caută șiruri de caractere sau identificatori înrudite, cum ar fi numere de producător sau model de produs.
Transmite dmesg prin grep și caută termeni generici precum „gpu” sau „stocare” sau termeni precum „eșec”, „eșuat” sau „incapabil”.
Utilizați opțiunea –follow și urmăriți mesajele dmesg în timp real.

Vanatoare placuta.