Příkaz dmesg
vám umožní nahlédnout do hlubin operačního systému Linux, konkrétně do procesu jeho spouštění. S jeho pomocí můžete sledovat zprávy o hardwarových komponentách a ovladačích, které se ukládají do kruhové vyrovnávací paměti jádra. Tento nástroj vám tak může pomoci při hledání případných chyb.
Princip fungování kruhové vyrovnávací paměti v Linuxu
V operačních systémech Linux a dalších Unixových systémech se start a spuštění počítače dělí na dvě odlišné fáze.
Zaváděcí procesy, jako je BIOS nebo UEFI, MBR a GRUB, inicializují systém až do fáze, kdy je jádro zavedeno do paměti. K jádru se připojí počáteční ramdisk (initrd nebo initramfs) a následně se spustí proces systemd.
Poté štafetu přebírají startovací procesy, které dokončí inicializaci operačního systému. V raných fázích inicializace ještě nejsou spuštěni logovací démoni jako syslogd nebo rsyslogd. Aby nedošlo ke ztrátě důležitých chybových zpráv a varování z této fáze, jádro používá kruhovou vyrovnávací paměť, kam tyto zprávy ukládá.
Vyrovnávací paměť je vyhrazený paměťový prostor pro zprávy. Má pevnou velikost. Když se zaplní, nové zprávy přepíší ty nejstarší. Lze si ji představit jako „kruhový buffer“.
Kruhová vyrovnávací paměť jádra obsahuje informace o inicializaci ovladačů zařízení, hardwaru a modulů jádra. Díky těmto nízkoúrovňovým spouštěcím zprávám je tato paměť dobrým místem pro začátek hledání příčin problémů s hardwarem nebo spouštěním systému.
Zkuste k tomu použít příkaz dmesg
.
Příkaz dmesg
Příkaz dmesg
slouží k prohlížení zpráv uložených v kruhové vyrovnávací paměti. Ve výchozím nastavení vyžaduje ke svému spuštění oprávnění správce (sudo
).
sudo dmesg
Výsledkem je zobrazení všech zpráv z kruhové vyrovnávací paměti v terminálu.
Takto je výstup obtížně čitelný, proto je vhodné použít ho ve spojení s příkazem less
:
sudo dmesg | less
Nyní můžete zprávy procházet a hledat to, co vás zajímá.
Díky funkci vyhledávání (stisknutím lomítka ‚/‘) můžete rychle najít a zvýraznit konkrétní položky nebo výrazy.
Jak se vyhnout používání sudo
Pokud nechcete pokaždé používat sudo
při spouštění příkazu dmesg
, můžete použít tento příkaz. Nicméně buďte opatrní, protože to umožní každému uživateli vašeho počítače spouštět dmesg
bez oprávnění správce.
sudo sysctl -w kernel.dmesg_restrict=0
Barevný výstup
Příkaz dmesg
by měl ve výchozím nastavení generovat barevný výstup. Pokud tomu tak není, vynutíte si ho pomocí volby -L
(barva).
sudo dmesg -L
Pro trvalé nastavení barevného výstupu použijte:
sudo dmesg --color=always
Časová razítka ve čitelné formě
Ve výchozím nastavení zobrazuje dmesg
časová razítka v sekundách a nanosekundách od spuštění jádra. Pro formát lépe čitelný pro člověka použijte volbu -H
(human).
sudo dmesg -H
Toto způsobí dvě věci:
Výstup se automaticky zobrazí pomocí příkazu less
. Časová razítka zobrazují datum a čas v minutovém rozlišení. Zprávy, které se staly v rámci jedné minuty, jsou označeny sekundami a nanosekundami od začátku dané minuty.
Snadněji čitelná časová razítka
Pokud nepotřebujete nanosekundovou přesnost, ale preferujete snáze čitelná časová razítka, použijte volbu -T
(čitelné pro člověka). (Je to trochu matoucí: -H
je „human“, a -T
je „human-readable“.)
sudo dmesg -T
Časová razítka jsou zobrazena ve formátu standardních dat a časů, ale rozlišení je omezeno na minuty.
Všechny události, které se staly během jedné minuty, mají stejné časové razítko. Pokud vám jde jen o sled událostí, je to dostačující. Všimněte si, že se vrátíte zpět do příkazového řádku; tato volba automaticky nevyvolá less
.
Sledování živého výstupu
Chcete-li sledovat zprávy v reálném čase, použijte volbu --follow
. Může se zdát divné, že by zprávy přicházely do vyrovnávací paměti, když je počítač již spuštěný, když se normálně kruhová vyrovnávací paměť používá pro události během spouštění systému.
Cokoliv, co způsobí změnu hardwaru připojeného k vašemu počítači, vyvolá nové zprávy v kruhové vyrovnávací paměti. Například aktualizace nebo přidání modulu jádra. Zprávy uvidíte, když připojíte USB disk nebo Bluetooth zařízení, ale také když spustíte virtuální stroj.
sudo dmesg --follow
Všimněte si, že se nevrátíte do příkazového řádku. Nové zprávy se budou objevovat ve spodní části okna terminálu.
Dokonce i připojení CD-ROM je považováno za změnu.
Pro ukončení stiskněte Ctrl+C.
Zobrazení posledních deseti zpráv
Použijte příkaz tail
pro zobrazení posledních deseti zpráv z kruhové vyrovnávací paměti jádra. Samozřejmě můžete zadat libovolný počet zpráv.
sudo dmesg | last -10
Výsledkem je zobrazení posledních deseti zpráv v terminálu.
Vyhledávání konkrétních výrazů
Pomocí grep
můžete vyhledávat konkrétní řetězce nebo vzory ve výstupu z dmesg
. Volba -i
(ignorovat velikost písmen) zajistí, že se nebudete muset starat o to, zda je slovo napsané malými nebo velkými písmeny. Z výsledků tak získáte „usb“, „USB“ i další kombinace.
sudo dmesg | grep -i usb
Zvýrazněny jsou všechny výsledky, které odpovídají vyhledávanému výrazu, bez ohledu na velikost písmen.
Pro izolování zpráv o prvním SCSI pevném disku v systému, což je obvykle sda
(i když se dnes sda
používá i pro první SATA pevný disk a USB disky), použijte následující příkaz:
sudo dmesg | grep -i sda
V terminálu se zobrazí všechny zprávy, které obsahují „sda“.
Pro vyhledávání více výrazů najednou, použijte volbu -E
(rozšířený regulární výraz). Výrazy je potřeba zadat v uvozovkách a oddělit je svislou čarou „|“:
sudo dmesg | grep -E "memory|tty|dma"
Zobrazí se zprávy, které obsahují kterýkoliv z vyhledávaných výrazů.
Použití úrovní protokolu
Každá zpráva v kruhové vyrovnávací paměti jádra má přiřazenou úroveň, která udává důležitost zprávy. Mezi úrovně patří:
emerg
: Systém je nepoužitelný.
alert
: Musí být okamžitě přijata opatření.
crit
: Kritické podmínky.
err
: Chybové stavy.
warn
: Varovné podmínky.
notice
: Normální, ale významný stav.
info
: Informační.
debug
: Ladící zprávy.
Pro filtrování zpráv na základě jejich úrovně, použijte volbu -l
(úroveň) s názvem úrovně jako parametrem. Pro zobrazení pouze „informačních“ zpráv použijte:
sudo dmesg -l info
Všechny zobrazené zprávy jsou informační. Neobsahují chyby ani varování.
Pro zobrazení zpráv z více úrovní, zadejte úrovně oddělené čárkami:
sudo dmesg -l debug,notice
Výstup bude kombinací zpráv daných úrovní.
Kategorie zařízení
Zprávy dmesg
jsou seskupeny do kategorií zvaných „zařízení“. Mezi zařízení patří:
kern
: Zprávy jádra.
user
: Zprávy na uživatelské úrovni.
mail
: Poštovní systém.
daemon
: Systémoví démoni.
auth
: Zabezpečení/autorizace.
syslog
: Interní zprávy syslogd
.
lpr
: Subsystém tiskárny.
news
: Subsystém síťových novinek.
Pro filtrování výstupu dle zařízení použijte volbu -f
(zařízení):
sudo dmesg -f daemon
Zobrazí se zprávy týkající se démonů.
Stejně jako u úrovní, i zde lze zadat více zařízení:
sudo dmesg -f syslog, daemon
Výstup bude kombinací zpráv ze syslog
a démonů.
Kombinace zařízení a úrovní
Volba -x
(decode) způsobí, že dmesg
zobrazí zařízení a úroveň zprávy jako lidsky čitelné předpony pro každý řádek.
sudo dmesg -x
Zařízení a úroveň se objeví na začátku každého řádku.
První zvýrazněná část je zpráva ze zařízení „kernel“ s úrovní „notice“. Druhá zvýrazněná část je zpráva ze zařízení „kernel“ s úrovní „info“.
Proč je to užitečné?
Hlavně pro hledání a odstraňování závad.
Pokud máte problémy s rozpoznáním hardwaru nebo s jeho nesprávnou funkcí, dmesg
může pomoci vám problém osvětlit.
S jeho pomocí můžete:
- Procházet zprávy od nejvyšší úrovně po nejnižší a hledat chyby a varování, které se týkají hardwaru, nebo by mohly mít vliv na váš problém.
- Vyhledávat zmínky o konkrétních zařízeních.
- Použít
grep
k hledání souvisejících řetězců, identifikátorů, výrobce, nebo čísel modelu. - Použít
grep
k vyhledávání obecných výrazů jako „gpu“, „úložiště“, nebo výrazů jako „selhání“, „chyba“, „nelze“. - Použít volbu
--follow
pro sledování zpráv v reálném čase.
Hodně štěstí při lovu chyb!