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

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

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

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

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

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

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

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

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

Команда dmesg

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

sudo dmesg

sudo dmesg в окне терминала

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

Вывод из sudo dmesg в окне терминала

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

sudo dmesg | less

sudo dmesg |  меньше в окне терминала

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

вывод dmesg меньше в окне терминала

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

  Как использовать Dropbox в Linux

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

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

sudo sysctl -w kernel.dmesg_restrict=0

sudo sysctl -w kernel.dmesg_restrict = 0 в окне терминала

Принудительный вывод цвета

По умолчанию dmesg, вероятно, будет настроен на цветной вывод. Если это не так, вы можете указать dmesg раскрасить свой вывод с помощью параметра -L (цвет).

sudo dmesg -L

sudo dmesg -L в окне терминала

Чтобы заставить dmesg всегда по умолчанию использовать цветной дисплей, используйте эту команду:

sudo dmesg --color=always

sudo dmesg --color = всегда в окне терминала

Метки времени человека

По умолчанию dmesg использует обозначение времени в секундах и наносекунды с момента запуска ядра. Чтобы отобразить это в более удобном для человека формате, используйте параметр -H (человек).

sudo dmesg -H

sudo dmesg -H в окне терминала

Это вызывает две вещи.

вывод sudo dmesg -H в окне терминала

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

Метки времени, удобочитаемые человеком

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

sudo dmesg -T

sudo dmesg -T в окне терминала

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

вывод sudo dmesg -T в окне терминала

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

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

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

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

sudo dmesg --follow

sudo dmesg - следовать в окне терминала

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

  Как перейти с Bash на Fish Shell в Linux

Вывод из sudo dmesg - следовать за окном терминала

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

сообщения кольцевого буфера dmesg в результате монтирования диска CD-ROM

Чтобы выйти из ленты в реальном времени, нажмите Ctrl + C.

Получить последние десять сообщений

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

sudo dmesg | last -10

sudo dmesg |  последний -10 в окне терминала

Последние десять сообщений извлекаются и отображаются в окне терминала.

Вывод из sudo dmsesg |  хвост -10 в окне терминала

Поиск конкретных терминов

Передайте вывод из dmesg через grep для поиска определенных строк или шаблонов. Здесь мы используем параметр -i (игнорировать регистр), чтобы не учитывать случай совпадения строк. наши результаты будут включать «usb» и «USB», а также любую другую комбинацию строчных и прописных букв.

sudo dmesg | grep -i usb

sudo dmesg |  grep -i usb в окне терминала

Выделенные результаты поиска отображаются в верхнем и нижнем регистре.

Результаты поиска, показывающие результаты в верхнем и нижнем регистре в окне терминала

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

sudo dmesg | grep -i sda

sudo dmesg |  grep -i sda в окне терминала

Все сообщения, в которых упоминается sda, извлекаются и отображаются в окне терминала.

вывод sudo dmesg |  grep -i sda в окне терминала

Чтобы grep искать одновременно несколько терминов, используйте параметр -E (расширить регулярное выражение). Вы должны указать условия поиска внутри строки в кавычках с вертикальной чертой «|» разделители между поисковыми запросами:

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

sudo dmesg |  grep -E

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

вывод из sudo dmesg |  grep -E

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

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

Emerg: Система непригодна для использования.
предупреждение: действие необходимо предпринять немедленно.
крит: Критические условия.
err: условия ошибки.
предупреждение: условия предупреждения.
Примечание: нормальное, но серьезное состояние.
информация: Информационная.
debug: сообщения уровня отладки.

  Как исправить Dropbox для компьютеров с Linux, которые не используют Ext4

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

sudo dmesg -l info

sudo dmesg -l информация в окне терминала

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

Вывод sudo dmesg -l info в окне терминала

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

sudo dmesg -l debug,notice

sudo dmesg -l debug, уведомление в окне терминала

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

Вывод из sudo dmesg -l debug, уведомление в окне терминала

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

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

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

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

sudo dmesg -f daemon

sudo dmesg -f демон в окне терминала

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

вывод sudo dmesg -f daemon в окне терминала

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

sudo dmesg -f syslog, daemon

sudo dmesg -f syslog, демон в окне терминала

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

вывод из sudo dmesg -f syslog, демон в окне терминала

Объединение помещения и уровня

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

sudo dmesg -x

sudo dmesg -x в окне терминала

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

Вывод sudo dmesg -x в окне терминала

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

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

Одним словом, поиск неисправностей.

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

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

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