dmesg

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску

dmesg (сокр. от англ. diagnostic message) — команда, используемая в UNIX‐подобных операционных системах для вывода буфера сообщений ядра в стандартный поток вывода (stdout) (по умолчанию на экран).

Во многих Unix-подобных системах процесс загрузки генерирует особенно плотный поток сообщений ядра. Многие административные проблемы сохраняются при успешном перечислении желаемого аппаратного устройства во время процесса загрузки, поэтому процесс диагностики отказавшего устройства часто начинается с проверки вывода dmesg из сообщения идентификации ядра до момента, когда процесс загрузки завершается. Поскольку этот буфер может быть перезаписан потоком сообщений при последующей работе, многие Unix-подобные дистрибутивы сохраняют послезагрузочную копию буфера сообщений в /var/log/dmesg или в другом безопасном системном месте.

Также принято вручную обращаться к текущему буферу dmesg после горячего подключения устройств, особенно USB-устройств (особенно флэш-накопителей), чтобы определить, было ли распознано устройство, скорость передачи данных задействованного порта (разъемы USB 2 и USB 3.0 сидят рядом друг с другом и их трудно различить во многих системах), какой драйвер был назначен и где в файловой системе отображается устройство. Многие дистрибутивы пытаются отображать сообщения о распознавании устройств на рабочем столе, часто через всплывающее окно вверх, но это не всегда достоверно или представленная информация неполна. (Кроме того, для получения уведомлений на рабочем столе устройство с возможностью горячей замены должно быть разрешено политикой безопасности системы).

Многие строки dmesg в традиционной системе начинаются с имени устройства, за которым следует двоеточие, а затем какой-то подробный текст. Часто они объединяются в кластеры, когда одно и то же устройство появляется на нескольких строках подряд. Каждый кластер обычно связан с одним перечислением устройств одним конкретным драйвером устройства (или средством устройства), связанным с именем устройства.

Каждый такой драйвер или объект выдает диагностическую информацию в своем собственном выбранном формате и, как правило, включает в себя все наиболее важные технические детали в плотной и загадочной записи. Страница руководства, связанная с драйвером устройства, иногда документирует формат сообщения. Например, имя устройства da0 (прямой доступ SCSI 0) — это часто встречающееся имя устройства, связанное с флэш-накопителями USB. man da в командной строке — без конечного номера — вызовет документацию для этого класса драйвера во многих системах. Даже если точный формат строк, записываемых в системный буфер, здесь не описывается, интересующие параметры обычно определяются, хотя вам может потребоваться дальнейшее изучение соответствующих справочных страниц (перечисленных в нижней части традиционной справочной страницы) для полного понимания. Обзор, охватывающий различные уровни аппаратной абстракции.

Загрузка ОС

[править | править код]

Первым делом в dmesg попадают сообщения о загрузке ядра ОС в память компьютера. А также сообщения о загрузке драйверов для соответствующего оборудования. Уровень детализации сообщений регулируется параметрами загрузчика.

После загрузки ОС

[править | править код]

Даже после того как ОС полностью загрузилась, ядро может писать в лог дополнительные диагностические сообщения например, когда появляются ошибки ввода-вывода, или при подключении USB устройств. dmesg предоставляет механизм для рассмотрения этих сообщений постфактум.

Представление информации

[править | править код]

Все сообщения dmesg занимают несколько страниц, поэтому есть смысл использовать стандартные утилиты для работы с текстом, такие как more, tail, less или grep. Сообщения dmesg часто попадают в системный журнал через демон журналирования, такой как syslog. В Linux системах этот лог обычно находится в /var/log.

Некоторые коммерческие ОС при загрузке ядра показывают лого, из-за которого пользователю не видно сообщений от ядра. Однако, в некоторых системах в этот момент можно переключиться с лого на сообщения dmesg с помощью кнопки 'Esc'. Это бывает полезно при диагностике в случае ошибки загрузки системы.

Некоторые аргументы (опции) утилиты dmesg

[править | править код]

--decode, преобразует числовое значение уровней загрузки и параметры операции в понятные текстовые примечания

Фильтрация сообщений в соответствии с опциями --facility и --level. Например:

dmesg --level=err,warn

dmesg --facility=daemon,user

dmesg --facility=daemon --level=debug

-u, --userspace для вывода сообщений пользовательского уровня

-k, --kernel для вывода сообщений уровня ядра

-t, --notime для удаления из вывода временных отметок

-T, --ctime для вывода времени в формате, подобном ctime(). Однако этот ключ бесполезен после использования ждущего режима и выхода из него. (Для printk() после окончания ждущего режима ядро не использует обычное системное время и поэтому временные значения не изменяются.)

--show-delta для вывода длительности промежутка между сообщениями[1]

-c - Очистить содержимое буфера сообщений ядра после вывода.

-s [размер буфера] - Использовать для буфера сообщений ядра, буфер размером [размер буфера]. По умолчанию его размер 16392 байт.

-n [уровень] - Установить уровень, на котором сообщения системного журнала будут выводиться на консоль.

Например, -n 1 предотвращает вывод на консоль всех сообщений, за исключением явно тревожных.

-w, --follow - Ожидание новых сообщений. (наподобие tailf/tail -f)

Примечания

[править | править код]
  1. Karel Zak. dmesg(1) changes for util-linux 2.20 (20 июля 2011). Дата обращения: 7 января 2015. Архивировано 7 января 2015 года.