/dev/log 的实际用途是什么,在谷歌搜索时我了解到它用于从用户空间记录到 Syslog。我认为 /dev/kmsg 就是用于该角色的。我错过了什么吗?
笔记:
test@test:~$ cat /dev/log
cat: /dev/log: No such device or address
答案1
它的描述如下man syslogd
:
/dev/log The Unix domain socket to from where local syslog messages are read.
syslogd
您可以通过使用命令来查看它的使用情况,logger
例如:
$ strace -f logger a 2>&1 | grep /dev/log
connect(3, {sa_family=AF_UNIX, sun_path="/dev/log"}, 110) = 0
或者lsof
(如果有的话):
$ sudo lsof /dev/log
lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /home/ja/.cache/gvfs
Output information may be incomplete.
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
syslogd 860 root 0u unix 0x0000000003d863fa 0t0 18404 /dev/log type=DGRAM
请注意,在各种系统上有多种实现syslogd
- 例如,Slackware 附带 sysklogd,但各种嵌入式平台都有自己的实现,例如 Busybox。
我相信你可能也会感到困惑syslog(2)
:syslog(3)
$ man -k syslog | grep '^syslog '
syslog (2) - read and/or clear kernel message ring buffer; set console_loglevel
syslog (3) - send messages to the system logger
syslog(2)
是一个系统调用(也在 中列出) ,通过 libc APIman syscalls
使用
dmesg
klogctl
读取和/或清除内核消息环形缓冲区 whilesyslog(3)
用于发送发送至 syslogd 的消息。这两个函数的名称相同,但它们的用途完全不同,内部工作方式也不同。
答案2
/dev/log
是一个数据报套接字(或者是一个符号链接)AF_LOCAL
,应用程序应将其发送数据报到, 不是读流数据从和cat
。它是C库及其库函数等函数的约定syslog()
,而不是Linux本身的一部分。它的读者将是一个守护进程,例如syslog-read
syslog 变体之一,或systemd-journald
。/dev/kmsg
是一个流设备是Linux 的一部分,呈现 Linux 循环消息缓冲区的内容,应用程序预计将使用这些内容读自为了获取内核日志数据;而在正常情况下并没有真正写信。普通读取器是dmesg
程序和守护进程,例如klog-read
、klogd
、 syslog 变体之一或systemd-journald
。
进一步阅读
- https://unix.stackexchange.com/a/294206/5132
- 乔纳森·德博因·波拉德 (2016)。 ”处理旧的日志机制”。 小吃指南。软件。