名前
dmesg - カーネルの
(ログ用)
リングバッファの表示や制御を行う
書式
dmesg [options]
dmesg --clear
dmesg --read-clear [options]
dmesg --console-level level
dmesg --console-on
dmesg --console-off
説明
dmesg
は、カーネルのリングバッファを調べたり、制御したりするために使用する。
デフォルトの動作は、カーネルのリングバッファにあるすべてのメッセージを表示することである。
オプション
--clear, --read-clear, --console-on,
--console-off, --console-level
は、どれか一つしか使えない。
- -C, --clear
- リングバッファをクリアする。
- -c,
--read-clear
- まずリングバッファの内容を表示し、その後でクリアする。
- -D,
--console-off
- コンソールへのメッセージ出力を抑止する
(訳注: ただし emergency
レベルのメッセージだけは表示する)。
- -d,
--show-delta
- タイムスタンプ
(訳注:
ブートからの経過秒数をマイクロ秒まで表示)
とともに、前のメッセージ出力から経過した時間の増分
(time delta)
を表示する。--notime
と一緒に使用した場合は、タイムスタンプは省略して、時間の増分だけを表示する。
- -E,
--console-on
- コンソールへのメッセージ出力を有効にする。
- -e, --reltime
- ローカルタイムと時間の増分を人間に読みやすいフォーマットで表示する。
ローカルタイムへの変換は不正確かもしれないことを、ご承知いただきたい
(詳しくは -T
を参照)。
- -F, --file
file
- 指定されたファイル
file から syslog
のメッセージを読み込む。-F
は、kmsg
フォーマットのメッセージをサポートしていないことに気をつけていただきたい。
サポートしているのは、昔ながらの
syslog
フォーマットだけである。
- -f, --facility
list
- 出力を指定されたファシリティの
(コンマで区切った)
リストに限定する。たとえば、
dmesg --facility=daemon
- は、システムデーモンのメッセージのみを表示する。
どんなファシリティがサポートされているかについては、--help
の出力をご覧いただきたい。
- -H, --human
- 人間に読みやすい出力にする。--color,
--reltime, --nopager も参照。
- -k, --kernel
- カーネルメッセージを表示する
(訳注:
つまり、ファシリティが
kern
のメッセージのみを表示する)。
- -L,
--color[=when]
- 出力をカラー表示にする。指定が任意の引き数
when には、auto, never,
always
が使える。引き数
when
が省略された場合は、デフォルトの
auto
が使用される。カラー表示は無効にすることもできる。
プログラムに埋め込まれた現在のデフォルトが有効か無効かを知るには、
--help
の出力を見ればよい。下記の「カラー表示」セクションもご覧いただきたい。
- -l, --level
list
- 出力を指定されたレベル
(訳注:
重大度、緊急度) の
(コンマで区切った)
リストに限定する。たとえば、
dmesg --level=err,warn
- は、error と warning
メッセージのみを表示する。どんなレベルがサポートされているかについては、--help
の出力をご覧いただきたい。
- -n, --console-level
level
- コンソールに出力されるログメッセージのレベル
(重大度) を level
に設定する。level
に指定するのは、数値のレベルか、レベルの名称の短縮形である。
どんなレベルがサポートされているかについては、
--help
の出力をご覧いただきたい。
- [訳注]
- 現在使用中のコンソール
(X
上の端末エミュレータではない)
に自動的に表示されるメッセージが、指定したレベル以上の重大度を持つものになる。
数値による指定の場合は、その数値を含まない、それより重大な
(つまり、数値が小さい)
レベルのメッセージが表示され、名称による指定の場合は、
その名称を含む、それ以上の重大度のメッセージが表示されるようになる。
レベルの数値については、syslog(2)
を参照。
たとえば、-n 1
や -n emerg
を指定すると、emergency (panic)
以外のすべてのメッセージが、コンソールに表示されなくなる。とは言え、
すべてのレベルのメッセージが
/proc/kmsg
に書き込まれることに変わりはないので、
カーネルメッセージをどこに出力するかは、やはり
syslogd(8)
使って、きちんとコントロールすることができる。なお、
-n
オプションを使用したとき、dmesg
がカーネルのリングバッファを表示したり、クリアしたりすることはない
(訳注: この -n
オプションは、コンソールに自動的に表示されるメッセージのレベルを設定するだけである)。
- --noescape
- 非表示文字や問題を起こしかねない文字
(たとえば、破損したマルチバイトシーケンスや、端末制御文字など)
は、デフォルトではセキュリティ上の理由から
\x<hex>
の形式でエスケープされるようになっている。このオプションはその機能を完全に無効にする。
このオプションは、たとえば
--raw
と併せて、デバッグのために使用できる。
使用には気を付けること。デフォルトで使うようにしてはいけない。
- -P, --nopager
- 出力をパイプでページャーに渡さない。--human
の出力では、ページャーはデフォルトで使用される。
- -p,
--force-prefix
- 複数行メッセージの各行にファシリティ、レベル、タイムスタンプの情報を付け加える。
- -r, --raw
- メッセージバッファを未加工
(raw) のまま表示する。
すなわち、ログレベルを表す接頭辞を取り除かない。
ただし、すべての非表示文字がエスケープされることには変わりがない
(--noescape も参照)。
注意してほしいが、実際の未加工フォーマットは、dmesg(1)
がカーネルメッセージを読み出す方法によって違ってくる
(訳注: すぐ下の -S
オプションや -F
オプションの説明も参照)。デバイス
/dev/kmsg と syslog(2)
では、違ったフォーマットを使っているのである。
ただし、後方互換のため、dmesg
は、常に syslog(2)
のフォーマットでデータを返すようになっている。/dev/kmsg
にある本当の未加工データは、たとえば、'dd
if=/dev/kmsg iflag=nonblock'
といったコマンドを使えば、読むことができる。
- -S, --syslog
- カーネルメッセージを読み出すのに、dmesg
が syslog(2)
のカーネルインターフェースを使うようにする。kernel
3.5.0 以来、syslog(2)
ではなく、/dev/kmsg
を使用するのがデフォルトである。
- -s, --buffer-size
size
- カーネルのリングバッファへの問い合わせに、サイズ
size
のバッファを使用する。デフォルトでは
16392
である。(デフォルトのカーネル・シスログバッファのサイズは、最初は
4096 だったが、1.3.54
以後は 8192 になり、2.1.113
以来 16384 になった。)
カーネルバッファをデフォルトより大きく設定している場合に、バッファを全部見るには、
このオプションを使えばよい。
- -T, --ctime
- 人間に読みやすいタイムスタンプを表示する。
「このタイムスタンプは不正確なことがある!」のをご承知いただきたい。
ログに使用する、タイムスタンプの元になる情報
(the time source)
は、システムのサスペンド/レジューム後に、更新が行われない。
更新が行われないので、タイムスタンプは、ブートタイムと単調増加クロック
(monotonic clocks)
との間の現在の増分
(delta)
によって時間合わせがなされているのだが、そうした時間合わせが、
最後のレジューム以後に表示されるメッセージ同士の間でしかうまく働かないのである。
- [訳注]
- つまり、サスペンド/レジューム直後のタイムスタンプについては、
時間合わせがうまく行かない。
言葉を変えると、カーネル・リングバッファのタイムスタンプでは、
ブートタイムと実稼働時間のみが使用されており、サスペンド中の時間は加算されない。
それ故、サスペンド後の
dmesg
の日時表示は信用できないということである。
- -t, --notime
- カーネルが出力するタイムスタンプを表示しない。
- --time-format
format
- 指定されたフォーマット
format
を使って、タイムスタンプを表示する。format
には、ctime, reltime, delta,
iso が使える。
最初の三つは、それぞれのタイムフォーマットを指定するオプション
(訳注: --ctime など)
のエイリアスであり、iso
フォーマットは、ISO-8601
のタイムスタンプフォーマットの
demsg
における実装である。
この最後のフォーマットの目的は、
二つのシステム間でのタイムスタンプの比較のような解析作業を容易にすることだ。
iso
タイムスタンプは、
YYYY-MM-DD<T>HH:MM:SS,<microseconds><-+><timezone
offset from UTC>
という形式になる。
iso
フォーマットにも
ctime
と同じ問題がある。
すなわち、システムがサスペンド、レジュームした場合、日時は不正確かもしれないのである。
- -u,
--userspace
- ユーザ空間のメッセージを表示する。
- -w, --follow
- 新しいメッセージが出力されるのを待つ。この機能は、/dev/kmsg
を読むことのできるシステムでのみサポートされている
(カーネル 3.5.0 以降)。
- -W,
--follow-new
- 待機する。そして、新しいメッセージのみを表示する。
- -x, --decode
- ファシリティとレベル
(重大度)
の番号を人間に分かりやすい接頭辞に変換する。
- -V, --version
- バージョン情報を表示して終了する。
- -h, --help
- ヘルプを表示して終了する。
カラー表示
自動的なカラー表示は、/etc/terminal-colors.d/dmesg.disable
という空ファイルを作ることで無効にできる。
カラー表示の設定についてもっと詳しいことを知りたかったら、terminal-colors.d(5)
をご覧になるとよい。
dmesg
は、以下の論理カラー名をサポートしている。
- subsys
- メッセージのサブシステム接頭辞
(たとえば、"ACPI")。
- time
- メッセージのタイムスタンプ。
- timebreak
- --reltime や --human
における出力メッセージの、短い
ctime
フォーマットで表現したタイムスタンプ。
- alert
- ログの重大度が alert
のメッセージのテキスト部分。
- crit
- ログの重大度が critical
のメッセージのテキスト部分。
- err
- ログの重大度が error
のメッセージのテキスト部分。
- warn
- ログの重大度が warning
のメッセージのテキスト部分。
- segfault
- セグメンテーションフォールトを知らせるメッセージのテキスト部分。
終了ステータス
dmesg
が「操作が許可されていない」旨のエラーを出して、実行に失敗することがある。
これが起きるのは、たいてい、カーネルの設定
dmesg_restrict
のせいである。詳しくは、syslog(2)
をご覧いただきたい。
作者
Karel Zak <kzak@redhat.com>
dmesg
を最初に書いたのは、Theodore
Ts'o <tytso@athena.mit.edu> だった。
関連項目
terminal-colors.d(5), syslogd(8)
入手方法
この dmesg
コマンドは、util-linux
パッケージの一部であり、Linux
Kernel Archive <https://www.kernel.org/pub/linux/utils/util-linux/>
から入手できる。