进一步阅读

进一步阅读

/dev/kmsg当在尾部写入消息时,/proc/kmsg消息会非常随机地显示,在 中永远不会出现在 中/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.logdmesg再次显示所有消息。

  • dmesg与其他方法有何不同?
  • 为什么可以通过让另一个进程监听来破坏 rsyslog 的内核日志记录/dev/kmsg。为什么我的尝试没有被阻止device or resource busy
  • 为什么 rsyslog 不记录发送到的消息,/dev/kmsg即使它们偶尔到达proc/kmsg

答案1

/proc/kmsg日志阅读器之间不可共享,如果有多个阅读器,则只有其中一个会收到任何给定的日志消息。 /dev/kmsg可在多个日志读取器之间共享,为每个读取器提供整个日志流(速度较慢的读取器速度不足)。

进一步阅读

相关内容