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


回答:


178

比較的最近のdmesgバージョンでは、に類似して動作するフォローオプション-w--follow)が提供さtail -fます。

したがって、次のコマンドを使用します。

$ dmesg -wH

-H--human色、相対時間などの使いやすい機能を有効にします)

これらのオプションは、例えばFedora 19で利用可能です。


2
素敵な発見!Gentooは完全に理解されません-Hが、それ以外スポットオン
unperson325680

ユーザースペースツールはバージョン2.22+である必要があります。Ubuntuユーザーは、バージョン14.10 "utopic"を待つ必要があります
ダニエルアルダー14

1
Ubuntuはgrok -w-時計を使用する必要はありません(下)
ブレントファウスト

2
不可解な単一文字のフラグの代わりに--descriptively-named-flagsを使用するシステム管理者の回答をすごい。ブラボー、SIR。ブラボー。
-allyourcode

1
-wUtopic(14.10)以降のUbuntuのすべてのバージョンで動作するはずです。(launchpad.net/ubuntu/+source/util-linux/+publishinghistoryは早期Utopicパッケージは2.20のためだったが、それがリリースされた時点で2.25に達し示唆している。)
mwfearnley

54

watchこのようなことを正確に意図したコマンドを使用できます

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

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


2
二重引用符の代わりに単一引用符を使用する(またはドル記号をエスケープする)場合、呼び出しごとに$ LINESの新しい値を取得するため、端末サイズを変更すると調整されます。
Pパパ

単一引用符は変数の展開を禁止します。さらに、この例では、変数は1回だけ展開されます-の呼び出し時にwatch。したがって、の呼び出し間で実際には変化しませんdmesg。端末の状態を照会するラッパーを使用する必要があります。
ペテルフ

2
それが全体のポイントです。単一引用符は、シェルがに引数を渡すときに変数の展開を禁止するwatchため、watchは、そこに変数式を指定してコマンドを実行します。この式は、起動するシェルによって展開されます。毎回。それを試して、それは動作します。
Pパパ

うーん、あなたは正しいです-私はuseを想定していwatchますpopen()。つまり、別のシェルが生成され、環境変数が提供されます(したがって、実行ごとに更新されます)。素敵な発見。
ペテルフ

12

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

ただし、モジュールがdmesgのリングバッファに直接印刷されず、代わりにカーネルロギング機能を使用する可能性が高くなります(カーネルロギング機能はで表示されますdmesg)。あなたがあればsyslog、いくつかのまともな(例えば、デフォルト)設定があり、これらのメッセージは、最も可能性もに表示されますkern.logログファイル。

次のようなことができます:

 tail -f /var/log/kern.log

/var/log/kern.logLinux特有のものです。OpenBSD(および場合によってはその他)の場合、dmesgのものは/ var / log / messagesに記録されます。確かに、他にもいくつかのものがあります。
kurtm

2
tail -f /var/log/{messages,kernel,dmesg,syslog}スーパーユーザー
ここでは

9

dmesgカーネルのログメッセージを取得するために使用します。

カーネル自体は、リングバッファ、つまりメモリ内にログインします。これでdmesg、そのリングバッファの内容が出力されるだけになりました。実行dmesg -cすると、その後リングバッファも削除されます。

したがって、動作しないのと同じようなものwhile true; do dmesg -c; sleep 1; doneを持つようなことができますdmesg|tail。ただし、これによりリングバッファが削除されるため、ルートパワーが必要になります。

もう1つの方法は/proc/kmsg、リングバッファを表示できるファイルです。できますtail -f /proc/kmsgが、これは1つのプロセスにのみ許可されており、通常はこれがロギングデーモンです。-それは、メッセージを読み取り、読み取り可能な実際のファイル(通常は/ var / logにある)に書き込むことです。すべてのメッセージを単一のファイルに出力するか、異なる部分を異なるファイルに出力するように構成できます。(ただし、構成はシステムのログデーモンに依存します。)

したがって/var/log、ニーズに合ったファイルがあるかどうかを確認し、それ以外の場合はロギングデーモンを設定してください。


//使用しているCEntOS 6システムでは、/ proc / kmsgをテーリングおよび表示しても出力は生成されません。[〜] $ sudo tail -f / proc / kmsg♥%[〜] $ sudo cat / proc / kmsg♥%[〜] $
ネイサン・バサニーズ

8

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

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

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

Ctrl-Cでループを終了できます。sleep1はCPUを不必要に破壊するのを止めることです。


1
Androidのデバッグに本当に便利です。
val


0

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

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

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


//、これは基本的にdmesgにtest.txtに出力を追加するよう指示しますか?2番目のコマンドは、そのtest.txtファイルを監視するだけですか?
ネイサンバサニーズ

ありがとう..はい。2番目のコマンドはdmesgへの変更を監視します。cat / proc / kmsgは同様の出力を実現できますが、ログをファイルに保存しません。
K_K
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.