Команда dmesg предназначена для задействования одноименной утилиты, осуществляющей вывод сообщений ядра ОС. В процессе загрузки и функционирования операционной системы ее ядро генерирует множество сообщений, которые позволяют диагностировать различные проблемы с аппаратным и программным обеспечением. Если говорить более предметно, ядро Linux записывает сообщения в кольцевой буфер (область памяти фиксированного размера, в которой осуществляется перезапись устаревших сообщений при добавлении новых), а утилита использует специальный файл /proc/kmesg для доступа к содержимому этого буфера. Данная команда может оказаться крайне полезной в процессе диагностики состояния устройств системы, поэтому ее стоит использовать в первую очередь при возникновении любых аппаратных сбоев.
Базовый синтаксис команды выглядит следующим образом:
$ dmesg [параметры]
Стоит отметить, что в некоторых дистрибутива команда может исполняться лишь от лица пользователя root (что вполне логично, ведь диагностика системы — дело системного администратора). Вообще, утилита может принимать большое количество различных параметров, но чаще всего используется без них. Наиболее полезными ее параметрами являются такие, как параметр -T, позволяющий выводить понятные человеку метки времени, параметры -k и -u, позволяющие выводить лишь сообщения, относящиеся к пространству ядра и пространству пользователя соответственно, параметр -c, позволяющий очистить содержимое кольцевого буфера ядра после вывода, параметр -w, позволяющий вместо завершения работы утилиты ожидать новые сообщения, а также параметры --level и --facility, позволяющие указать приоритет и источник интересующих пользователя сообщений.
В качестве приоритетов сообщений могут использоваться следующие идентификаторы:
Идентификатор | Значение |
emerg |
Сообщения о событиях, сделавших систему неработоспособной |
alert |
Сообщения о событиях, на которые пользователь должен немедленно отреагировать |
crit |
Сообщения о критических событиях |
err |
Сообщения об ошибках |
warn |
Предупреждения |
notice |
Сообщения о важных событиях |
info |
Информационные сообщения |
debug |
Отладочные сообщения |
В качестве источников сообщений — следующие идентификаторы:
Идентификатор | Значение |
kern |
Сообщения от ядра ОС |
user |
Сообщения из пространства пользователя |
mail |
Сообщения от подсистемы отправки электронной почты |
daemon |
Сообщения от системных служб (демонов) |
auth |
Сообщения от системы безопасности/авторизации |
syslog |
Сообщения от службы системных журналов (для внутреннего использования) |
lpr |
Сообщения от подсистемы печати |
news |
Сообщения от подсистемы сетевых новостей |
Также нередко для фильтрации вывода dmesg используются такие утилиты, как grep, head, tail, less и more поэтому для продуктивной работы с утилитой dmesg не помешает ознакомиться и с их функциями.
Для вывода всех сообщений ядра ОС может использоваться утилита dmesg без каких-либо параметров:
# dmesg
[ 0.000000] microcode: microcode updated early to revision 0xd0, date = 2010-09-30
[ 0.000000] Linux version 4.18.0-2-amd64 ([email protected]) (gcc version 7.3.0 (Debian 7.3.0-29)) #1 SMP Debian 4.18.10-2 (2018-10-07)
…
Далее будет выведено большое количество системных сообщений, многие из которых могут представлять интерес, особенно в случае неполадок.
Если вам нужно постепенно изучить все сообщения, вы можете воспользоваться утилитами less и more:
# dmesg | more
[ 0.000000] microcode: microcode updated early to revision 0xd0, date = 2010-09-30
[ 0.000000] Linux version 4.18.0-2-amd64 ([email protected]) (gcc version 7.3.0 (Debian 7.3.0-29)) #1 SMP Debian 4.18.10-2 (2018-10-07)
…
--More--
# dmesg | less
[ 0.000000] microcode: microcode updated early to revision 0xd0, date = 2010-09-30
[ 0.000000] Linux version 4.18.0-2-amd64 ([email protected]) (gcc version 7.3.0 (Debian 7.3.0-29)) #1 SMP Debian 4.18.10-2 (2018-10-07)
…
:
Утилита less позволяет проматывать сообщения как вперед, так и назад, утилита more — только вперед.
Для вывода исключительно важных сообщений следует использовать соответствующие приоритеты:
# dmesg --level=emerg,alert,crit,err,warn
[ 0.032000] core: PEBS disabled due to CPU errata
[ 0.036206] mtrr: your CPUs had inconsistent variable MTRR settings
[ 0.053809] pci 0000:00:01.0: ASPM: current common clock configuration is broken, reconfiguring
[ 0.088573] pci 0000:03:00.0: [Firmware Bug]: disabling VPD access (can't determine size of non-standard VPD format)
…
Очевидно, что теперь в выводе отражены лишь явные проблемы с аппаратным обеспечением, которые в моем случае были решены ядром самостоятельно.
Для вывода всех сообщений, относящихся к определенным устройствам, достаточно отфильтровать вывод утилиты с помощью утилиты grep:
# dmesg | grep dvb
[ 13.019352] dvbdev: DVB: registering new adapter (Mantis DVB adapter)
[ 13.143788] dvb-usb: found a 'Mygica T230 DVB-T/T2/C' in warm state.
[ 13.384098] dvb-usb: will pass the complete MPEG2 transport stream to the software demuxer.
[ 13.384305] dvbdev: DVB: registering new adapter (Mygica T230 DVB-T/T2/C)
[ 13.944318] rc rc0: lirc_dev: driver dvb_usb_cxusb registered at minor = 0, scancode receiver, no transmitter
[ 13.944319] dvb-usb: schedule remote query interval to 100 msecs.
[ 13.944509] dvb-usb: Mygica T230 DVB-T/T2/C successfully initialized and connected.
Это информация обо всех подключенных к компьютеру DVB-картах. Аналогичным образом можно получить все сообщения, относящиеся к устройствам других типов.
Для вывода всех сообщений из пространства пользователя достаточно воспользоваться параметром -u утилиты dmesg:
# dmesg -u
[ 7.483329] systemd[1]: systemd 239 running in system mode. (+PAM +AUDIT +SELINUX +IMA +APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 +SECCOMP +BLKID +ELFUTILS +KMOD -IDN2 +IDN -PCRE2 default-hierarchy=hybrid)
[ 7.500111] systemd[1]: Detected architecture x86-64.
[ 7.527333] systemd[1]: Set hostname to <debian>.
…
Очевидно, что это сообщения от менеджера инициализации systemd.