Willst du so etwas tun?
dmesg | tail -f
Aber es funktioniert nicht: Ich verwende Mac OS X 10.6.7, dadurch wird der Tail beendet, anstatt die Ausgabe zu überwachen.
Ich frage mich, ob es eine Möglichkeit gibt, dies zu tun, oder einen entsprechenden Befehl. PS, ich glaube nicht, dass eine while
Schleife eine gute Idee sein wird.
bash
command-line
tail
Ivan ZG Xiao
quelle
quelle
kernel.log
nicht die gleiche Ausgabe wiedmesg
. Zum Beispiel für ein beschädigtes Laufwerk, Datei-Lesefehler indmesg
genau angeben, welche Datei nicht gelesen werden konnte, währendkernel.log
leider nur die weniger als hilfreiche Hinweis:disk0s2: I/O error.
Antworten:
Sie suchen wahrscheinlich nach einer Kombination von Nachrichten aus verschiedenen Protokolldateien. Versuchen:
... um einen guten Überblick über das System zu bekommen. Wenn Sie mehr oder weniger möchten, suchen Sie in welcher Protokolldatei die Nachrichten abgelegt werden, die Sie sehen möchten.
Sehen Sie sich auch
multitail
an, wie Sie den Code zum Ablegen und Färben von Dateien verwenden und mehrere Protokolldateien gleichzeitig filtern können.Bearbeiten: Dies war nicht sehr relevant, als ich darauf antwortete, aber da diese Seite eine Menge Hits bekommt, denke ich, dass es erwähnenswert ist, dass neuere Systeme, auf denen systemd ausgeführt wird, dies haben.
quelle
multitail
. Sieht interessant aus. Im Fall von O X wird es so etwas wie:tail -f /var/log/{system.log,kernel.log}
.system.log
undkernel.log
enthalten nicht die genaue Ausgabe vondmesg
unter OS X. Bei einem beschädigten Laufwerk geben beispielsweise die Fehler beim Lesen von Dateiendmesg
genau an, welche Datei nicht gelesen werden konnte.kernel.log
Leider enthält sie nur den weniger hilfreichen Hinweis:disk0s2: I/O error.
Lass es einfach funktionieren
man dmesg
)/proc/kmsg
(sieheman proc
)./proc/kmsg
direkt, dhcat /proc/kmsg
.Wenn Sie jetzt das freundliche Proc-Handbuch lesen, werden Sie streng gewarnt, dass nur ein Benutzer (der privilegiert sein muss) gleichzeitig lesen darf
/proc/kmsg
. Unabhängig davon, welche Syslog-Implementierung Sie haben, sollten Sie dies tun, und vermutlich funktioniert dies auchdmesg
. Ich weiß nicht, ich bin hier nicht in meiner Liga, nur um das Handbuch zu umschreiben. Also, während dies die Art und Weise ist, wie "es einfach machen @ # $% ing funktioniert", betrachten Sie zuerst die nächsten paar Methoden.Manpage freigegeben: watch + dmesg
Auf Arch Gnu / Linux mit systemd init * wird dmesg.log nicht sehr oft geschrieben, vielleicht gar nicht? Die beste Möglichkeit, den Kernel-Protokollpuffer kontinuierlich zu lesen, ist mit
watch
. So etwas sollte Ihnen den Einstieg erleichtern (passen Sie an, wie viele Leitungen in Ihr Terminal passen):watch + dmesg + daemon + tail -f
Eine komplexere Lösung könnte watch verwenden, um die dmesg-Ausgabe in eine Datei zu schreiben, die Sie dann verwenden könnten
tail -f
. Sie möchten wahrscheinlich, dass dies als Daemon ausgeführt wird. Ein richtiger Daemon würde auch Protokolle gzipen und rotieren. Der folgende Bash-Code ist nicht getestet, funktioniert nicht und soll nur eine Idee vermitteln. @ Brooks Moses Antwort hat eine funktionierende Version .* tangens, weil dies eine osx-Frage ist, aber wenn systemd in der Nähe ist, kümmere dich nicht darum
dmesg
, benutzejournalctl -xf
(vielleicht w /,-n 100
um auch die vorherigen 100 Zeilen anzuzeigen )quelle
/proc
, der Rest Ihrer Antwort ist jedoch zutreffend.watch
kann von MacPorts installiert werden: macports.orgdmesg
Implementierung: opensource.apple.com/source/system_cmds/system_cmds-230.7/… Quick Googling erwähnt nichts darüber, dass es im Dateisystem vertreten ist: /Für Linux-Interessierte ab Kernel 3.5.0:
Auch auf Systemen mit
systemd
Ihnen können:quelle
dmesg -w
ist die absolut netteste Lösung. Leider scheint auch Ubuntu 14.04 nicht dafür bereit zu sein, da das User Space Tool dies noch nicht unterstützt.Hier ist eine Variante der Antwort von djeikyb, die tatsächlich getestet wurde und einige Fehler behebt.
Der wichtige Trick ist, dass wir dies tun
dmesg -c
, um den Ringpuffer nach dem Drucken zu löschen - also jedes Mal, wenn wir nur das drucken, was seit dem letzten Mal neu ist. Du musst root sein, um das zu tunsudo
. Es gibt auch einen Bugfix; Anstatt zu versuchen, die Ausgabe in eine Datei zu kopieren und sie an das Ende zu leiten (was nicht funktioniert), lesen wir nur aus der neu geschriebenen Datei.Wir könnten bei
dmesg > /tmp/dmesg.log
jeder Iteration einfach die gesamte Datei überschreiben, aber das ist eine Menge E / A und birgt auch das Risiko, die Datei zu verlieren, wenn der Computer während eines Überschreibvorgangs abstürzt.Sie könnten auch etwas Ähnliches tun , die wie enger ist
tail -f
mit einer while - Schleife , die ausgeführt wirddmesg -c
und fürsleep 1
immer (Ben Harris Antwort sehen). Da hierdurch der Kernel-Nachrichtenpuffer während der Ausführung tatsächlich gelöscht wird, möchten Sie möglicherweise auch Elemente in eine Protokolldatei umleiten, falls Sie sie später benötigen.quelle
Dies kann für Sie arbeiten
Beachten Sie, dass das Flag '-c' den Nachrichtenpuffer in stdout löscht. Das 'sudo' ist nicht notwendig, wenn Sie root sind. Wenn Sie der Meinung sind, dass dies zu viel von Ihrer CPU-Ressource beansprucht, fügen Sie vor Abschluss der Schleife eine "Sleep 1" hinzu.
quelle
Haben Sie dies getan, bevor Sie diesen Beitrag gesehen haben:
quelle
Sie könnten in der Lage sein zu tun:
quelle
dmesg
meldet einen aktuellen Satz der neuesten Nachrichten aus dem Kernel, normalerweise spezifisch für die Hardware-Subsysteme.quelle
watch
Ich benutze diesen Alias in /root/.bashrc;
Dies folgt auf dmesg und passt die Zeilen für jedes Terminal an, in dem es aufgerufen wird.
quelle
Unter dem aktuellen Ubuntu (ich benutze Ubuntu 12.04),
kann die Anforderung erfüllen.
quelle
Ich habe diesen Code verwendet, um nach einem speziellen Kernel-Ereignis zu suchen, und habe einen "Rückruf" -Prozess eingeleitet:
quelle
Antwort auf eine alte Frage, aber jemand könnte es nützlich finden :)
Leiten Sie die Ausgabe von dmesg mit dem Operator - als Verknüpfung zu stdout durch tail
quelle
dmesg
die Ausgabe nach dem einmaligen Schließen geschlossen wird.tail -f
kann das nicht mehr ändern.