Ядро операционной системы Linux как любая программа может выводить информационные сообщения, сообщения об ошибках, критические сообщения в специальный буфер, который называется kernel ring buffer. В процессе загрузки операционной системы сервис Syslog ещё не запущен, именно поэтому сообщения ядра пишутся в отдельный буфер.
Кольцевой буфер — это пространство памяти, зарезервированное для сообщений. Он прост по конструкции и имеет фиксированный размер. Когда он заполнен, новые сообщения перезаписывают самые старые сообщения.
Для получения данных из буфера можно прочитать файл /var/log/dmesg. Но удобнее это делать с помощью команды dmesg.
dmesg
Дебажим и траблшутим вместе. Кольцевой буфер является хорошим местом для начала расследования аппаратных ошибок или других проблем с запуском.
Синтаксис команды dmesg
dmesg опцииПосмотреть список опций:
dmesg -h
dmesg --help
man dmesgОсновные опции dmesg
- -C, --clear - очистка буфера
- -c, --read-clear - вывести сообщения и очистить буфер
- -D, --console-off - отключить вывод сообщений в консоль
- -E, --console-on - включить вывод сообщений в консоль
- -F, --file <file> - использовать файл вместо буфера журнала ядра
- -f, --facility <list> - ограничить вывод на определённые объекты
- -H, --human - человекочитаемый вывод
- -k, --kernel - вывести только сообщения ядра
- -L, --color[=<when>] - раскрашивать сообщения (авто, всегда или никогда), цветной шрифт по умолчанию поддерживается
- -l, --level <list> - ограничить вывод указанным уровнем подробности
- -n, --console-level <level> - установить уровень сообщений, выводимых на консоль
- -P, --nopager - выводить информацию без постраничной навигации
- -p, --force-prefix - принудительно выводить временную метку в каждой строке многострочных сообщений
- -r, --raw - печатать сообщения как есть вместе со служебными префиксами
- --noescape - не экранировать непечатные символы
- -S, --syslog - использовать Syslog для чтения сообщений от ядра, по умолчанию используется файл /dev/kms
- -s, --buffer-size <size> - размер буфера для запроса кольцевого буфера ядра
- -u, --userspace - показывать только сообщения из пространства пользователя
- -w, --follow - вывести сообщения и ждать новые
- -W, --follow-new - ждать новые сообщения
- -x, --decode - выводить категорию и уровень журналирования в удобном для чтения формате
- -d, --show-delta - показывать разницу во времени между сообщениями
- -e, --reltime - показывать время и дельту времени в удобочитаемом формате
- -T, --ctime - выводить время в удобном для человека формате
- -t, --notime - не показывать время
- --time-format <format> - показывать временную метку, используя заданный формат: [delta|reltime|ctime|notime|iso]
- --since <time> - задать начальное время
- --until <time> - задать конечное время
- -h, --help - помощь
- -V, --version - версия
Категории журналирования
- kern - сообщения ядра
- user - сообщения пространства пользователя
- mail - сообщения сервиса почты
- daemon - сообщения системных служб
- auth - сообщения безопасности/авторизации
- syslog - сообщения сервиса syslogd
- lpr - сообщения подсистемы печати
- news - сообщения подсистемы сетевых новостей
Уровни журналирования
- emerg - ошибки неработоспособности системы
- alert - требуется вмешательство пользователя
- crit - критическая ошибка
- err - ошибка
- warn - предупреждение
- notice - замечание
- info - информационное сообщение
- debug - отладочное сообщение
Примеры
Вывод всех сообщений. По умолчанию перед сообщением выводится только временной сдвиг от загрузки системы.
dmesgЕсли нужно отобразить время в читаемом формате, то:
dmesg -TПоиск:
dmesg | grep nvme
dmesg | grep -i USB
dmesg | grep -E "(mpt|scsi|sd)" | lessТолько сообщения ядра:
dmesg -kЛовить новые сообщения:
dmesg -w
dmwsg -WРаскрасить и включить постраничную навигацию:
dmesg -HДобавить категорию и уровень логирования:
dmesg -xОтобразить только ошибки:
dmesg -l crit,errСообщения пользователя:
dmesg -uИли отфильтровать по категориям:
dmesg -f user,daemonОчистить буфер (не делайте это на проде):
dmesg -CПримечания
dmesg -T не гарантирует того, что вы увидите реальное время.
Проверить какое время отображается в dmesg можно записав тестовое сообщение:
echo "Test dmesg message" > /dev/kmsg
