进一步阅读

进一步阅读

/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使用 dmesgklogctl读取和/或清除内核消息环形缓冲区 whilesyslog(3)用于发送发送至 syslogd 的消息。这两个函数的名称相同,但它们的用途完全不同,内部工作方式也不同。

答案2

  • /dev/log是一个数据报套接字(或者是一个符号链接)AF_LOCAL,应用程序应将其发送数据报, 不是流数据cat。它是C库及其库函数等函数的约定syslog(),而不是Linux本身的一部分。它的读者将是一个守护进程,例如syslog-readsyslog 变体之一,或systemd-journald
  • /dev/kmsg是一个流设备Linux 的一部分,呈现 Linux 循环消息缓冲区的内容,应用程序预计将使用这些内容读自为了获取内核日志数据;而在正常情况下并没有真正写信。普通读取器是dmesg程序和守护进程,例如klog-readklogd、 syslog 变体之一或systemd-journald

进一步阅读

相关内容