我想做类似的事情
dmesg | tail -f
但它不起作用:
我使用 Mac OS X v10.6.7 (Snow Leopard)。这样做tail
会退出,而不是监视输出。
我想知道是否有办法做到这一点,或者等效的命令。
PS,我认为while
循环不是一个足够好的主意。
答案1
您可能正在寻找来自各种日志文件的某种消息组合。请尝试:
tail -f /var/log/{messages,kernel,dmesg,syslog}
…以便对系统有一个大致的了解。如果您想要更多或更少的信息,请研究您想要查看的消息被放在哪个日志文件中。
还要研究使用multitail
文件和颜色代码来同时过滤多个日志文件。
编辑:当我回答这个问题时,这并不是很相关,但由于这个页面获得了很多点击量,我认为值得一提,因为从内核 3.5 开始,您可以执行以下操作:
dmesg -w
答案2
在 Linux 上,从内核 3.5.0 开始您可以使用:
dmesg -w
您还systemd
可以在以下系统上使用:
journalctl -kf
答案3
让它@#$%ing工作
- 您想要持续、立即地打印 dmesg 的输出
- Dmesg 正在打印内核环形缓冲区(参见
man dmesg
) - 内核环形缓冲区是一个特殊的 proc 文件,
/proc/kmsg
(参见man proc
) - 直接读取
/proc/kmsg
,即cat /proc/kmsg
。
/proc/kmsg
现在,如果您阅读友好的 proc 手册,它会严厉警告您一次只允许一个用户(必须具有特权)读取。无论您使用哪种 syslog 实现都应该这样做,并且大概可以与 一起使用dmesg
。我不知道,我在这里不擅长,只是转述手册。因此,虽然这是“让它 @#$%ing 工作”的方式,但请先考虑接下来的几种方法。
手册页已批准:watch + dmesg
在我使用 systemd init* 的一台 Linux 机器上,dmesg.log 很少写入,也许根本没有写入?我发现连续读取内核日志缓冲区的最佳方法是使用watch
。类似这样的操作应该可以帮助您入门(根据终端中可容纳的行数进行调整):
watch 'dmesg | tail -50'
watch + dmesg + 守护进程 + tail -f
更复杂的解决方案可能是使用 watch 将 dmesg 输出写入文件,然后您可以tail -f
。您可能希望它作为守护进程运行。合适的守护进程还会 gzip 和旋转日志。以下 bash 代码未经测试,无法正常工作,仅用于传达一个想法。@Brooks Moses 的答案有一个工作版本。
watch 'dmesg >> /var/log/dmesg.log | tail -1'
* 切线,因为这是一个关于苹果桌面操作系统的问题:当 systemd 存在时,不要打扰dmesg
;使用journalctl -xf
(也许 w/-n 100
也显示前 100 行)
答案4
这可能对你有用
while true;do sudo dmesg -c;done
请记住,“-c”标志会将消息缓冲区清除到标准输出中。如果您是 root,则不需要“sudo”。如果您觉得这会占用太多 CPU 资源,请尝试在循环完成之前添加“sleep 1”。