重要なポイント
- dmesg コマンドを使用すると、Linux リング バッファに保存されているメッセージを確認して、ハードウェア エラーや起動時の問題についての洞察を得ることができます。
- dmesg コマンドをカスタマイズするには、sudo の必要性の削除、カラー出力の強制、人間が判読できるタイムスタンプの使用、ライブ イベントの監視、最後のメッセージの取得、特定の用語の検索、ログ レベルまたは機能カテゴリによるフィルタリングを実行できます。
dmesg
コマンドを使用すると、Linux 起動プロセスの隠された世界を覗き見ることができます。 「障害発見者の友人」を使用して、カーネル自体のリング バッファからのハードウェア デバイスとドライバーのメッセージを確認および監視します。
Linux のリングバッファの仕組み
Linux および Unix 系のコンピュータでは、ブートとスタートアップは、コンピュータの電源がオンになったときに発生する一連のイベントの 2 つの異なるフェーズです。
ブート プロセス ( BIOS または UEFI 、 MBR 、および GRUB ) は、カーネルがメモリにロードされ、初期 RAM ディスク ( initrd または initramfs ) に接続され、 systemd が開始される時点までシステムの初期化を行います。
次に、起動プロセスがバトンを受け取り、オペレーティング システムの初期化を完了します。初期化のごく初期の段階では、 syslogd や rsyslogd などのログ デーモンはまだ起動して実行されていません。初期化のこの段階で顕著なエラー メッセージや警告が失われないようにするために、カーネルにはメッセージ ストアとして使用する リング バッファ が含まれています。
リング バッファは、メッセージ用に予約されているメモリ空間です。シンプルなデザインで、固定サイズです。いっぱいになると、新しいメッセージが最も古いメッセージを上書きします。概念的には、これは「 循環バッファ 」と考えることができます。
カーネル リング バッファには、デバイス ドライバーの初期化メッセージ、ハードウェアからのメッセージ、カーネル モジュールからのメッセージなどの情報が格納されます。リング バッファにはこれらの低レベルの起動メッセージが含まれるため、ハードウェア エラーやその他の起動問題の調査を開始するのに適しています。
そこで dmesg コマンドが登場します。
dmesgコマンドとは何ですか?
dmesg
コマンドを
使用すると、リング バッファに保存されているメッセージを確認できます
。デフォルトでは、
dmesg
を使用するには
sudo
を使用する必要があります。
sudo dmesg
リング バッファ内のすべてのメッセージがターミナル ウィンドウに表示されます。
それは大洪水でした。明らかに、私たちがする必要があるのは、
less
を
パイプする
ことです。
sudo dmesg |少ない
これで、メッセージをスクロールして興味のある項目を探すことができます。
less
内で検索機能を使用すると、興味のある項目や用語を見つけてハイライト表示できます。less
less
でスラッシュ キー「/」を押して検索機能を開始します。
sudo の必要性の除去
dmesg
使用するたびに
sudo
使用する必要がないようにするには、このコマンドを使用できます。ただし、注意してください。これにより、コンピュータのユーザー アカウントを持つ人は誰でも
sudo
使用しなくても
dmesg
を使用できるようになります。
sudo sysctl -w kernel.dmesg_restrict=0
カラー出力の強制
デフォルトでは、
dmesg
おそらく色付きの出力を生成するように設定されています。そうでない場合は、
-L
(color) オプションを使用して出力を色付けするように
dmesg
に指示できます。
sudo dmesg -L
dmesg
を常にデフォルトで色付き表示に設定するには、次のコマンドを使用します。
sudo dmesg --color=always
人間のタイムスタンプ
デフォルトでは、
dmesg
カーネルが起動してからの秒および
ナノ秒
のタイムスタンプ表記を使用します。これをより人間に優しい形式でレンダリングするには、
-H
(人間) オプションを使用します。
sudo dmesg -H
これにより、2 つのことが起こります。
-
出力は自動的に
lessで表示されます。 - タイムスタンプには、日付と時刻のタイムスタンプが分単位で表示されます。各分に発生したメッセージには、その分の開始からの秒とナノ秒のラベルが付けられます。
dmesg による人間が判読できるタイムスタンプ
ナノ秒の精度は必要ないが、デフォルトよりも読みやすいタイムスタンプが必要な場合は、
-T
(人間が判読できる) オプションを使用します。 (少し混乱します。
-H
は「人間向け」オプション、
-T
は「人間が読める」オプションです。)
sudo dmesg -T
タイムスタンプは標準の日付と時刻として表示されますが、解像度は 1 分に低下します。
1 分以内に起こったすべてのタイムスタンプが同じになります。イベントの順序だけが気になる場合は、これで十分です。また、コマンド プロンプトにダンプされていることにも注意してください。このオプションは自動的に
less
呼び出しません。
dmesg を使用してライブ イベントを視聴する
カーネル リング バッファに到着したメッセージを表示するには、
--follow
(メッセージを待機) オプションを使用します。その文は少し奇妙に思えるかもしれません。起動シーケンス中に発生するイベントからのメッセージを保存するためにリング バッファーが使用されている場合、コンピューターが起動して実行された後、ライブ メッセージはどのようにしてリング バッファーに到着するのでしょうか?
コンピュータに接続されているハードウェアに変更が生じると、メッセージがカーネル リング バッファに送信されます。カーネル モジュールを更新または追加すると、それらの変更に関するリング バッファ メッセージが表示されます。 USB ドライブを接続するか、Bluetooth デバイスを接続または切断すると、
dmesg
出力にメッセージが表示されます。仮想ハードウェアであっても、リング バッファに新しいメッセージが表示されることがあります。仮想マシンを起動すると、新しい情報がリング バッファに到着するのがわかります。
sudo dmesg --フォロー
コマンド プロンプトには戻らないことに注意してください。新しいメッセージが表示されると、
dmesg
によってターミナル ウィンドウの下部に表示されます。
CD-ROM ディスクの内容をディレクトリ ツリーに移植しているため、CD-ROM ディスクをマウントするだけでも変更として認識されます。
リアルタイム フィードを終了するには、
Ctrl+C
を押します。
最新の 10 メッセージを取得する
tail コマンドを使用して 、最後の 10 個のカーネル リング バッファ メッセージを取得します 。もちろん、メッセージはいくつでも取得できます。 10 は単なる例です。
sudo dmesg |最後 -10
最新の 10 メッセージが取得され、ターミナル ウィンドウにリストされます。
特定の用語を検索する
dmesg
からの出力を
grep
にパイプして
、特定の文字列またはパターンを検索します
。ここでは、一致する文字列の大文字と小文字が無視されるように
-i
(大文字と小文字を無視) オプションを使用しています。結果には、「usb」と「USB」、およびその他の小文字と大文字の組み合わせが含まれます。
sudo dmesg | grep -i USB
強調表示された検索結果は大文字と小文字で表示されます。
システム
sda
上の最初の
SCSI
ハードディスクへの参照を含むメッセージを分離できます。 (実際、
sda
現在、
最初の SATA ハード ドライブ
や USB ドライブにも使用されています。)
sudo dmesg | grep -i sda
sda
に言及するすべてのメッセージが取得され、ターミナル ウィンドウにリストされます。
一度に複数の用語を
grep
検索するには、
-E
(正規表現の拡張) オプションを使用します。検索語はパイプ「|」で引用符で囲んだ文字列内に指定する必要があります。検索語間の区切り文字:
sudo dmesg | grep -E "メモリ|tty|dma"
検索用語に言及するメッセージはすべて、ターミナル ウィンドウにリストされます。
ログレベルの使用
カーネル リング バッファに記録されるすべてのメッセージにはレベルが関連付けられています。レベルはメッセージ内の情報の重要性を表します。レベルは次のとおりです。
- emerg : システムが使用できません。
- アラート : 直ちにアクションを実行する必要があります。
- crit : クリティカルな状態。
- err : エラー状態。
- warn : 警告条件。
- 注意 : 正常ですが重大な状態です。
- info : 情報。
- debug : デバッグレベルのメッセージ。
-l
(レベル) オプションを使用し、レベルの名前をコマンドライン パラメータとして渡すことで、
dmesg
特定のレベルに一致するメッセージを抽出できるようになります。 「情報」レベルのメッセージのみを表示するには、次のコマンドを使用します。
sudo dmesg -l 情報
リストされているメッセージはすべて情報メッセージです。これらにはエラーや警告は含まれず、役立つ通知だけが含まれます。
1 つのコマンドで 2 つ以上のログ レベルを組み合わせて、複数のログ レベルのメッセージを取得します。
sudo dmesg -l デバッグ、通知
dmesg
からの出力は、各ログ レベルのメッセージを組み合わせたものです。
施設のカテゴリー
dmesg
メッセージは、「ファシリティ」と呼ばれるカテゴリにグループ化されます。施設のリストは次のとおりです。
- kern : カーネルメッセージ。
- user : ユーザーレベルのメッセージ。
- mail : メールシステム。
- デーモン : システムデーモン。
- auth : セキュリティ/認可メッセージ。
- syslog : 内部 syslogd メッセージ。
- lpr : ラインプリンターサブシステム。
- news : ネットワーク ニュース サブシステム。
dmesg
に出力をフィルタリングして、特定の機能のメッセージのみを表示するように依頼できます。これを行うには、
-f
(機能) オプションを使用する必要があります。
sudo dmesg -f デーモン
dmesg
ターミナル ウィンドウ内のデーモンに関連するすべてのメッセージをリストします。
レベルの場合と同様に、
dmesg
に複数の機能からのメッセージを一度にリストするように依頼できます。
sudo dmesg -f syslog、デーモン
出力には、syslog メッセージとデーモン ログ メッセージが混在します。
施設とレベルの組み合わせ
-x
(デコード) オプションを使用すると、
dmesg
機能とレベルを人間が判読できるプレフィックスとして各行に表示します。
sudo dmesg -x
施設とレベルは各行の先頭に表示されます。
最初の強調表示されたセクションは、「通知」レベルの「カーネル」機能からのメッセージです。 2 番目に強調表示されているセクションは、「情報」レベルの「カーネル」機能からのメッセージです。
それは素晴らしいことですが、なぜでしょうか?
一言で言えば、間違い探しです。
ハードウェアの一部が認識されない、または正しく動作しないという問題が発生している場合は、
dmesg
問題を解決する可能性があります。
-
dmesgを使用してメッセージを最上位レベルから下位レベルまで確認し、ハードウェア項目に言及しているエラーや警告、または問題に関係している可能性のあるエラーや警告を探します。 -
dmesgを使用して適切な機能に関する記述を検索し、有用な情報が含まれているかどうかを確認します。 -
dmesggrepにパイプし、関連する文字列または製品の製造元やモデル番号などの識別子を探します。 -
dmesgをgrepにパイプして、「gpu」や「storage」などの一般的な用語、または「failure」、「failed」、「unable」などの用語を探します。 -
--followオプションを使用して、dmesgメッセージをリアルタイムで監視します。
楽しい狩猟を。





