
Ядро 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 14 14:38:04 2019] IPv6: ADDRCONF(NETDEV_CHANGE): wlp1s0: link becomes ready
Формат временных меток также можно задать с помощью параметра --time-format , который может принимать значения ctime, reltime, delta, notime или iso. Например, чтобы использовать формат delta, введите:
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 ) позволяет ограничить вывод определёнными объектами. Параметр принимает один или несколько объектов, разделённых запятыми.
Например, чтобы отобразить только сообщения ядра и системных демонов, можно использовать:
dmesg -f kern,daemon
Каждое сообщение журнала связано с уровнем журнала, который показывает важность сообщения. dmesg поддерживает следующие уровни журнала:
-
emerg— система непригодна к использованию -
alert— необходимо немедленно принять меры -
crit— критические состояния -
err— ошибочные состояния -
warn— условия предупреждения -
notice— нормальное, но важное состояние -
info— информационный -
debug— сообщения уровня отладки
Параметр -l ( --level ) ограничивает вывод определёнными уровнями. Параметр принимает один или несколько уровней, разделённых запятыми.
Следующая команда отображает только сообщения об ошибках и критические сообщения:
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 .
Если у вас есть вопросы или пожелания, не стесняйтесь оставлять комментарии.
Связанные руководства