Chcesz zrobić coś takiego
dmesg | tail -f
ale to nie działa: używam Mac OSX 10.6.7, robiąc to, że ogon się kończy, zamiast monitorować wyjście.
Zastanawiam się, czy jest jakiś sposób, aby to zrobić, czy jakieś równoważne polecenie. PS, nie sądzę, że while
pętla będzie dobrym pomysłem.
bash
command-line
tail
Ivan ZG Xiao
źródło
źródło
kernel.log
nie zawiera takich samych danych wyjściowych jakdmesg
. Na przykład w przypadku uszkodzonego dysku błędy odczytu plikudmesg
określają dokładnie, którego pliku nie można odczytać, akernel.log
niestety podaje tylko mniej niż pomocne powiadomienie:disk0s2: I/O error.
Odpowiedzi:
Prawdopodobnie szukasz kombinacji wiadomości z różnych plików dziennika. Próbować:
… Aby uzyskać całkiem niezły przegląd systemu. Jeśli chcesz więcej lub mniej, sprawdź, w jakim pliku dziennika umieszczane są wiadomości, które chcesz zobaczyć.
Zobacz także, jak używać
multitail
pliku i kodu koloru oraz filtrować wiele plików dziennika jednocześnie.Edycja: To nie było zbyt istotne, kiedy odpowiedziałem na to, ale ponieważ ta strona jest bardzo popularna, warto wspomnieć, że nowsze systemy z systemem mają to.
źródło
multitail
. Wygląda ciekawie. W przypadku OS X to będzie coś takiego:tail -f /var/log/{system.log,kernel.log}
.system.log
ikernel.log
nie zawierają dokładnych danych wyjściowych systemudmesg
OS X. Na przykład w przypadku uszkodzonego dysku błędy odczytu plikudmesg
określają dokładnie, którego pliku nie można odczytać, akernel.log
niestety podaje tylko mało pomocne powiadomienie:disk0s2: I/O error.
Po prostu spraw, aby @ # $% ing działało
man dmesg
)/proc/kmsg
(patrzman proc
)/proc/kmsg
bezpośrednio, tjcat /proc/kmsg
.Teraz, jeśli przeczytasz przyjazną instrukcję proc, surowo ostrzeże Cię, aby pozwolić tylko jednemu użytkownikowi (który musi być uprzywilejowanym) czytać
/proc/kmsg
na raz. Jakakolwiek implementacja syslog powinna być wykonywana i przypuszczalnie to działadmesg
. Nie wiem, jestem poza moją ligą, parafrazuję instrukcję. Tak więc, chociaż jest to sposób „po prostu zrób to @ # $% ing”, rozważ najpierw kilka następnych metod.Zatwierdzona strona podręcznika: zegarek + dmesg
Na Arch gnu / linux z systemd init *, dmesg.log nie jest zapisywany zbyt często, może wcale? Najlepszym sposobem na ciągłe odczytywanie bufora dziennika jądra jest
watch
. Powinieneś zacząć od czegoś takiego (dostosuj, ile linii zmieści się w twoim terminalu):watch + dmesg + daemon + tail -f
Bardziej skomplikowanym rozwiązaniem może być użycie watch do zapisania danych wyjściowych dmesg do pliku, co można wtedy zrobić
tail -f
. Prawdopodobnie chciałbyś, aby działało to jako demon. Właściwy demon również gzipowałby i obracał logi. Poniższy kod bash jest nieprzetestowany, nie działa i ma jedynie na celu przekazanie pomysłu. Odpowiedź Brooksa Mojżesza ma działającą wersję .* tangens, ponieważ jest to pytanie osx, ale kiedy systemd jest w pobliżu, nie przejmuj się
dmesg
, użyjjournalctl -xf
(może w /-n 100
aby również wyświetlić poprzednie 100 wierszy)źródło
/proc
, ale reszta odpowiedzi ma zastosowanie.watch
można zainstalować z MacPorts: macports.orgdmesg
realizacji: opensource.apple.com/source/system_cmds/system_cmds-230.7/... Szybkie Googling nie wspomina nic o to reprezentowane w systemie plików: /Dla zainteresowanych Linuksem, ponieważ jądro jądra 3.5.0:
Również w systemach z
systemd
:źródło
dmesg -w
jest absolutnie najładniejszym rozwiązaniem. Niestety, nawet Ubuntu 14.04 nie wydaje się na to gotowy, ponieważ narzędzie przestrzeni użytkownika jeszcze go nie obsługuje.Oto wariant odpowiedzi djeikyba, który został przetestowany i naprawiono kilka błędów.
Ważną sztuczką jest to, że robimy to
dmesg -c
, co czyści bufor pierścieniowy po wydrukowaniu - dlatego za każdym razem drukujemy tylko to, co nowe od ostatniego razu. Aby to zrobić, musisz być rootemsudo
. Jest też poprawka; zamiast próbować zarówno zrzucić dane wyjściowe do pliku, jak i przesunąć go do końca (co nie działa), po prostu czytamy z nowo napisanego pliku.dmesg > /tmp/dmesg.log
Przy każdej iteracji moglibyśmy po prostu nadpisać i nadpisać cały plik, ale jest to dużo operacji we / wy, a także ryzyko utraty pliku, jeśli komputer ulegnie awarii w trakcie nadpisywania.Można też zrobić coś podobnego, który jest bliżej jak
tail -f
z pętli while, który wykonujedmesg -c
isleep 1
na zawsze (patrz odpowiedź Bena Harrisa). Ponieważ jednak tak naprawdę wyczyszcza bufor komunikatów jądra podczas jego działania, możesz również chcieć przesłać rzeczy do pliku dziennika na wypadek, gdybyś chciał je później.źródło
To może Ci pomóc
Należy pamiętać, że flaga -c usuwa bufor komunikatów do standardowego wyjścia. „Sudo” jest niepotrzebne, jeśli jesteś rootem. Jeśli uważasz, że to pochłania zbyt dużo zasobów procesora, spróbuj dodać „uśpienie 1” przed wykonaniem pętli.
źródło
Czy to przed obejrzeniem tego postu:
źródło
możesz być w stanie:
źródło
dmesg
zgłasza bieżący zestaw najnowszych komunikatów z jądra, zwykle specyficznych dla podsystemów sprzętowych.źródło
watch
Używam tego aliasu w /root/.bashrc;
który podąża za dmesg i dostosowuje linie dla dowolnego terminala, do którego się wzywa.
źródło
Zgodnie z bieżącym Ubuntu (używam Ubuntu 12.04),
może spełnić wymagania.
źródło
Użyłem tego kodu, aby wyszukać specjalne zdarzenie jądra i przesłałem mu proces „callback”:
źródło
odpowiedź na stare pytanie, ale może się przydać :)
przesyła wyjście dmesg przez ogon, używając operatora - jako skrótu do standardowego wyjścia
źródło
dmesg
zamyka wyjście po zamknięciu raz.tail -f
nie mogę tego już zmienić.