DMESG(1)

名前
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/> から入手できる。