web-dev-qa-db-ja.com

変更されたdmesg出力を確認するにはどうすればよいですか?

エラーメッセージをring buffer dmesg出力に出力するデバイスドライバを書いています。 dmesgの出力の変化を確認したい。

これどうやってするの?

154
Milad Khajavi

比較的最近のdmesgバージョン フォローオプションを提供-w--follow)これはtail -fと同様に機能します。

したがって、次のコマンドを使用するだけです。

$ dmesg -wH

-H--humanは、色、相対時間などのユーザーフレンドリーな機能を有効にします)

これらのオプションは、たとえばFedora 19で使用できます。

194
maxschlepzig

あなたはwatchコマンドを使うことができます

_watch -n 0.1 "dmesg | tail -n $((LINES-6))"
_

$((LINES-6))部分は、端末にうまく適合させる必要があります。

57
peterph

dmesgの出力を直接監視することはできません。

ただし、モジュールがdmesgのリングバッファーに直接出力しない可能性が高く、代わりにカーネルロギング機能を使用します(これはdmesgによって表示されます)。 syslogに適切な(デフォルトなど)設定がある場合、これらのメッセージはkern.logログファイル。

したがって、次のようなことができます:

 tail -f /var/log/kern.log
12
umläute

カーネルのログメッセージを取得するには、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を確認し、そうでない場合はロギングデーモンを構成してください。

10
michas

OpenWrt のようなシステムで一般的な BusyBox のような組み込みシステムを使用している場合、機能が非常に制限されており、サポートされているフラグは2〜3のみです。

イベントの変化に応じて継続的に画面にdmesg出力を印刷する方法が必要な場合は、単純なBashループが適切に機能します。理想的ではありませんが、先に述べたように、BusyBox dmesgには多くの機能がありません。コマンドラインに入力すると、次のように同じ効果があることがわかりました。

$ while true; do dmesg -c ; sleep 1 ; done

あなたはループをやめることができます Ctrl + C。スリープ1は、CPUを不必要に破壊することを停止するためのものであり、-cフラグは各呼び出しでバッファをクリアするため、毎秒繰り返し出力が表示されることはありません。

8
user241342

systemdを使用するシステムでは、次のこともできます。

# journalctl -kf
5
Maxim

別々の端末から次の2つのコマンドを使用します。

  1. while true; do dmesg -c >> test.txt;sleep 1; done
  2. tail -f test.txt

同様の結果が得られます。

0
K_K