web-dev-qa-db-ja.com

/ dev / logと/ dev / kmsgの違いは?

/ dev/logの実際の用途は何ですか、それをグーグルで調べている間、ユーザースペースからSyslogへのロギングに使用されていることを理解しています。その役割には/ dev/kmsgが使われていると思いました。何か不足していますか?

注意:

test@test:~$ cat /dev/log
cat: /dev/log: No such device or address
  • _/dev/log_は_AF_LOCAL_データグラムソケットであり(またはシンボリックリンクです)、アプリケーションはこのデータグラムソケットを期待されます送信データグラムtoreadストリームデータfrom with cat。これはCライブラリの慣例であり、syslog()関数などのライブラリ関数であり、Linux自体の一部ではありません。リーダーは、syslogバリアントの1つである_syslog-read_、または_systemd-journald_などのデーモンになります。
  • _/dev/kmsg_は、Linuxの一部であるisであり、アプリケーションが取得するためにread fromであると期待されるLinuxの循環メッセージバッファの内容を提示するストリームデバイスですカーネルログデータ。通常の状況では実際には書き込みません。通常のリーダーは、dmesgプログラムと、syslogバリアントの1つである_klog-read_、klogd、または_systemd-journald_などのデーモンです。

参考文献

1
JdeBP

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)は、dmesgからlibc klogctl AP​​Iを介してカーネルメッセージを読み取ったり消去したりするために使用されるsyscall(man syscallsにもリストされています)syslog(3)を使用してバッファを呼び出し、syslogdにメッセージを送信します。これらの2つの関数は同じ名前ですが、まったく異なる目的で使用され、内部で異なる動作をします。

0