Thank you for reading this post, don't forget to subscribe!
Ядро Linux является ядром операционной системы, которое контролирует доступ к системным ресурсам, таким как ЦП, устройства ввода-вывода, физическая память и файловые системы. Ядро записывает различные сообщения в кольцевой буфер ядра во время процесса загрузки и во время работы системы. Эти сообщения содержат различную информацию о работе системы.
Кольцевой буфер ядра – это часть физической памяти, в которой хранятся сообщения журнала ядра. Он имеет фиксированный размер, что означает, что после заполнения буфера старые записи журналов перезаписываются.
Утилита командной строки dmesg используется для печати и управления кольцевого буфера ядра в Linux и других Unix-подобных операционных систем. Это полезно для изучения загрузочных сообщений ядра и устранения проблем, связанных с оборудованием.
В этой статье мы рассмотрим основы команды dmesg.
Использование команды dmesg
Синтаксис команды dmesg следующий:
1 |
dmesg [OPTIONS] |
При вызове без каких-либо параметров dmesg записывает все сообщения из кольцевого буфера ядра в стандартный вывод:
1 2 |
dmesg |
По умолчанию все пользователи могут запускать команду dmesg. Однако в некоторых системах доступ к ним dmesg может быть ограничен для пользователей без полномочий root. В этой ситуации при вызове dmesg, вы получите сообщение об ошибке, как показано ниже:
1 |
dmesg: read kernel buffer failed: Operation not permitted |
Параметр ядра kernel.dmesg_restrict указывает, могут ли непривилегированные пользователи dmesg просматривать сообщения из буфера журнала ядра. Чтобы снять ограничения, установите его на ноль:
1 2 |
sudo sysctl -w kernel.dmesg_restrict=0 |
Обычно выходные данные содержат много строк информации, поэтому только последняя часть выходных данных является видимой. Чтобы увидеть одну страницу за раз, перенаправьте вывод в утилиту терминала, такую как less или more:
1 2 |
dmesg --color=always | less |
–color=always используются для сохранения цветного вывода.
Если вы хотите отфильтровать буферные сообщения, используйте grep. Например, чтобы просмотреть только сообщения, связанные с USB, вы должны набрать:
1 2 |
dmesg | grep -i usb |
dmesg читает сообщения, сгенерированные ядром, из виртуального файла /proc/kmsg. Этот файл предоставляет интерфейс к кольцевому буферу ядра и может быть открыт только одним процессом. Если процесс syslog запущен в вашей системе и вы пытаетесь прочитать файл с помощью команды cat, или less, команда зависнет.
Демон syslog сбрасывает сообщения ядра /var/log/dmesg, так что вы также можете использовать файл журнала:
1 2 |
cat /var/log/dmesg |
Форматирование вывода dmesg
Команда dmesg предоставляет ряд опций, которые помогут вам отформатировать и отфильтровать вывод.
Один из наиболее часто используемых параметров dmesg- это -H( –human), который обеспечивает удобочитаемый вывод. Эта опция направляет вывод команды в терминал:
1 2 |
dmesg -H |
Для печати удобочитаемых временных отметок используйте опцию -T( –ctime):
1 2 |
dmesg -T |
1 |
[Mon Oct 07 23:12:43 2019] IPv6: ADDRCONF(NETDEV_CHANGE): wlp1s0: link becomes ready |
Формат –time-format <format> отметок времени также может быть установлен с помощью опции, которая может быть ctime, reltime, delta, notime или iso. Например, чтобы использовать дельта-формат, введите:
1 2 |
dmesg --time-format=delta |
Вы также можете объединить два или более вариантов:
1 2 |
dmesg -H -T |
Чтобы просмотреть вывод команды dmesg в режиме реального времени, используйте опцию -w( –follow):
1 2 |
dmesg --follow |
Фильтрация вывода dmesg
Вы можете ограничить вывод dmesg данными объектами и уровнями.
Средство представляет процесс, который создал сообщение. dmesg, поддерживает следующие возможности журнала:
- kern – сообщения ядра
- user – сообщения уровня пользователя
- mail – почтовая система
- daemon – системные демоны
- auth – сообщения безопасности/авторизации
- syslog – внутренние сообщения syslogd
- lpr – подсистема линейного принтера
- news – подсистема сетевых новостей
Опция -f( –facility <list>) позволяет ограничить вывод определенными объектами. Опция принимает одно или несколько разделенных запятыми объектов.
Например, для отображения только сообщений ядра и системных демонов вы должны использовать:
1 2 |
dmesg -f kern,daemon |
Каждое сообщение журнала связано с уровнем журнала, который показывает важность сообщения. dmesg поддерживает следующие уровни журнала:
- emerg – система неработоспособна
- alert – действие должно быть предпринято немедленно
- crit – критические условия
- err – условия ошибки
- warn – условия предупреждения
- notice – нормальное, но значимое состояние
- info – информационный
- debug – сообщения уровня отладки
Опция -l( –level <list>) ограничивает вывод определенными уровнями. Опция принимает один или несколько уровней, разделенных запятыми.
Следующая команда отображает только сообщения об ошибках и критические сообщения:
1 2 |
dmesg -l err,crit |
Очистка кольцевого буфера
Опция -C ( –clear) позволяет очистить кольцевой буфер:
1 2 |
sudo dmesg -C |
Только root или пользователи с привилегиями sudo могут очистить буфер.
Чтобы распечатать содержимое буфера перед очисткой, используйте параметр -c( –read-clear):
1 2 |
sudo dmesg -c |
Если вы хотите сохранить текущие журналы dmesg в файле перед его очисткой, перенаправьте вывод в файл:
1 2 |
dmesg > dmesg_messages |
Заключение
Команда dmesg позволяет вам просматривать и контролировать кольцевой буфер ядра. Это может быть очень полезно при устранении неполадок ядра или аппаратных проблем.
Введите man dmesg в своем терминале для просмотра информации о всех доступных опциях dmesg.