dmesgとは何か?
dmesgは「display message」または「driver message」の略で、Linuxカーネルのリングバッファに保存されたメッセージを出力します。システムが起動した時点から現在まで、ハードウェアがどのように認識され、ドライバがどのようにロードされたか、またはどのようなエラーが発生したかを時系列で表示します。
主要な機能と用途
dmesgは、システムの最も低いレベル(カーネル)で何が起こっているかを診断する際に使用されます。
- ブートメッセージの確認: システム起動時に出力されるすべてのカーネルメッセージを表示します。
- ハードウェア診断: 新しいハードウェア(USB、ディスクなど)が接続または削除されたときのログを確認します。
- ドライバエラー: ドライバのロード失敗やカーネルレベルのエラー(Kernel Panic)の原因を追跡します。
- リングバッファ: バッファサイズが固定されているため、古いログは新しいログによって上書きされます。
主要オプション (Shell)
dmesgは、他のコマンド(grep, less)とパイプ(|)で接続して使用されることが多いですが、それ自体にも便利なオプションがあります。
1. 出力形式と時間
2. フィルタリングとリアルタイム監視
3. バッファ/コンソール制御 (注意が必要)
生成されたコマンド:
コマンドを組み合わせてみてください。
説明:
`dmesg` コマンドを実行します。
これらのオプションを組み合わせて、AIと一緒に仮想的にコマンドを実行してみてください。
使用シナリオの例 (Shell)
dmesgはgrepと組み合わせて、必要な情報のみをフィルタリングする場合が多いです。
すべてのメッセージを表示 (ページング)
dmesg | less
最も基本的な使用方法。lessで快適にスクロールします。
新しいメッセージをリアルタイムで確認 (読みやすく)
dmesg -wH
-w (リアルタイム) と -H (人間が読みやすい時間) を組み合わせます。
USB関連メッセージのみフィルタリング
dmesg | grep -i usb
grepの-iオプションは大文字小文字を無視します。
ディスク(SATA/NVMe)関連メッセージのフィルタリング
dmesg | grep -iE 'sd[a-z]|nvme'
grep -E (拡張正規表現) で 'sd[a-z]' または 'nvme' を含むログを検索します。
エラー(Error)または警告(Warn)のみフィルタリング
dmesg -H -l err,warn
-l オプションでログレベルを指定します。
最新の10行のメッセージのみ表示
dmesg | tail -n 10
tailを組み合わせて最新のメッセージのみを素早く確認します。
facility/levelタグを含めて表示
dmesg -xT | less
-x オプションでfacility/levelをデコードし、理解を助けます。
ログをファイルに保存
dmesg -T > ~/dmesg-$(date +%F-%H%M).log
起動直後のdmesg全体を保存します。
インストール
dmesgはutil-linuxパッケージに含まれており、ほとんどのLinuxディストリビューションでデフォルトで提供されています。
デフォルトでインストール済み
別途インストールは不要です。もしない場合は、ディストリビューションの「util-linux」パッケージをインストールしてください。
ヒントと注意事項
dmesg vs journalctl
- systemd環境: 最新のsystemdシステムでは、「journalctl -k」(カーネルログ)または「journalctl -b」(今回のブートログ)でdmesgレベルを超えるシステムログの統合表示が可能です。
- 時間形式: デフォルトのdmesg出力の時間は[起動後の経過時間(秒)]です。実際の時間を確認するには「-H」または「-T」オプションを使用してください。
- バッファの上書き: リングバッファの特性上、古いメッセージは消える可能性があります。起動初期のログ保存が必要な場合は、「journalctl -b 0」で確認するか、dmesg出力をファイルに保存してください。
- 権限/セキュリティ: 一部のディストリビューションでは、「/proc/sys/kernel/dmesg_restrict=1」で一般ユーザーのdmesgアクセスを制限しています。この場合、「sudo dmesg」または「sudo journalctl -k」を使用してください。
- ログのクリア(-c, -C): 「dmesg -c」と「-C」はデバッグには有用ですが、一度クリアすると復元できません。運用環境では慎重に使用してください。