Mil*_*avi 188 linux command-line logs dmesg
我正在编写一个将错误消息打印到环形缓冲区dmesg 输出的设备驱动程序。我想看到dmesg它改变时的输出。
我怎样才能做到这一点?
max*_*zig 242
比较近dmesg的版本提供了后续的选项(-w,--follow它的工作原理类似)tail -f。
因此,只需使用以下命令:
$ dmesg -wH
Run Code Online (Sandbox Code Playgroud)
( -H,--human启用用户友好的功能,如颜色、相对时间)
例如,这些选项在 Fedora 19 中可用。
pet*_*rph 64
您可以使用watch专门用于此类操作的命令
watch -n 0.1 "dmesg | tail -n $((LINES-6))"
Run Code Online (Sandbox Code Playgroud)
该$((LINES-6))部件应使其非常适合您的终端。
uml*_*ute 14
您无法真正dmesg直接监控 的输出。
但是,您的模块很可能不会直接打印到 dmesg 的环形缓冲区,而是使用内核日志记录工具(然后由 显示dmesg)。如果您syslog有一些合理的(例如默认)设置,这些消息很可能也会出现在kern.log日志文件中。
因此,您可以执行以下操作:
tail -f /var/log/kern.log
Run Code Online (Sandbox Code Playgroud)
mic*_*has 11
您用于dmesg获取内核的日志消息。
内核本身登录到环形缓冲区,即仅在内存中。现在dmesg所做的就是输出该环形缓冲区的内容。如果你这样做,dmesg -c它也会在之后删除环形缓冲区。
因此,您可以做一些类似于while true; do dmesg -c; sleep 1; done不工作的事情dmesg|tail。但这会删除环形缓冲区,因此需要根权限。
另一种方式是/proc/kmsg允许查看环形缓冲区的文件。你可以这样做tail -f /proc/kmsg,但这只允许一个进程,这通常是你的日志守护进程。- 它的工作是读取消息并将其写入可以读取的真实文件(通常在 /var/log 中)。它可以配置为将所有消息输出到单个文件或将不同部分输出到不同文件中。(但配置取决于您系统的日志记录守护程序。)
因此,请查看/var/log是否有任何文件适合您的需要,否则请配置您的日志记录守护程序。
小智 9
如果您使用的是嵌入式系统,例如在OpenWrt等系统上常见的BusyBox,它的功能非常有限,并且仅支持 2-3 个标志。
如果您想要一种快速而肮脏的方式,随着事件的变化不断在屏幕上打印 dmesg 输出,一个简单的 Bash 循环就可以正常工作。这并不理想,但正如我提到的 BusyBox dmesg 缺少很多功能。我发现在命令行中输入以下内容时具有相同的效果:
$ while true; do dmesg -c ; sleep 1 ; done
Run Code Online (Sandbox Code Playgroud)
您可以使用Ctrl+退出循环C。sleep 1 是为了阻止它不必要地打击 CPU,并且 -c 标志会在每次调用时清除缓冲区,这样您就不会每秒看到重复的输出。
在使用的系统上,systemd您还可以:
# journalctl -kf
Run Code Online (Sandbox Code Playgroud)