Ядро 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 .
Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.