Как да използвате командата dmesg в Linux

Командата dmesg ви позволява да надникнете в скрития свят на процесите при стартиране на Linux. Преглеждайте и наблюдавайте съобщенията за хардуерно устройство и драйвери от собствения пръстен буфер на ядрото с „приятеля на търсача на грешки“.

Как работи пръстенният буфер на Linux

В компютри, подобни на Linux и Unix, зареждането и стартирането са две отделни фази от последователността от събития, които се случват, когато компютърът е включен.

Процесите на зареждане (BIOS или UEFI, MBR, и GRUB) отведете инициализацията на системата до точката, в която ядрото се зарежда в паметта и се свързва към първоначалния ramdisk (initrd или initramfs), и systemd се стартира.

След това стартиращите процеси поемат щафетата и завършват инициализацията на операционната система. В много ранните етапи на инициализация, демони за регистриране като напр syslogd или rsyslogd все още не са стартирани. За да избегнете загубата на забележими съобщения за грешки и предупреждения от тази фаза на инициализация, ядрото съдържа a пръстен буфер който използва като хранилище за съобщения.

Буферът за звънене е пространство в паметта, запазено за съобщения. Той е прост като дизайн и с фиксиран размер. Когато е пълен, по-новите съобщения презаписват най-старите съобщения. Концептуално може да се разглежда като „кръгов буфер

Пръстенният буфер на ядрото съхранява информация като съобщения за инициализация на драйвери на устройства, съобщения от хардуер и съобщения от модули на ядрото. Тъй като съдържа тези стартиращи съобщения от ниско ниво, буферът на пръстена е добро място за започване на разследване на хардуерни грешки или други проблеми при стартиране.

Но не отивайте с празни ръце. Вземете dmesg със себе си.

Командата dmesg

Командата dmesg ви позволява за преглед на съобщенията, които се съхраняват в буфера за звънене. По подразбиране трябва да използвате sudo, за да използвате dmesg.

sudo dmesg

Всички съобщения в буфера на пръстена се показват в прозореца на терминала.

Това беше потоп. Очевидно това, което трябва да направим, е да прекараме по-малко:

sudo dmesg | less

Сега можем да превъртаме през съобщенията, търсейки предмети от интерес.

  Как да активирате автоматично влизане в Kodi на Linux

Можете да използвате функцията за търсене в рамките на по-малко, за да намерите и маркирате елементи и термини, които ви интересуват. Стартирайте функцията за търсене, като натиснете клавиша с наклонена черта „/” в по-малко.

Премахване на необходимостта от sudo

Ако искате да избегнете необходимостта да използвате sudo всеки път, когато използвате dmesg, можете да използвате тази команда. Но имайте предвид: той позволява на всеки с потребителски акаунт на вашия компютър да използва dmesg, без да се налага да използва sudo.

sudo sysctl -w kernel.dmesg_restrict=0

Принудително извеждане на цвят

По подразбиране dmesg вероятно ще бъде конфигуриран да произвежда цветен изход. Ако не е, можете да кажете на dmesg да оцвети изхода си, като използвате опцията -L (цвят).

sudo dmesg -L

За да принудите dmesg винаги да използва цветен дисплей по подразбиране, използвайте тази команда:

sudo dmesg --color=always

Човешки времеви марки

По подразбиране dmesg използва времеви отпечатък от секунди и наносекунди откакто ядрото стартира. За да изобразите това в по-удобен за хората формат, използвайте опцията -H (човешки).

sudo dmesg -H

Това причинява две неща да се случат.

Резултатът автоматично се показва в по-малко.
Отпечатъците за време показват времеви печат с дата и час, с разделителна способност за минути. Съобщенията, които се появяват във всяка минута, са обозначени със секундите и наносекундите от началото на тази минута.

Четими от човека времеви марки

Ако не се нуждаете от наносекундна точност, но искате времеви печати, които са по-лесни за четене от настройките по подразбиране, използвайте опцията -T (четима от човека). (Малко е объркващо. -H е опцията „човек“, -T е опцията за четене от човека.)

sudo dmesg -T

Печатите за време се изобразяват като стандартни дати и часове, но разделителната способност е намалена до минута.

Всичко, което се е случило в рамките на една минута, има една и съща времева марка. Ако всичко, което ви притеснява, е последователността на събитията, това е достатъчно. Също така имайте предвид, че сте изхвърлени обратно в командния ред. Тази опция не извиква автоматично по-малко.

Гледане на събития на живо

За да видите съобщенията, докато пристигат в пръстенния буфер на ядрото, използвайте опцията –follow (изчакайте съобщения). Това изречение може да изглежда малко странно. Ако буферът на пръстена се използва за съхраняване на съобщения от събития, които се случват по време на стартиращата последователност, как могат да пристигнат живи съобщения в буфера на пръстена, след като компютърът е стартиран и работи?

  Как да намерите информация за твърдия диск в Linux

Всичко, което причинява промяна в хардуера, свързан към вашия компютър, ще доведе до изпращане на съобщения до буфера на пръстена на ядрото. Актуализирайте или добавете модул на ядрото и ще видите съобщения за пръстен буфер за тези промени. Ако включите USB устройство или свържете или изключите Bluetooth устройство, ще видите съобщения в изхода на dmesg. Дори виртуалният хардуер ще доведе до появата на нови съобщения в буфера на пръстена. Стартирайте виртуална машина и ще видите нова информация, която пристига в пръстенния буфер.

sudo dmesg --follow

Имайте предвид, че не се връщате в командния ред. Когато се появят нови съобщения, те се показват от dmesg в долната част на прозореца на терминала.

Дори монтирането на CD-ROM диск се разглежда като промяна, защото сте присадили съдържанието на CD-ROM диска в дървото на директориите.

За да излезете от емисията в реално време, натиснете Ctrl+C.

Извличане на последните десет съобщения

Използвайте командата tail за да извлечете последните десет съобщения за пръстен буфер на ядрото. Разбира се, можете да извлечете произволен брой съобщения. Десет е само нашият пример.

sudo dmesg | last -10

Последните десет съобщения се извличат и се изброяват в прозореца на терминала.

Търсене на конкретни термини

Прехвърлете изхода от dmesg през grep за търсене на конкретни низове или модели. Тук използваме опцията -i (игнориране на главния регистър), така че случайът на съвпадащи низове да се пренебрегва. нашите резултати ще включват „usb“ и „USB“ и всяка друга комбинация от малки и главни букви.

sudo dmesg | grep -i usb

Маркираните резултати от търсенето са с главни и малки букви.

Можем да изолираме съобщенията, които съдържат препратки към първото SCSI твърд диск на системната sda. (Всъщност, sda също се използва в наши дни за първият SATA твърд диски за USB устройства.)

sudo dmesg | grep -i sda

Всички съобщения, които споменават sda, са извлечени и изброени в прозореца на терминала.

За да направите grep търсене за няколко термина наведнъж, използвайте опцията -E (разширяване на регулярен израз). Трябва да предоставите думите за търсене вътре в низ в кавички с тръба „|“ разделители между думите за търсене:

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

sudo dmesg |  grep -E

Всяко съобщение, което споменава някой от термините за търсене, е изброено в прозореца на терминала.

изход от sudo dmesg |  grep -E

Използване на регистрационни нива

Всяко съобщение, регистрирано в пръстенния буфер на ядрото, има ниво, прикрепено към него. Нивото представлява важността на информацията в съобщението. Нивата са:

  Как да използвате curl за изтегляне на файлове от командния ред на Linux

emerg: Системата е неизползваема.
предупреждение: Трябва да се предприемат действия незабавно.
crit: Критични условия.
err: Условия за грешка.
предупреди: Предупредителни условия.
забележка: Нормално, но значително състояние.
информация: Информационно.
debug: съобщения на ниво отстраняване на грешки.

Можем да направим dmesg извличащи съобщения, които съответстват на определено ниво, като използваме опцията -l (ниво) и предаваме името на нивото като параметър на командния ред. За да видите само съобщения на ниво „информация“, използвайте тази команда:

sudo dmesg -l info

Всички изброени съобщения са информационни съобщения. Те не съдържат грешки или предупреждения, а само полезни известия.

Комбинирайте две или повече нива на дневник в една команда, за да извлечете съобщения от няколко нива на дневник:

sudo dmesg -l debug,notice

Резултатът от dmesg е комбинация от съобщения на всяко ниво на дневника:

Категории на съоръженията

Съобщенията на dmesg са групирани в категории, наречени „съоръжения“. Списъкът на съоръженията е:

kern: Съобщения на ядрото.
потребител: съобщения на ниво потребител.
поща: Пощенска система.
демон: Системни демони.
auth: Съобщения за сигурност/упълномощаване.
syslog: Вътрешни syslogd съобщения.
lpr: Подсистема за линеен принтер.
новини: Подсистема за мрежови новини.

Можем да помолим dmesg да филтрира изхода си, за да показва съобщения само в определено съоръжение. За да направим това, трябва да използваме опцията -f (съоръжение):

sudo dmesg -f daemon

dmesg изброява всички съобщения, свързани с демони в прозореца на терминала.

Както направихме с нивата, можем да помолим dmesg да изброява съобщения от повече от едно съоръжение наведнъж:

sudo dmesg -f syslog, daemon

Резултатът е смесица от syslog и demon log съобщения.

Комбиниране на съоръжение и ниво

Опцията -x (декодиране) кара dmesg да показва съоръжението и нивото като четими от човека префикси към всеки ред.

sudo dmesg -x

Съоръжението и нивото могат да се видят в началото на всеки ред:

Първият подчертан раздел е съобщение от съоръжението „ядро“ с ниво „известие“. Вторият подчертан раздел е съобщение от съоръжението „ядро“ с ниво „информация“.

Това е страхотно, но защо?

Накратко, откриване на грешки.

Ако имате проблеми с част от хардуера, която не се разпознава или не се държи правилно, dmesg може да хвърли малко светлина върху проблема.

Използвайте dmesg, за да преглеждате съобщения от най-високото ниво надолу през всяко по-ниско ниво, като търсите грешки или предупреждения, които споменават хардуерния елемент или може да имат отношение към проблема.
Използвайте dmesg, за да потърсите някакво споменаване на подходящото съоръжение, за да видите дали съдържа някаква полезна информация.
Прокарайте dmesg през grep и потърсете свързани низове или идентификатори, като например номера на производител на продукти или модели.
Прокарайте dmesg през grep и потърсете общи термини като „gpu“ или „storage“ или термини като „неуспех“, „неуспешен“ или „невъзможен“.
Използвайте опцията –follow и гледайте съобщенията на dmesg в реално време.

Приятно ловуване.