エラーメッセージをring buffer dmesg出力に出力するデバイスドライバを書いています。 dmesg
の出力の変化を確認したい。
これどうやってするの?
比較的最近のdmesg
バージョン フォローオプションを提供 (-w
、--follow
)これはtail -f
と同様に機能します。
したがって、次のコマンドを使用するだけです。
$ dmesg -wH
(-H
、--human
は、色、相対時間などのユーザーフレンドリーな機能を有効にします)
これらのオプションは、たとえばFedora 19で使用できます。
あなたはwatch
コマンドを使うことができます
_watch -n 0.1 "dmesg | tail -n $((LINES-6))"
_
$((LINES-6))
部分は、端末にうまく適合させる必要があります。
dmesg
の出力を直接監視することはできません。
ただし、モジュールがdmesgのリングバッファーに直接出力しない可能性が高く、代わりにカーネルロギング機能を使用します(これはdmesg
によって表示されます)。 syslog
に適切な(デフォルトなど)設定がある場合、これらのメッセージはkern.log
ログファイル。
したがって、次のようなことができます:
tail -f /var/log/kern.log
カーネルのログメッセージを取得するには、dmesg
を使用します。
カーネル自体がリングバッファにログインします。つまり、メモリ内だけです。これでdmesg
は、リングバッファの内容を出力するだけです。 dmesg -c
を実行すると、後でリングバッファも削除されます。
したがって、while true; do dmesg -c; sleep 1; done
のようなことを実行して、機能しないdmesg|tail
のようなものを作成できます。ただし、これによりリングバッファが削除されるため、ルート権限が必要になります。
もう1つの方法は、ファイル/proc/kmsg
であり、これによりリングバッファを表示できます。 tail -f /proc/kmsg
を実行することもできますが、これは1つのプロセスに対してのみ許可され、これは通常、ロギングデーモンです。 -これは、メッセージを読み取って実際のファイル(通常は/ var/log内)に書き込むことで、メッセージを読み取ることができるようにすることです。すべてのメッセージを1つのファイルに出力するか、さまざまな部分をさまざまなファイルに出力するように構成できます。 (ただし、設定はシステムのロギングデーモンに依存します。)
したがって、ニーズに合ったファイルがある場合は/var/log
を確認し、そうでない場合はロギングデーモンを構成してください。
OpenWrt のようなシステムで一般的な BusyBox のような組み込みシステムを使用している場合、機能が非常に制限されており、サポートされているフラグは2〜3のみです。
イベントの変化に応じて継続的に画面にdmesg出力を印刷する方法が必要な場合は、単純なBashループが適切に機能します。理想的ではありませんが、先に述べたように、BusyBox dmesgには多くの機能がありません。コマンドラインに入力すると、次のように同じ効果があることがわかりました。
$ while true; do dmesg -c ; sleep 1 ; done
あなたはループをやめることができます Ctrl + C。スリープ1は、CPUを不必要に破壊することを停止するためのものであり、-cフラグは各呼び出しでバッファをクリアするため、毎秒繰り返し出力が表示されることはありません。
systemd
を使用するシステムでは、次のこともできます。
# journalctl -kf
別々の端末から次の2つのコマンドを使用します。
while true; do dmesg -c >> test.txt;sleep 1; done
tail -f test.txt
同様の結果が得られます。