👻

dmesgコマンドについて

2023/05/13に公開

はじめに

dmesgコマンドについて学習したことを整理しました。

対象者

dmesgコマンドについてざっくりと知りたい人。

dmesgコマンドの概要

カーネルが出力したメッセージを一時的に蓄えておくバッファの内容を表示する。
システムが起動した後もカーネルが出力するメッセージが蓄えられ、バッファに収まりきらなくなった古いメッセージは消えるので、長時間稼働しているシステムではdmesgコマンドを実行してもシステム起動時のメッセージが残っていないことがある。
ブート時の情報なので、特に起動時のカーネル周りのトラブルが起こった時に確認するべきファイル。

dmesg [オプション]

システム起動時のログの保存場所に

  • /var/log/messages
  • /var/log/dmesg
  • /var/log/boot.log
    があるが、これらはdmesgコマンドで確認するのではなく、通常はcat, less, more, tailなどのコマンドで確認する。

dmesg使用時のポイント

  • 多くのオプションがあることを理解する。

  • デフォルトでは全てのメッセージを表示するため、
    -l オプションを使用すると特定の重要度のメッセージを表示できる。
    例 : エラーメッセージとクリティカルメッセージのみ表示したいとき。
    dmesg -l err,crit

  • 出力が非常に多いので、特定の情報を検索するためにgrepコマンドと組み合わせて使用する。
    例 : USBに関連するメッセージを表示したいとき。
    dmesg | grep USB

  • -Tオプションを使用することで、カーネルタイムスタンプを読みやすい形式で表示できる。
    長時間動作しているシステムで特定のエラーが発生した時間を特定するのに役立つ。

  • dmesgのバッファサイズはカーネルパラメータで調整できる。
    しかし、バッファサイズを大きくするとメモリ使用量が増えるので注意が必要。

journalctl -kコマンドとの違い

systemdを採用したシステムではjournalctl -kコマンドでdmesgコマンドと同様にカーネルのバッファ内容を表示できる。

<両者の違い>
dmesgの出力はカーネルリングバッファから取得されるため、システムが再起動するとリングバッファはクリアされ、新たな起動時の情報で上書きされる。

systemdのジャーナルシステムはディスク上に情報を保存するため、再起動後も過去のログを参照することが可能(ストレージの容量やシステムの設定に依存)

journalctl -k
dmesgと同じ情報が出力される。

journalctl -kb
前回の起動からのカーネルメッセージのみを表示。

Discussion