Хотите сделать что-то вроде
dmesg | tail -f
но это не работает: я использую Mac OSX 10.6.7, выполняя то, что хвост выйдет, вместо того, чтобы отслеживать вывод.
Интересно, есть ли способ сделать это или какая-либо эквивалентная команда. PS Я не думаю, что while
цикл будет достаточно хорошей идеей.
bash
command-line
tail
Иван З. Г. Сяо
источник
источник
kernel.log
не содержит тот же вывод, что иdmesg
. Например, для поврежденного диска в ошибках чтения файлаdmesg
указывается, какой именно файл не может быть прочитан, в то время как,kernel.log
к сожалению,disk0s2: I/O error.
Ответы:
Вы, вероятно, ищете какую-то комбинацию сообщений из разных файлов журнала. Пытаться:
… Чтобы получить довольно хороший обзор системы. Если вы хотите больше или меньше, изучите, в каком файле журнала находятся сообщения, которые вы хотите видеть.
Также обратите внимание на использование
multitail
файла и цветового кода и фильтрацию нескольких файлов журнала одновременно.Изменить: Это было не очень актуально, когда я ответил на это, но так как эта страница получает много хитов, я думаю, стоит упомянуть, что более новые системы, работающие с systemd, имеют это.
источник
multitail
. Выглядит интересно. В случае OS X это будет что - то вроде:tail -f /var/log/{system.log,kernel.log}
.system.log
иkernel.log
не содержат точного вывода вdmesg
OS X. Например, для поврежденного диска ошибки чтения файлаdmesg
указывают, какой именно файл не может быть прочитан, в то время как,kernel.log
к сожалению, предоставляет только менее полезное уведомление:disk0s2: I/O error.
Просто заставь это @ # $% работать
man dmesg
)/proc/kmsg
(см.man proc
)/proc/kmsg
напрямую, то естьcat /proc/kmsg
.Теперь, если вы прочитаете руководство по дружественному процессу, оно будет строго предупреждать вас о том, чтобы разрешить чтение только одному пользователю (который должен быть привилегирован)
/proc/kmsg
за раз. Независимо от того, какая у вас реализация системного журнала, вы должны это делать, и, вероятно, она работаетdmesg
. Я не знаю, я вне моей лиги здесь, просто перефразируя руководство. Так что, хотя это и есть способ "просто заставь это @ # $% ing работать", сначала рассмотрим следующие несколько методов.Утверждена справочная страница: watch + dmesg
В Arch gnu / linux с systemd init * dmesg.log записывается не очень часто, а может, и вовсе? Лучший способ непрерывного чтения буфера журнала ядра - это
watch
. Как-то так должно начаться (настройте количество строк в вашем терминале):смотреть + dmesg + демон + tail -f
Более замысловатое решение может использовать watch для записи вывода dmesg в файл, что вы можете затем сделать
tail -f
. Вы, вероятно, хотели бы, чтобы это работало как демон. Надлежащий демон также будет gzip и вращать журналы. Следующий код bash является непроверенным, неработающим и предназначен только для передачи идеи. Ответ @Brooks Моисея имеет рабочую версию .* tangent, потому что это вопрос осса, но когда systemd рядом, не беспокойтесь
dmesg
, используйтеjournalctl -xf
(возможно, w /,-n 100
чтобы также показать предыдущие 100 строк)источник
/proc
, однако остальная часть вашего ответа применима.watch
можно установить из MacPorts: macports.orgdmesg
реализации Apple : opensource.apple.com/source/system_cmds/system_cmds-230.7/… Quick Googling ничего не говорит о том, что он представлен в файловой системе: /Для тех, кто интересуется Linux, начиная с ядра ядра 3.5.0:
Также на системах с
systemd
вами можно:источник
dmesg -w
это абсолютно хорошее решение. К сожалению, даже Ubuntu 14.04, кажется, не готов к этому, потому что инструмент пространства пользователя еще не поддерживает его.Вот вариант ответа djeikyb, который на самом деле проверен и исправляет несколько ошибок.
Важный трюк заключается в том, что мы делаем
dmesg -c
, что очищает кольцевой буфер после его печати - таким образом, каждый раз, когда мы печатаем только то, что является новым с последнего раза. Для этого вам нужно быть пользователем root, таким образомsudo
. Также есть исправление; вместо того, чтобы пытаться одновременно вывести вывод в файл и направить его в хвост (что не работает), мы просто читаем из вновь записанного файла.Мы могли бы просто сделать
dmesg > /tmp/dmesg.log
и перезаписать весь файл каждую итерацию, но это много ввода-вывода, а также рискует потерять файл, если компьютер выйдет из строя в середине перезаписи.Вы также можете сделать нечто подобное, более похожее
tail -f
на цикл while, который выполняетсяdmesg -c
иsleep 1
навсегда (см. Ответ Бена Харриса). Однако, поскольку это на самом деле очищает буфер сообщений ядра во время его работы, вы можете также захотеть передать данные в файл журнала на случай, если вы захотите их позже.источник
Это может работать для вас
Помните, что флаг '-c' очищает буфер сообщений в стандартный вывод. Sudo не нужно, если вы root. Если вы чувствуете, что это потребляет слишком много ресурсов вашего процессора, попробуйте добавить «sleep 1» до завершения цикла.
источник
Сделал это до того, как увидел этот пост:
источник
Вы могли бы сделать:
источник
dmesg
сообщает о текущем наборе последних сообщений от ядра, обычно относящихся к аппаратным подсистемам.источник
watch
Я использую этот псевдоним в /root/.bashrc;
который следует за dmesg и настраивает линии для любого терминала, в котором он вызывается.
источник
Под текущей Ubuntu (я использую Ubuntu 12.04),
может удовлетворить требование.
источник
Я использовал этот код для поиска специального события ядра и передал его процессу «обратного вызова»:
источник
ответ на старый вопрос, но кто-то может найти его полезным :)
направляет вывод dmesg через tail, используя оператор - в качестве ярлыка к stdout
источник
dmesg
закрывает вывод после закрытия один раз.tail -f
не могу изменить это больше.