私はjournald
とrsyslog
について学習していて、読んでいるときにrsyslog
が/dev/kmsg
から読み取り、journald
が/dev/kmsg
と/proc/ksmg
の両方から読み取れることがわかりました。
これらはどちらもカーネルログであることはわかっていますが、/proc/kmsg
と/dev/kmsg
の違いは何ですか? 1つはプロセスのように見え、もう1つはデバイスのように見えるのはなぜですか?
_/proc/kmsg
_は、カーネルログバッファーのルートのみ、読み取り専用、消費ビューを提供します。これは、_SYSLOG_ACTION_READ
_アクションで syslog(2)
を呼び出すのと同じです。 the proc
manpage で述べたように、
このファイルを読み取るには、プロセスにスーパーユーザー特権が必要であり、このファイルを読み取るプロセスは1つだけです。
syslog(2)
システムコール機能を使用してカーネルメッセージをログに記録するsyslogプロセスが実行されている場合、このファイルを読み取ることはできません。
_/dev/kmsg
_は、同じカーネルログバッファーへのアクセスを提供しますが、より簡単に使用できます。読み取りはオープンごとに追跡されるため、複数のプロセスが並行して読み取ることができ、エントリが読み取られてもバッファから削除されません。 _/dev/kmsg
_は、ログバッファーへのwriteアクセスも提供するため、ログバッファーにエントリを追加するために使用できます。詳細は the _/dev/kmsg
_ documentation を参照してください。
両方が存在する理由と、1つが_/proc
_(プロセス関連ではありません)およびdev
にある理由については、_/proc/kmsg
_はカーネル内部の古い便利な「エクスポート」です。および_/dev/kmsg
_は より最近の追加 であり、ログバッファーへの使用可能なインターフェイスとして設計されています。