Как я могу увидеть результат dmesg по мере его изменения?

Я пишу драйвер устройства, который выводит сообщение об ошибке в вывод ring buffer dmesg. Я хочу видеть результат dmesg по мере его изменения.

Как я могу это сделать?

113 голосов | спросил Milad Khajavi 13 +04002013-10-13T12:19:05+04:00312013bEurope/MoscowSun, 13 Oct 2013 12:19:05 +0400 2013, 12:19:05

7 ответов


128

Относительно недавние версии dmesg предоставляют следующий вариант (-w, --follow)), который работает аналогично tail -f.

Таким образом, просто используйте следующую команду:

$ dmesg -wH

(-H, --human) позволяет использовать удобные функции, такие как цвета, относительное время)

Эти параметры доступны, например, в Fedora 19.

ответил maxschlepzig 13 +04002013-10-13T15:01:36+04:00312013bEurope/MoscowSun, 13 Oct 2013 15:01:36 +0400 2013, 15:01:36
45

Вы можете использовать команду watch, которая предназначена именно для таких вещей

watch -n 0.1 "dmesg | tail -n $((LINES-6))"

часть $((LINES-6)) должна хорошо вписаться в ваш терминал.

ответил peterph 13 +04002013-10-13T12:47:10+04:00312013bEurope/MoscowSun, 13 Oct 2013 12:47:10 +0400 2013, 12:47:10
9

Вы используете dmesg для получения сообщений журнала ядра.

Само ядро ​​входит в кольцевой буфер, т. е. только в памяти. Теперь все dmesg выводит содержимое этого кольцевого буфера. Если вы выполните dmesg -c, он также удалит буферный буфер.

Поэтому вы можете сделать что-то вроде while true; do dmesg -c; sleep 1; done, чтобы иметь что-то вроде эквивалента не работающего dmesg|tail. Но это удаляет кольцевой буфер и поэтому требует прав root.

Другим способом является файл /proc/kmsg, который позволяет просматривать кольцевой буфер. Вы можете сделать tail -f /proc/kmsg, но это разрешено только одному процессу, и это обычно ваш демон протоколирования. - Задача состоит в том, чтобы читать сообщения и записывать их в реальные файлы (обычно в /var /log), где они могут быть прочитаны. Он может быть настроен для вывода всех сообщений в один файл или разные части в разные файлы. (Но конфигурация зависит от демона регистрации вашей системы.)

Поэтому ознакомьтесь с /var/log, если есть файл, который соответствует вашим потребностям и в противном случае настроит вашего демона регистрации.

ответил michas 13 +04002013-10-13T13:21:48+04:00312013bEurope/MoscowSun, 13 Oct 2013 13:21:48 +0400 2013, 13:21:48
8

вы не можете напрямую отслеживать вывод dmesg.

однако есть вероятность, что ваш модуль не печатает непосредственно в кольцевой буфер dmesg, а вместо этого использует средства ведения журнала ядра (которые затем будут отображаться с помощью dmesg). если ваш syslog имеет некоторые нормальные настройки (например, по умолчанию), эти сообщения, скорее всего, также будут отображаться в файле kern.log.

, чтобы вы могли сделать что-то вроде:

 tail -f /var/log/kern.log
ответил umläute 13 +04002013-10-13T12:22:44+04:00312013bEurope/MoscowSun, 13 Oct 2013 12:22:44 +0400 2013, 12:22:44
5

Если вы используете встроенную систему, то busybox, который является общим для таких систем, как OpenWRT, имеет очень ограниченную функциональность и поддерживается только 2-3 флага.

Если вы хотите быстро и грязно печатать выходные данные dmesg на экране постоянно по мере изменения событий, простой цикл bash отлично работает. Это не идеально, но, как я уже говорил, у BusyBox dmesg отсутствует множество функций. Я обнаружил, что при вводе в командную строку тот же эффект:

$ while true; do dmesg -c ; sleep 1 ; done

вы можете выйти из цикла с помощью Ctrl-C sleep 1 - остановить его, избивая CPU без необходимости, а флаг -c очищает буфер при каждом вызове, поэтому вы не видите повторный вывод каждую секунду, надейтесь, что это поможет!

ответил user241342 30 Maypm16 2016, 14:34:56
4

В системах, использующих systemd, вы также можете:

# journalctl -kf
ответил Maxim 28 MarpmFri, 28 Mar 2014 18:32:09 +04002014-03-28T18:32:09+04:0006 2014, 18:32:09
1

Используйте эти 2 команды из отдельных терминалов:

  1. while true; do dmesg -c >> test.txt;sleep 1; done
  2. tail -f test.txt

Он достигнет аналогичного результата.

ответил K_K 26 J0000006Europe/Moscow 2015, 09:34:31

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132