/ dev/logの実際の用途は何ですか、それをグーグルで調べている間、ユーザースペースからSyslogへのロギングに使用されていることを理解しています。その役割には/ dev/kmsgが使われていると思いました。何か不足していますか?
注意:
test@test:~$ cat /dev/log
cat: /dev/log: No such device or address
/dev/log
_は_AF_LOCAL
_データグラムソケットであり(またはシンボリックリンクです)、アプリケーションはこのデータグラムソケットを期待されます送信データグラムto、readストリームデータ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
_などのデーモンです。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
APIを介してカーネルメッセージを読み取ったり消去したりするために使用されるsyscall(man syscalls
にもリストされています)syslog(3)
を使用してバッファを呼び出し、syslogdにメッセージを送信します。これらの2つの関数は同じ名前ですが、まったく異なる目的で使用され、内部で異なる動作をします。