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