web-dev-qa-db-ja.com

/ dev / logを調べる

/dev/logは、システムロギングのデフォルトのエントリです。システムの実装の場合(この場合)は、/run/systemd/journal/dev-logへのシンボリックリンクです。以前は、syslogデーモンによって処理されるUNIXソケットの受信側でした。

~$ echo "hello" > /dev/log 
bash: /dev/log: No such device or address
~$ fuser /dev/log
~$ ls -la /dev/log 
lrwxrwxrwx 1 root root 28 Aug 23 07:13 /dev/log -> /run/systemd/journal/dev-log

書き込もうとすると表示されるエラーの説明と、そのファイルを保持しているプロセス(fuser /dev/logからの出力が空のプロセスがないのはなぜですか?

ロギングはシステムで正常に機能します。

~$ logger test
~$ journalctl --since=-1m
-- Logs begin at Thu 2018-05-24 04:23:46 CEST, end at Thu 2018-08-23 13:07:25 CEST. --
Aug 23 13:07:24 alan-N551JM alan[12962]: test

コメント提案で拡張する

~$ Sudo fuser /dev/log 
/run/systemd/journal/dev-log:     1   311
~$ ls -lL /dev/log
srw-rw-rw- 1 root root 0 Aug 23 07:13 /dev/log

私は完全な答えへのコメントを要約しています。 @ MarkPlotnick が最初に正しいソリューションを示したことに注意してください。

ls -lL出力、リンクが指すファイルはsocketであり、通常のファイルまたはパイプではありません。

~$ ls -lL /dev/log
srw-rw-rw- 1 root root 0 Aug 23 07:13 /dev/log

出力の最初の文字を見てください。そのsは、ファイルがソケットであることを意味します。

リダイレクトメカニズムは使用できません> of bash(または、AFIK、その他のシェル)はソケットに書き込みます。シェルはファイルをopenしようとし、openはソケットをサポートしていません。詳細は man open を参照してください。

ソケットに接続するプログラムを使用する必要があります。詳細は man connect を参照してください。

例として、netcatまたはsocatを使用できます( Debian Squeezeのシェルを介してUnixドメインソケットと通信するにはどうすればよいですか? を参照)。

完全を期すために、パイプのリダイレクトを使用できます。

~$ mkfifo /tmp/fifo
~$ ls -l /tmp/fifo
prw-rw-rw- 1 root root 0 27 ago 15.04 /tmp/fifo
~$ echo "hello" > /tmp/fifo

ls出力の最初の文字を見てください。そのpは、ファイルがパイプであることを意味します。

4
andcoz