Поиск по сайту:

Как использовать команду dmesg в Linux


Команда dmesg позволяет заглянуть в скрытый мир процессов запуска Linux. Просматривайте и отслеживайте сообщения аппаратных устройств и драйверов из собственного кольцевого буфера ядра с помощью «друга по поиску неисправностей».

Как работает кольцевой буфер Linux

В Linux и Unix-подобных компьютерах загрузка и запуск являются двумя отдельными фазами последовательности событий, происходящих при включении компьютера.

процессы загрузки (BIOS или UEFI, MBR и GRUB) выполняют инициализацию системы до момента, когда ядро загружается в память и подключается к начальному виртуальному диску (initrd или initramfs), а systemd запущен.

Затем процессы запуска принимают эстафетную палочку и завершают инициализацию операционной системы. На самых ранних этапах инициализации демоны ведения журналов, такие как syslogd или rsyslogd, еще не запущены и не работают. Чтобы избежать потери заметных сообщений об ошибках и предупреждений на этом этапе инициализации, ядро содержит кольцевой буфер, который используется в качестве хранилища сообщений.

Кольцевой буфер — это пространство памяти, зарезервированное для сообщений. Он прост по конструкции и имеет фиксированный размер. Когда он заполнен, новые сообщения перезаписывают самые старые сообщения. Концептуально его можно представить как «круговой буфер».

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

Но не идите с пустыми руками. Возьмите dmesg с собой.

Команда dmesg

Команда dmesg позволяет просматривать сообщения, хранящиеся в кольцевом буфере. По умолчанию вам нужно использовать sudo для использования dmesg.

sudo dmesg

Все сообщения в кольцевом буфере отображаются в окне терминала.

Это был потоп. Очевидно, нам нужно передать его через less:

sudo dmesg | less

Теперь мы можем прокручивать сообщения в поисках интересующих элементов.

Вы можете использовать функцию поиска в less, чтобы найти и выделить интересующие вас элементы и термины. Запустите функцию поиска, нажав клавишу косой черты «/» в less. .

Удаление необходимости в 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

Это приводит к двум вещам.

  • Вывод автоматически отображается в формате less.
  • Временные метки показывают временную метку с датой и временем с минутным разрешением. Сообщения, которые появлялись каждую минуту, помечаются секундами и наносекундами с начала этой минуты.

Удобочитаемые временные метки

Если вам не требуется точность в наносекундах, но вы хотите, чтобы временные метки было легче читать, чем значения по умолчанию, используйте параметр -T (человекочитаемый). (Это немного сбивает с толку. -H — это вариант «человек», -T — вариант «удобочитаемый».)

sudo dmesg -T

Временные метки отображаются как стандартные даты и время, но разрешение снижено до минуты.

Все, что произошло в течение одной минуты, имеет одинаковую отметку времени. Если вас беспокоит только последовательность событий, этого достаточно. Также обратите внимание, что вы вернетесь обратно в командную строку. Эта опция не вызывает автоматически less.

Просмотр прямых трансляций

Чтобы видеть сообщения по мере их поступления в кольцевой буфер ядра, используйте параметр --follow (ожидание сообщений). Эта фраза может показаться немного странной. Если кольцевой буфер используется для хранения сообщений о событиях, происходящих во время последовательности запуска, как оперативные сообщения могут поступать в кольцевой буфер после запуска компьютера?

Любое изменение оборудования, подключенного к вашему компьютеру, приведет к отправке сообщений в кольцевой буфер ядра. Обновите или добавьте модуль ядра, и вы увидите сообщения кольцевого буфера об этих изменениях. Если вы подключите 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"

Любое сообщение, в котором упоминается любое из условий поиска, отображается в окне терминала.

Использование уровней журнала

Каждое сообщение, зарегистрированное в кольцевом буфере ядра, имеет привязанный к нему уровень. Уровень представляет важность информации в сообщении. Уровни:

  • появление: система непригодна для использования.
  • предупреждение: необходимо принять меры немедленно.
  • crit: критические условия.
  • ошибка: условия ошибки.
  • предупреждать: предупреждающие условия.
  • примечание: нормальное, но существенное состояние.
  • информация: информационная.
  • debug: сообщения уровня отладки.

Мы можем заставить dmesg извлекать сообщения, соответствующие определенному уровню, используя параметр -l (уровень) и передавая имя уровня в качестве параметра командной строки. Чтобы увидеть только сообщения «информационного» уровня, используйте эту команду:

sudo dmesg -l info

Все перечисленные сообщения являются информационными сообщениями. Они не содержат ошибок или предупреждений, только полезные уведомления.

Объедините два или более уровня журнала в одну команду, чтобы получить сообщения нескольких уровней журнала:

sudo dmesg -l debug,notice

Вывод dmesg представляет собой смесь сообщений каждого уровня журнала:

Категории объектов

Сообщения dmesg сгруппированы в категории, называемые «услуги». Список объектов таков:

  • kern: сообщения ядра.
  • пользователь: сообщения уровня пользователя.
  • почта: почтовая система.
  • демон: системные демоны.
  • auth: сообщения безопасности/авторизации.
  • syslog: внутренние сообщения syslogd.
  • lpr: подсистема построчного принтера.
  • новости: подсистема сетевых новостей.

Мы можем попросить dmesg отфильтровать его вывод, чтобы показывать сообщения только в определенном объекте. Для этого мы должны использовать опцию -f (facility):

sudo dmesg -f daemon

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

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

sudo dmesg -f syslog, daemon

Вывод представляет собой смесь сообщений системного журнала и журнала демона.

Сочетание объекта и уровня

Опция -x (декодирование) заставляет dmesg показывать средство и уровень в виде удобочитаемых префиксов для каждой строки.

sudo dmesg -x

Объект и уровень можно увидеть в начале каждой строки:

Первый выделенный раздел — это сообщение от средства «ядро» с уровнем «уведомления». Второй выделенный раздел — это сообщение от средства «ядро» с уровнем «информация».

Это здорово, но почему?

В общем, поиск неисправности.

Если у вас возникли проблемы с аппаратным обеспечением, которое не распознается или работает неправильно, dmesg может пролить свет на проблему.

  • Используйте dmesg для просмотра сообщений от самого высокого уровня до каждого нижнего уровня в поисках любых ошибок или предупреждений, в которых упоминается элемент оборудования или которые могут иметь отношение к проблема.
  • Используйте dmesg для поиска любого упоминания соответствующего объекта, чтобы узнать, содержат ли они какую-либо полезную информацию.
  • Пропустите dmesg через grep и найдите связанные строки или идентификаторы, такие как производитель продукта или номера моделей.
  • Пропустите dmesg через grep и найдите общие термины, такие как «gpu» или «хранилище», или такие термины, как «сбой», «не удалось» или «не удалось».
  • Используйте параметр --follow и просматривайте сообщения dmesg в режиме реального времени.

Хорошей охоты.

RELATED: Best Linux Laptops for Developers and Enthusiasts