Введение
Ядро 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
[Tue Jan 28 17:07:07 2020] 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
— внутренние сообщения syslogdlpr
- подсистема построчного принтера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
.