Како користити команду дмесг на Линуку

Komanda dmesg pruža mogućnost da se zaviri u skrivene detalje procesa pokretanja Linux sistema. Omogućava pregled poruka o hardverskim uređajima i drajverima, koje se čuvaju u posebnoj memorijskoj oblasti nazvanoj „kernel ring buffer“. Ovaj alat je od velike pomoći pri pronalaženju i otklanjanju grešaka.

Kako funkcioniše Linux „ring buffer“

U operativnim sistemima kao što su Linux i Unix, procesi pokretanja i inicijalizacije sistema su odvojene faze niza događaja koji se odvijaju kada se računar uključi.

Procesi pokretanja, koji obuhvataju BIOS ili UEFI, MBR, i GRUB, inicijalizuju sistem do tačke gde se jezgro učitava u memoriju, povezuje sa inicijalnim RAM diskom (initrd ili initramfs), i gde se pokreće systemd.

Nakon toga, procesi inicijalizacije operativnog sistema preuzimaju kontrolu i nastavljaju sa daljim podešavanjima. U početnim fazama ovog procesa, demoni za logovanje poput syslogd ili rsyslogd još nisu aktivni. Da bi se osiguralo da važne poruke o greškama i upozorenjima ne budu izgubljene u ovoj fazi, jezgro koristi kružni buffer za skladištenje poruka.

Kružni buffer, ili „ring buffer“, predstavlja memorijski prostor rezervisan za poruke. Ima jednostavnu strukturu i fiksnu veličinu. Kada se napuni, nove poruke prepisuju najstarije. Konceptualno, može se zamisliti kao „kružni skladišni prostor“.

Ovaj buffer jezgra čuva informacije poput poruka o inicijalizaciji drajvera, poruka sa hardvera i poruka od modula jezgra. Budući da sadrži ključne informacije o pokretanju na niskom nivou, predstavlja idealno mesto za početak istraživanja hardverskih grešaka ili problema pri pokretanju sistema.

U ovom procesu, alat dmesg je ključan za pristup ovim informacijama.

Kako koristiti dmesg komandu

Komanda dmesg omogućava pregled poruka koje su smeštene u „ring buffer“. Po default-u, za korišćenje dmesg komande potrebne su administratorske privilegije, što znači da je neophodno koristiti sudo.

sudo dmesg

Ovom komandom, sve poruke iz „ring buffer“-a se prikazuju u terminalu.

Prikazivanje velikog broja poruka odjednom može biti pretrpano. Zato je korisno koristiti komandu less za lakše pregledanje sadržaja:

sudo dmesg | less

Sada je moguće skrolovati kroz poruke i pretraživati ključne reči. Unutar less, pritiskom na taster „/“ aktivira se funkcija pretrage.

Uklanjanje potrebe za sudo

Ukoliko želite izbeći upotrebu sudo svaki put kada koristite dmesg, možete upotrebiti sledeću komandu. Međutim, imajte na umu da ovo omogućava svim korisnicima sa pristupom računaru da koriste dmesg bez administratorskih privilegija:

sudo sysctl -w kernel.dmesg_restrict=0

Forsiranje obojenog izlaza

Po default-u, dmesg bi trebalo da prikazuje obojeni izlaz. Ako to nije slučaj, možete primorati dmesg da prikaže izlaz u boji pomoću opcije -L:

sudo dmesg -L

Da biste osigurali da dmesg uvek koristi obojeni izlaz, upotrebite sledeću komandu:

sudo dmesg --color=always

Ljudski čitljive vremenske oznake

Standardno, dmesg koristi vremenske oznake u sekundama i nanosekundama od trenutka pokretanja jezgra. Da biste prikazali ove informacije u formatu koji je lakši za čitanje, koristite opciju -H:

sudo dmesg -H

Ovo ima dva efekta:

Izlaz se automatski prikazuje u programu less. Vremenske oznake prikazuju datum i vreme sa minutnom rezolucijom. Poruke koje su se dogodile u istom minutu su označene sekundama i nanosekundama od početka tog minuta.

Još čitljivije vremenske oznake

Ako vam nije potrebna tačnost u nanosekundama, ali želite lakše čitljive vremenske oznake od standardnih, koristite opciju -T. Zanimljivo je da je -H opcija „ljudska“, dok je -T opcija „ljudski čitljiva“.

sudo dmesg -T

Vremenske oznake se prikazuju kao standardni datumi i vremena, ali je rezolucija smanjena na minut.

Sve što se dogodilo unutar istog minuta imaće istu vremensku oznaku. Ova opcija ne poziva automatski less, već se vraćate na komandnu liniju.

Praćenje događaja uživo

Da biste videli poruke kako pristižu u „ring buffer“, koristite opciju --follow. Možda se pitate kako poruke stižu u buffer nakon što je sistem pokrenut. Svaka promena na hardveru povezanom sa računarom će izazvati poruke u buffer-u. Ažuriranje ili dodavanje modula jezgra, priključivanje USB diska, povezivanje ili isključivanje Bluetooth uređaja – sve to rezultiraće novim porukama u dmesg izlazu. Čak i virtuelni hardver izaziva pojavu novih poruka.

sudo dmesg --follow

Nakon pokretanja ove komande, nećete se vratiti na komandnu liniju. Kada se pojave nove poruke, dmesg ih prikazuje na dnu terminala.

Čak i montiranje CD-ROM diska se smatra promenom koja generiše poruke.

Za izlaz iz ovog prikaza uživo, pritisnite Ctrl+C.

Preuzimanje poslednjih poruka

Upotrebite komandu tail za preuzimanje poslednjih deset poruka iz „ring buffer“-a. Naravno, možete preuzeti bilo koji broj poruka, deset je samo primer:

sudo dmesg | tail -10

Poslednjih deset poruka će biti prikazano u terminalu.

Pretraga specifičnih termina

Prosledite izlaz komande dmesg kroz grep za pretragu specifičnih nizova znakova ili šablona. Ovde koristimo opciju -i (ignorisanje veličine slova) tako da se zanemaruje razlika između velikih i malih slova prilikom pretrage. Na taj način, rezultati će uključivati „usb“, „USB“ i sve ostale kombinacije velikih i malih slova:

sudo dmesg | grep -i usb

Rezultati pretrage sa odgovarajućim terminom su prikazani u terminalu.

Možemo izolovati poruke koje sadrže reference na prvi SCSI hard disk na sistemu, označen kao sda. Danas se sda koristi i za prvi SATA čvrsti disk, kao i za USB diskove:

sudo dmesg | grep -i sda

Sve poruke koje pominju sda biće prikazane u terminalu.

Za pretragu više termina odjednom, koristite opciju -E (prošireni regularni izraz). Termine za pretragu morate navesti unutar navodnika sa cevi (|) kao graničnikom između termina:

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

Svaka poruka koja sadrži bilo koji od navedenih termina biće prikazana u terminalu.

Korišćenje nivoa logovanja

Svaka poruka zabeležena u „ring buffer“-u ima definisan nivo, koji označava važnost informacija u poruci. Nivoi su sledeći:

emerg Sistem je neupotrebljiv.
alert Neophodna je trenutna akcija.
crit Kritični uslovi.
err Uslovi greške.
warning Uslovi upozorenja.
notice Normalno, ali značajno stanje.
info Informativno.
debug Poruke na nivou otklanjanja grešaka.

dmesg može prikazati poruke koje odgovaraju određenom nivou pomoću opcije -l (nivo) i prosleđivanjem imena nivoa kao parametra. Na primer, za prikaz samo „informativnih“ poruka koristite:

sudo dmesg -l info

Prikazaće se samo informativne poruke, bez grešaka i upozorenja.

Moguće je kombinovati više nivoa logovanja u jednoj komandi za preuzimanje poruka sa više nivoa:

sudo dmesg -l debug,notice

Izlaz će biti kombinacija poruka sa svakog od navedenih nivoa.

Kategorije objekata

Poruke u dmesg su grupisane u kategorije koje se nazivaju „objekti“. Lista objekata je sledeća:

kern Poruke jezgra.
user Poruke na korisničkom nivou.
mail Sistem pošte.
daemon Sistemski demoni.
auth Sigurnosne/autorizacione poruke.
syslog Interne poruke syslogd-a.
lpr Podsistem linijskog štampača.
news Mrežni podsistem vesti.

Možemo filtrirati izlaz dmesg tako da prikazuje samo poruke određenog objekta koristeći opciju -f (facility):

sudo dmesg -f daemon

dmesg će prikazati sve poruke koje se odnose na demone.

Kao i sa nivoima, moguće je prikazati poruke iz više od jednog objekta istovremeno:

sudo dmesg -f syslog, daemon

Izlaz će biti kombinacija poruka iz syslog i daemon objekata.

Kombinovanje objekata i nivoa

Opcija -x (dešifrovanje) omogućava dmesg da prikaže objekat i nivo kao čitljive prefikse za svaki red.

sudo dmesg -x

Objekat i nivo su vidljivi na početku svakog reda:

Prvi istaknuti odeljak je poruka iz „kernel“ objekta sa nivoom „notice“. Drugi odeljak je iz „kernel“ objekta sa nivoom „info“.

Zašto je dmesg koristan?

Ukratko, dmesg se koristi za pronalaženje grešaka.

Ako imate problema sa hardverom koji nije prepoznat ili ne radi ispravno, dmesg može pružiti korisne informacije za rešavanje problema.

Koristite dmesg za pregled poruka na svim nivoima, tražeći greške ili upozorenja koja se odnose na hardverski element. Potražite specifične objekte kako biste pronašli relevantne informacije. Koristite grep za pretragu specifičnih termina ili identifikatora, kao i generičkih termina (npr. „gpu“, „storage“). Opcija --follow je korisna za praćenje poruka u realnom vremenu.

Srećan lov na greške!