是否rsyslog
只是在内核环缓冲区之上的抽象层?或者内核环缓冲区是它自己的实体,并且其rsyslog
交互与任何其他“应用程序”的交互一样?
尽管各种文档(包括man dmesg
)将其称为“内核环形缓冲区”,但最好将其称为内核日志缓冲区,因为“环形缓冲区”是一个通用术语,我相信内核也使用环形缓冲区各种完全不相关的东西的缓冲区。“printk 缓冲区”也很合适,在用于写入它的内核空间函数之后。
无论如何,它驻留在内核空间中,并且通过 提供了一个读接口/proc/kmsg
和一个读写接口/dev/kmsg
。因此,如果您以 root 身份执行以下操作:
echo "Hello Kernel!" > /dev/ksmg
Run Code Online (Sandbox Code Playgroud)
如果你那时你会看到它cat /dev/ksmg
(你可能不会在任何日志中看到它,但是 - 请参阅下面的 Matthew Phipps 评论以了解可能的原因)。这是原始输出,与您从dmesg
日志文件中看到的内容或在日志文件中看到的内容并不完全相同。内核源代码中提供了一些关于此的文档。如果 (r)syslog 正在运行,建议从/proc/kmsg
(与 不同/dev/ksmg
)读取。
Rsyslog 是linux 上常用的许多syslog实现之一。这些是用户态应用程序,它们/proc/ksmg
通过套接字从其他用户态进程获取内核消息和消息/dev/log
。