GNU/Linux >> Linux の 問題 >  >> Linux

Linux – Linuxへのログインを理解していますか?

私が理解しているように、Linuxカーネルは/proc/kmsgにログを記録します ファイル(主にハードウェア関連のメッセージ)と/dev/log ソケット?どこか他の?他のアプリケーションも/proc/kmsgにメッセージを送信できますか? または/dev/log ?最後になりましたが、これはsyslogデーモン( rsyslog )であると正しいですか? 、 syslog-ng )これらの2つの場所からのメッセージをチェックし、それらを/var/log/messagesなどのさまざまなファイルに配布します。 または/var/log/kern.log または中央のsyslogサーバーですか?

承認された回答:

簡略化すると、多かれ少なかれ次のようになります:

カーネルはメッセージをログに記録します(printk()を使用 関数)カーネル空間のリングバッファに。これらのメッセージは、/proc/kmsgを介して2つの方法でユーザースペースアプリケーションで利用できるようになります。 ファイル(/procが提供されます がマウントされている)、およびsys_syslogを介して システムコール。

カーネルのリングバッファを読み取る(そしてある程度制御できる)2つの主要なアプリケーションがあります:dmesg(1) およびklogd(8) 。前者は、リングバッファの内容を出力するために、ユーザーがオンデマンドで実行することを目的としています。後者は、/proc/kmsgからメッセージを読み取るデーモンです。 (またはsys_syslogを呼び出します 、/procの場合 マウントされていません)、それらをsyslogd(8)に送信します 、またはコンソールに。それはカーネル側をカバーしています。

ユーザースペースには、syslogd(8)があります 。これは、多数のUNIXドメインソケット(主に/dev/log)をリッスンするデーモンです。 、ただし他の設定も可能です)、オプションでメッセージ用のUDPポート514に設定できます。また、klogd(8)からメッセージを受信します (syslogd(8) /proc/kmsgは気にしません )。次に、これらのメッセージを/log内のいくつかのファイルに書き込みます 、または名前付きパイプに送信するか、(syslogを介して)いくつかのリモートホストに送信します プロトコル、UDPポート514)、/etc/syslog.confで構成されています 。

ユーザースペースアプリケーションは通常、libcを使用します 関数syslog(3) メッセージをログに記録します。 libc これらのメッセージをUNIXドメインソケット/dev/logに送信します (syslogd(8)によって読み取られる場所 )、ただし、アプリケーションがchroot(2)の場合 -edメッセージは、他のソケットに書き込まれる可能性があります。 /var/named/dev/logへ 。もちろん、これらのログとsyslogd(8)を送信するアプリケーションには不可欠です。 これらのソケットの位置について合意します。これらの理由により、syslogd(8) 標準の/dev/log以外の追加のソケットをリッスンするように構成できます 。

最後に、syslog プロトコルは単なるデータグラムプロトコルです。 syslog(3)をバイパスして、アプリケーションがUNIXドメインソケットにsyslogデータグラムを送信することを妨げるものはありません(その資格情報によってソケットを開くことができる場合)。 libcの関数 完全に。データグラムが正しくフォーマットされている場合syslogd(8) メッセージがsyslog(3)を介して送信されたかのように使用できます 。

もちろん、上記は「古典的な」ロギング理論のみをカバーしています。その他のデーモン(rsyslogなど) およびsyslog-ng 、おっしゃるように)プレーンなsyslogd(8)を置き換えることができます 、暗号化されたTCP接続を介してリモートホストにメッセージを送信したり、高解像度のタイムスタンプを提供したりするなど、あらゆる種類の気の利いたことを行います。また、systemdもあります 、それはLinuxのUNIX部分をゆっくりと貪食している。 systemd 独自のロギングメカニズムがありますが、その話は他の誰かが話さなければなりません。 🙂

関連:Linux – curlが失敗した場合にシェルスクリプトを停止する方法は?

* BSDの世界との違い:

* BSDには、klogd(8)はありません。 、および/proc 存在しないか(OpenBSDの場合)、ほとんど廃止されています(FreeBSDおよびNetBSDの場合)。 syslogd(8) キャラクターデバイス/dev/klogからカーネルメッセージを読み取ります 、およびdmesg(1) /dev/kmemを使用します カーネル名をデコードします。 OpenBSDだけが/dev/logを持っています 。 FreeBSDは2つのUNIXドメインソケット/var/run/logを使用します およびvar/rub/logpriv 代わりに、NetBSDには/var/run/logがあります 。


Linux
  1. LinuxでAppleのiMessageを使用する方法(一種)

  2. Linux での mesg コマンドの例

  3. ログアウトせずに Linux ユーザーのグループ割り当てをリロードする

  1. Linuxmvコマンド

  2. Linuxduコマンド

  3. Linuxipコマンド

  1. Linuxcdコマンド

  2. Linuxリポジトリとロギングの確認

  3. Linux / Unix でログインしているユーザーを確認して印刷する