Возможно ли "хвост-f "выход" dmesg`?

хочу сделать что-то вроде

dmesg | tail -f

но это не работает:
Я использую Mac OSX 10.6.7, делая это, хвост выйдет, вместо того, чтобы следить за выходом.

интересно, есть ли способ сделать это или какая-либо эквивалентная команда.
P. S. Я не думаю, что while цикл будет достаточно хорошей идеей.

17
задан Ivan Z. G. Xiao
11.02.2023 0:44 Количество просмотров материала 2399
Распечатать страницу

12 ответов

вы, вероятно, ищете некоторую комбинацию сообщений из различных файлов журнала. Попробуйте:

tail -f /var/log/{messages,kernel,dmesg,syslog}

...чтобы получить довольно хороший обзор системы. Если вы хотите больше или меньше, исследуйте, в какой файл журнала помещаются сообщения, которые вы хотите видеть.

также посмотрите на использование multitail в файл и код цвета и несколько файлов фильтра журнала сразу.

Edit: это было не очень актуально, когда я ответил на это, но, как эта страница получает много хитов Я думал, что стоит упомянуть, что новые системы под управлением systemd есть это.

dmesg -w
106
отвечен Caleb 2023-02-12 08:32

просто сделайте это @#$%ing работа

  1. вы хотите печатать вывод dmesg, постоянно, немедленно
  2. Dmesg печатает кольцевой буфер ядра (см. man dmesg)
  3. кольцевой буфер ядра-это специальный proc-файл,/proc/kmsg (см. man proc)
  4. читать /proc/kmsg напрямую, т. е. cat /proc/kmsg.

теперь, если Вы читаете руководство дружественный proc, он будет строго предупредить вас, чтобы только один пользователь (который должен быть привилегированным) читать /proc/kmsg в время. Независимо от реализация syslog, вы должны делать это, и, вероятно, он работает с dmesg. Не знаю, я не в своей лиге, просто перефразирую руководство. Так что пока это" просто сделать это @#$%Инг работа " путь, рассмотрим следующие пару методов в первую очередь.

Man страница утверждена: watch + dmesg

на Arch gnu / linux с systemd init*, dmesg.журнал не пишется очень часто, возможно, вообще нет? Лучший способ, который я нашел, чтобы читать буфер журнала ядра непрерывно это с watch. Что-то вроде этого должно заставить вас начать (отрегулируйте, сколько строк помещается в вашем терминале):

watch 'dmesg | tail -50'

watch + dmesg + daemon + tail-f

более запутанное решение может использовать watch для записи вывода dmesg в файл, который вы могли бы тогда tail -f. Вы, вероятно, хотите, чтобы это работало как демон. Правильный демон также будет gzip и вращать журналы. Следующий код bash не тестировался, не работает и предназначен только для передачи идеи. @Брукс Мозес ответ имеет рабочая версия.

watch 'dmesg >> /var/log/dmesg.log | tail -1'

* касательная, потому что это вопрос osx, но когда systemd вокруг, не беспокойтесь о dmesg используйте journalctl -xf (возможно w/-n 100 показать предыдущие 100 строк)

52
отвечен djeikyb 2023-02-12 10:49

для тех, кто интересуется linux, так как ядро ядра 3.5.0:

# dmesg -w

также на системах с systemd вы можете:

# journalctl -kf
36
отвечен Maxim 2023-02-12 13:06

вот вариант ответа djeikyb, который на самом деле протестирован и исправляет пару ошибок.

watch 'sudo dmesg -c >> /tmp/dmesg.log; tail -n 40 /tmp/dmesg.log'

важный трюк в том, что мы делаем dmesg -c, который очищает кольцевой буфер после печати - таким образом, каждый раз, когда мы печатаем только то, что новое с последнего времени. Вы должны быть суперпользователем, чтобы сделать это, таким образом sudo. Также есть исправление; вместо того, чтобы пытаться как сбросить вывод в файл, так и передать его в хвост (что не работает), мы просто читаем из недавно записанный файл.

мы могли бы сделать просто dmesg > /tmp/dmesg.log и перезаписывать весь файл каждую итерацию, но это много ввода-вывода, а также рискует потерять файл, если компьютер аварийно завершит работу в середине перезаписи.

вы также можете сделать что-то подобное, что более близко, как tail -f с циклом while, который выполняет dmesg -c и sleep 1 навсегда (см. ответ Бена Харриса). Однако, так как это фактически очищает буфер сообщений ядра по мере его выполнения, вы также можете хотите передать вещи в файл журнала, Если вы хотите их позже.

21
отвечен Brooks Moses 2023-02-12 15:23

это может сработать для вас

while true;do sudo dmesg -c;done

имейте в виду, что флаг '-c' очищает буфер сообщений в stdout. "Sudo" не требуется, если вы root. Если вы чувствуете, что это ест слишком много ресурсов процессора, попробуйте добавить "сон 1", Прежде чем цикл делается.

6
отвечен 2023-02-12 17:40

сделал это прежде, чем видеть этот пост:

#!/usr/bin/env perl

use strict;
use warnings;

# "tail -f" for dmesg
# Keeps last printed line. Anything sorting "gt" will be newer

$|=1;

my $y = '';

while(1) {
    for my $k (`dmesg`) {
        if ($k gt $y) {
            print $k;
            $y = $k;
        }
    }        
    sleep 1;
}
exit;
5
отвечен Quantum Mechanic 2023-02-12 19:57

вы могли бы сделать:

tail -f /var/log/messages
3
отвечен Ed L 2023-02-12 22:14

в то время как dmesg-c > > > /tmp/dmesg.войти; не спать 0.1; сделали & хвост -Ф /tmp/и команды dmesg.log

3
отвечен Dagelf 2023-02-13 00:31

Я использую этот псевдоним в /root/.bashrc;

alias dwatch='watch -n 0.1 "dmesg | tail -n $((LINES-6))"'

что следует dmesg и настройка линии по какой терминал это называется в.

2
отвечен drgibbon 2023-02-13 02:48

под текущей Ubuntu (я использую Ubuntu 12.04),

tail -f /var/log/syslog

может соотвествовать.

0
отвечен Bill Zhao 2023-02-13 05:05

я использовал этот код для поиска специального события ядра и передал его в процесс "обратного вызова":

while true ; do dmesg -c ; sleep .1 ; done \
| grep --line-buffered  -o $pattern \
| ... 
0
отвечен rzr 2023-02-13 07:22

ответ на старый вопрос, но кто-то может найти это полезным :)

dmesg / tail-f -

передает вывод dmesg через tail, используя оператор - в качестве ярлыка для stdout

-2
отвечен Random Linux Dood 2023-02-13 09:39

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх