让它@#$%ing工作

让它@#$%ing工作

我想做类似的事情

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工作

  1. 您想要持续、立即地打印 dmesg 的输出
  2. Dmesg 正在打印内核环形缓冲区(参见man dmesg
  3. 内核环形缓冲区是一个特殊的 proc 文件,/proc/kmsg(参见man proc
  4. 直接读取/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”。

相关内容