名前

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

コンソールへのメッセージ出力を抑止する。

-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 も参照のこと。

-J, --json

JSON 出力書式を使う。 時刻の出力書式は "sec.usec" 書式のみとなる。 ログの優先度レベルはデフォルトではデコードされない (--decode を使えば、 ファシリティと優先度に分割される)。 この他の出力書式や時刻書式を定めるオプションは無視される。

-k, --kernel

カーネルメッセージを表示する。

-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 の出力を参照のこと。

たとえば、-n 1-n emerg を指定すると、emergency (panic) 以外のすべてのメッセージが、コンソールに表示されなくなる。すべてのレベルのメッセージが /proc/kmsg に書き込まれることに変わりはないので、 カーネルメッセージをどこに出力するかは、 syslogd(8) 使って適切にコントロールすることができる。 -n オプションを使用したときには、 dmesg がカーネルのリングバッファーを表示したり、クリアしたりすることはない。

--noescape

非表示文字や問題を起こしかねない文字 (たとえば、破損したマルチバイトシーケンスや、端末制御文字など) は、デフォルトではセキュリティ上の理由から \x<hex> の形式でエスケープされるようになっている。このオプションはその機能を完全に無効にする。 このオプションは、たとえば --raw と併せて、デバッグのために使用できる。 使用には気を付けること。デフォルトで使うようにしてはいけない。

-P, --nopager

出力をパイプでページャーに渡さない。 --human の出力では、 ページャーはデフォルトで使用される。

-p, --force-prefix

複数行メッセージの各行にファシリティ、 レベル、 タイムスタンプの情報を付け加える。

-r, --raw

メッセージバッファーを未加工 (raw) のまま表示する。 すなわち、ログレベルを表すプレフィックスを取り除かない。 ただし、すべての非表示文字がエスケープされることには変わりがない (--noescape も参照)。

注意してほしいが、実際の未加工フォーマットは、dmesg がカーネルメッセージを読み出す方法によって違ってくる。デバイス /dev/kmsgsyslog(2) では、違ったフォーマットを使っているのである。 ただし、後方互換のため、dmesg は、常に syslog(2) のフォーマットでデータを返すようになっている。 /dev/kmsg にある本当の未加工データは、 たとえば 'dd if=/dev/kmsg iflag=nonblock' といったコマンドを使えば、読むことができる。

-S, --syslog

カーネルメッセージを読み出すのに、dmesgsyslog(2) のカーネルインターフェースを使うようにする。kernel 3.5.0 以来、syslog(2) ではなく、/dev/kmsg を使用するのがデフォルトである。

-s, --buffer-size size

カーネルのリングバッファーへの問い合わせに、サイズ size のバッファーを使用する。デフォルトでは 16392 である。(デフォルトのカーネル syslog バッファーのサイズは、最初は 4096 だったが、1.3.54 以後は 8192 になり、2.1.113 以来 16384 になった。) カーネルバッファーをデフォルトより大きく設定している場合に、バッファーを全部見るには、 このオプションを使えばよい。

-T, --ctime

読みやすいタイムスタンプを表示する。

このタイムスタンプは不正確なことがある!」という点に注意すること。 ログに使用する、タイムスタンプの元になる情報 (time source) は、システムの サスペンド/レジューム 後に、更新が行われない。 更新が行われないので、タイムスタンプは、ブートタイムと単調増加クロック (monotonic clocks) との間の現在の増分 (delta) によって時間合わせがなされているのだが、そうした時間合わせが、 最後のレジューム以後に表示されるメッセージ同士の間でしかうまく働かないのである。

--since time

指定された時間以降のレコードを表示する。 時間の指定には、絶対的な指定と相対的な指定 (たとえば '1 hour ago') が可能である。 タイムスタンプは不正確になることがある点に注意。 詳しくは --ctime を参照のこと。

--until time

指定された時間までのレコードを表示する。 時間の指定には、絶対的な指定と相対的な指定 (たとえば '1 hour ago') が可能である。 タイムスタンプは不正確になることがある点に注意。 詳しくは --ctime を参照のこと。

-t, --notime

カーネルが出力するタイムスタンプを表示しない。

--time-format format

指定されたフォーマット format を使って、タイムスタンプを表示する。format には、ctime, reltime, delta, iso が使える。 最初の三つは、それぞれのタイムフォーマットを指定するオプションのエイリアスであり、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

ファシリティとレベル (重大度) の番号を分かりやすいプレフィックスに変換する。

-h, --help

ヘルプを表示して終了する。

-V, --version

バージョンを表示して終了する。

カラー表示

出力のカラー化は terminal-colors.d(5) の機能によって実装されている。 暗にカラー化を無効にするには、 以下のファイルを空ファイルとすることで実現することができる。

/etc/terminal-colors.d/dmesg.disable

上は dmesg コマンドに対するものであり、 すべてのツールに対しては以下のファイルを空ファイルとすることで実現できる。

/etc/terminal-colors.d/disable

ユーザー固有の $XDG_CONFIG_HOME/terminal-colors.d または $HOME/.config/terminal-colors.d はグローバル設定を上書きする。

なお出力のカラー化はデフォルトで有効となっている場合がある。 その場合、 terminal-colors.d ディレクトリは存在していなくて構わない。

dmesg は、以下の論理カラー名をサポートしている。

subsys

メッセージのサブシステムプレフィックス (たとえば、"ACPI")。

time

メッセージのタイムスタンプ。

timebreak

--reltime--human における出力メッセージの、短い ctime フォーマットで表現したタイムスタンプ。

alert

ログの重大度が alert のメッセージのテキスト部分。

crit

ログの重大度が critical のメッセージのテキスト部分。

err

ログの重大度が error のメッセージのテキスト部分。

warn

ログの重大度が warning のメッセージのテキスト部分。

segfault

セグメンテーションフォールトを知らせるメッセージのテキスト部分。

終了ステータス

dmesg が「操作が許可されていない」旨のエラーを出して、実行に失敗することがある。 これが起きるのは、たいてい、カーネルの設定 dmesg_restrict のせいである。詳しくは、syslog(2) を参照のこと。

作者

dmesg を最初に書いたのは、

関連項目

terminal-colors.d(5), syslogd(8)

バグ報告

バグ報告は、 以下にある issue トラッカーを利用すること。 <https://github.com/util-linux/util-linux/issues>.

入手方法

dmesg コマンドは util-linux パッケージの一部であり、 以下からダウンロードできる。 Linux Kernel Archive <https://www.kernel.org/pub/linux/utils/util-linux/>.