Ядро 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), который обеспечивает удобочитаемый вывод. Эта опция направляет вывод команды в терминал:
dmesg -H
Для печати удобочитаемых временных отметок используйте опцию -T( –ctime):
dmesg -T
[Mon Oct 07 23:12:43 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, поддерживает следующие возможности журнала:
- 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.
Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.