Как я могу видеть вывод dmesg, когда он изменяется?

Благодаря указателю на статью Arch Wiki о Avahi от Ulrich Dangel это - то, что я сделал:

  1. Установите avahi и nss-mdns $ sudo pacman -S avahi nss-mdns
  2. Добавить /etc/rc.d/avahi-daemon start в конец rc.local
  3. Так как я работаю dhcpcd, в /etc/dhcpcd.conf Я прокомментировал noipv4ll строка.
  4. Я также работал $ sudo /usr/sbin/avahi-autopid -D wlan0. Так как мне не нравится перезапускать, я не уверен, был ли шаг 3 необходим.
  5. В /etc/nsswitch.conf Я установил строку для чтения hosts: files mdns4_minimal dns mdns4.
  6. Затем я работал $ sudo /etc/rc.d/dbus restart перезапускать dbus.

После этого, просто выполнение ssh wayne@other.local просто работавший.

148
13.10.2013, 11:24
7 ответов

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

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

$ dmesg -wH

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

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

189
27.01.2020, 19:28
  • 1
    Хорошая находка! Хинду не делает grok -H но иначе пятно - на –  unperson325680 13.10.2013, 19:19
  • 2
    Инструменты пространства пользователя должны быть версией 2.22 +. Пользователи Ubuntu должны обычно ожидать версии 14.10 "utopic" –  Daniel Alder 25.08.2014, 10:41
  • 3
    Ubuntu не делает grok-w - должен использовать часы (ниже) –  Brent Faust 24.02.2016, 02:19
  • 4
    Ошеломите системного администратора, отвечают, что использование - descriptively-named-flags вместо загадочного отдельного символа отмечает. БРАВО, SIR. БРАВО. огромное спасибо –  allyourcode 02.04.2016, 07:59
  • 5
    -w должен работать в каждой версии Ubuntu от Utopic (14.10) вперед. (launchpad.net/ubuntu/+source/util-linux/+publishinghistory предполагает, что ранние пакеты Utopic были для 2,20, но достигли 2.25 к тому времени, когда это было выпущено.) Примечание –  mwfearnley 20.08.2017, 16:58

Можно использовать watch команда, которая предназначается точно для вещей как это

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

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

55
27.01.2020, 19:28
  • 1
    Если Вы используете одинарные кавычки вместо двойных кавычек (или выходите из знака доллара), Вы желание получить новое значение $LINES для каждого вызова, таким образом, это будет корректироваться при изменении терминального размера. большое спасибо –  P Daddy 31.03.2016, 18:22
  • 2
    запретит переменное расширение. Кроме того, переменная расширена только однажды в этом примере - после вызова watch. Таким образом это действительно не изменится между вызовами dmesg. Нужно было бы использовать обертку, которая запросит терминальное состояние. –  peterph 02.04.2016, 17:29
  • 3
    Это - самое главное. Одинарные кавычки запрещают переменное расширение, когда оболочка передает аргументы watch, поэтому часы выполнят команду с переменным выражением там, которое будет расширено оболочкой, которую это вызывает. Каждый раз. Попробуйте его, это работает. –  P Daddy 02.04.2016, 17:37
  • 4
    Хм, Вы правы - я принимаю watch использование popen(), что означает, что другая оболочка порождена, и переменная среды затем предоставляется ею (и таким образом обновляется на каждом выполняющаяся выполненный). Хорошая находка. –  peterph 02.04.2016, 18:14

Вы не можете действительно контролировать вывод dmesg непосредственно.

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

Таким образом, можно сделать что-то как:

 tail -f /var/log/kern.log
12
27.01.2020, 19:28

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

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

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

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

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

10
27.01.2020, 19:28
  • 1
    //, В системе CEntOS 6, которую я использую, выслеживая и просматривая/proc/kmsg, не производит вывода. [~] $ sudo хвост-f/proc/kmsg ♥ % [~] $ sudo кошка/proc/kmsg ♥ % [~] $ –  Nathan Basanese 04.09.2015, 22:36
[115192]На системах, использующих [115844]systemd[115845] можно также:[12200]
5
27.01.2020, 19:28

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

  1. while true; сделать dmesg -c >> test.txt; спать 1; done
  2. tail -f test.txt

Будет получен аналогичный результат.

0
27.01.2020, 19:28

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

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

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

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

8
27.01.2020, 19:28

Теги

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