`cat / proc / kmsg` gibt beschädigten Text aus

7673
Vi.

cat /proc/kmsgist eine bequeme Möglichkeit, Kernel-Nachrichten zu verfolgen. Die Ausgabe ist jedoch unzuverlässig. Beispiel:

< eoyfl-o-ilF ilaltssI hwflssesJ a hwbctaealatv-psL hwmmr-sg()nc-l-TtssN oeOfso-eitr()so-l-iesQ na ycso-aksae()Umutfref()so-lce-ak()Wiet_e_yr upfrc-ufrZ <6>[640655.817496] SysRq : HELP : loglevel(0-9) reBoot Crash terminate-all-tasks(E) memory-full-oom-kill(F) kill-all-tasks(I) thaw-filesystems(J) saK show-backtrace-all-active-cpus(L) show-memory-usage(M) nice-all-RT-tasks(N) powerOff show-registers(P) show-all-timers(Q) unRaw Sync show-task-states(T) Unmount force-fb(V) show-blocked-tasks(W) Write_to_dev_sysrq dump-ftrace-buffer(Z) 

(Ich drückte Alt + Sysrq + h dreimal: Zum ersten Mal wurde gebrochener Text ohne Zeilenumbruch gedruckt. Beim zweiten Mal wurde korrekter Text gedruckt. Das dritte Mal wurde gerade beendet (EOF).

Was mache ich falsch? Folgen Sie den Kernel-Nachrichten (ohne Abhängigkeit von verschiedenen sysklogd- und config-Dateien und tail -f).

Alternativ, wie man klogd benutzt, um Nachrichten (wie cat /proc/kmsgaber richtig) ohne Syslogs zu drucken oder klogd: Already running)?

4
Siehe diese Antwort: http://stackoverflow.com/questions/1783630/how-to-monitor-the-syslogprintk-in-a-lkm Randolf Richardson vor 13 Jahren 0
Außerdem weist diese Webseite darauf hin, dass es sich um einen Ringpuffer handelt, sodass "tail -f" und Freunde möglicherweise nicht so gut funktionieren (verwenden Sie stattdessen "dmesg", obwohl dies nicht wie "tail -f" überwacht werden kann): http: / /www.techpulp.com/blog/tag/prockmsg/ Randolf Richardson vor 13 Jahren 0
Ab Linux 3.5 wurde eine neue `/ dev / kmsg`-Schnittstelle implementiert, die es mehreren Prozessen ermöglicht, das Kernel-Protokoll ohne Beschädigung zu lesen, und` cat / dev / kmsg` folgt automatisch neuen Einträgen. (* util-linux * 2.22 implementiert auch "dmesg --follow".) grawity vor 11 Jahren 2

2 Antworten auf die Frage

2
pfalcon

Es scheint, dass die Ausgabe von cat /proc/kmsgmissbräuchlich ist, da andere Benutzer von Kernelprotokollierungsdaten wie syslogd und Freunde vorhanden sein können. Ausgabefiguren erhalten für mich interleavingly in cat oder syslogd (versucht an Ubuntu 12.04). Siehe auch diese Antwort: https://stackoverflow.com/a/9477776/496009

Ich kann mir vorstellen, cat /proc/kmsgwürde zuverlässig funktionieren, wenn in ein reines System gebootet wird (z. B. Kernel mit init=/bin/shArgumenten gebootet ). Andernfalls ist die Verwendung des dmesgBefehls zum Lesen des Kernel-Protokolls erwartungsgemäß einfacher.

Gibt es einen dmesg, der alle Nachrichten fortlaufend ausgibt (erwarten Sie von "watch" dmesg | tail "`)? Vi. vor 11 Jahren 0
@Vi .: Wenn Sie einen Linux-Kernel ≥ 3.5 ausführen, sollten Sie `cat / dev / kmsg` oder sogar` dmesg --follow` (benötigt util-linux ≥ 2.22) ausführen können. Bei älteren Systemen besteht die einzige Wahl darin, die Syslog-Dateien in `/ var / log` zu" tail -f ". grawity vor 11 Jahren 2
0
user3913384

Ich hatte ein Problem beim cat /proc/kmsgvorzeitigen Beenden, weil versucht wurde, nicht druckbare Zeichen anzuzeigen.

Ich habe das gefunden:

cat -v /proc/kmsg 

entfernt alle nicht druckbaren Zeichen aus der Ausgabe und verhindert ein catvorzeitiges Beenden.

Ich denke nicht, dass es wegen dieser Charaktere ist. Vi. vor 8 Jahren 0