/dev/kmsg
当在拖尾时向其中写入消息时/proc/kmsg
,消息会非常随机地出现, in 永远不会出现在/var/log/kern.log
.
但是,dmesg
正确获取所有消息。
例子
# Terminal 1
sudo tail -f /proc/kmsg
# Terminal 2
tail -f /var/log/kern.log
# Terminal 3
sudo sh -c 'echo "<1> Kernel log message" > /dev/kmsg'
sudo sh -c 'echo "<1> Kernel log message" > /dev/kmsg'
sudo sh -c 'echo "<1> Kernel log message" > /dev/kmsg'
sudo sh -c 'echo "<1> Kernel log message" > /dev/kmsg'
结果:
# Terminal 1
# The message is shown at irregular intervals without a clear pattern
sudo tail -f /proc/kmsg
<9>[37102.185491] Kernel log message
# Terminal 2
# No message is ever shown
tail -f /var/log/kern.log
# Terminal 4
# Everything is always here
dmesg
[37101.556366] Kernel log message
[37102.185491] Kernel log message
[37103.042422] Kernel log message
插入 USB 记忆棒时,数据会在/proc/kmsg
和的输出之间随机拆分/var/log/kern.log
。dmesg
再次显示所有消息。
- 与其他方法有
dmesg
什么不同? - 为什么可以通过让另一个进程监听来破坏 rsyslog 的内核日志记录
/dev/kmsg
。为什么我的尝试没有被阻止device or resource busy
? - 为什么 rsyslog 不会记录发送到的消息,
/dev/kmsg
即使它们偶尔会到达proc/kmsg
?
/proc/kmsg
不能在日志阅读器之间共享,如果有多个阅读器,则只有其中一个会收到任何给定的日志消息。/dev/kmsg
可在多个日志阅读器之间共享,为每个阅读器提供整个日志流(慢速阅读器的速度不足)。进一步阅读