Команда Dmesg в Linux

Ядро Linux — это ядро операционной системы, которое контролирует доступ к системным ресурсам, таким как ЦП, устройства ввода-вывода, физическая память и файловые системы. Ядро записывает различные сообщения в кольцевой буфер ядра во время процесса загрузки и во время работы системы. Эти сообщения содержат различную информацию о работе системы.

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

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

В этом руководстве мы рассмотрим основы команды dmesg .

Использование команды dmesg

Синтаксис команды dmesg следующий:

dmesg [OPTIONS]

При запуске без каких-либо параметров dmesg записывает все сообщения из кольцевого буфера ядра в стандартный вывод:

dmesg

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

dmesg: read kernel buffer failed: Operation not permitted

Параметр ядра kernel.dmesg_restrict указывает, могут ли непривилегированные пользователи использовать dmesg для просмотра сообщений из буфера журнала ядра. Чтобы снять ограничения, установите его на ноль:

sudo sysctl -w kernel.dmesg_restrict=0

Обычно вывод содержит много строк информации, поэтому видна только последняя часть вывода. Чтобы видеть по одной странице за раз, направьте вывод в утилиту пейджера, например, less или more :

dmesg --color=always | less

--color=always используется для сохранения цветного вывода.

Если вы хотите фильтровать сообщения буфера, используйте grep . Например, чтобы просмотреть только сообщения, относящиеся к USB, вы должны ввести:

dmesg | grep -i usb

dmesg читает сообщения, генерируемые ядром, из виртуального файла /proc/kmsg . Этот файл предоставляет интерфейс для кольцевого буфера ядра и может быть открыт только одним процессом. Если в вашей системе запущен процесс syslog и вы пытаетесь прочитать файл с помощью cat или less , команда зависнет.

Демон syslog выгружает сообщения ядра в /var/log/dmesg , поэтому вы также можете использовать этот файл журнала:

cat /var/log/dmesg

Формирование вывода dmesg

Команда dmesg предоставляет ряд параметров, которые помогут вам отформатировать и отфильтровать вывод.

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

dmesg -H

Чтобы напечатать удобочитаемые метки времени, используйте параметр -T ( --ctime ):

dmesg -T
[Mon Oct 14 14:38:04 2019] IPv6: ADDRCONF(NETDEV_CHANGE): wlp1s0: link becomes ready

Формат временных меток также можно установить с помощью параметра --time-format <format> , который может быть ctime, reltime, delta, notime или iso. Например, чтобы использовать формат дельты, введите:

dmesg --time-format=delta

Также можно комбинировать два и более варианта:

dmesg -H -T

Для просмотра вывода команды dmesg в реальном времени используйте параметр -w ( --follow ):

dmesg --follow

Фильтрация вывода dmesg

Вы можете ограничить вывод dmesg определенными объектами и уровнями.

Средство представляет процесс, создавший сообщение. dmesg поддерживает следующие средства dmesg журнала:

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

Параметр -f ( --facility <list> ) позволяет ограничить вывод определенными объектами. Параметр принимает одно или несколько разделенных запятыми объектов.

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

dmesg -f kern,daemon

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

  • emerg — система не работает
  • alert — действие должно быть предпринято немедленно
  • crit — критические условия
  • err — условия ошибки
  • warn — условия предупреждения
  • notice — нормальное, но существенное состояние
  • info — информационный
  • debug — сообщения уровня отладки

Параметр -l ( --level <list> ) ограничивает вывод определенными уровнями. Параметр принимает один или несколько уровней, разделенных запятыми.

Следующая команда отображает только сообщения об ошибках и критические сообщения:

dmesg -l err,crit

Очистка кольцевого буфера

Параметр -C ( --clear ) позволяет очистить кольцевой буфер:

sudo dmesg -C

Только root или пользователи с привилегиями sudo могут очистить буфер.

Чтобы распечатать содержимое буфера перед очисткой, используйте параметр -c ( --read-clear ):

sudo dmesg -c

Если вы хотите сохранить текущие журналы dmesg в файле перед его очисткой, перенаправьте вывод в файл:

dmesg > dmesg_messages

Выводы

Команда dmesg позволяет вам просматривать и управлять кольцевым буфером ядра. Это может быть очень полезно при устранении неполадок ядра или оборудования.

Введите man dmesg в свой терминал, чтобы получить информацию обо всех доступных опциях dmesg .

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

Оставьте комментарий