
Linuxカーネルは、CPU、I / Oデバイス、物理メモリ、ファイルシステムなどのシステムリソースへのアクセスを制御するオペレーティングシステムのコアです。カーネルは、ブートプロセス中、およびシステムの実行中に、さまざまなメッセージをカーネルリングバッファに書き込みます。これらのメッセージには、システムの動作に関するさまざまな情報が含まれています。
カーネルリングバッファは、カーネルのログメッセージを保持する物理メモリの一部です。サイズは固定されています。つまり、バッファがいっぱいになると、古いログレコードが上書きされます。
dmesg
コマンドラインユーティリティは、Linuxおよびその他のUnixライクなオペレーティングシステムでカーネルリングバッファを印刷および制御するために使用されます。カーネルのブートメッセージを調べたり、ハードウェア関連の問題をデバッグしたりするのに役立ちます。
このチュートリアルでは、 dmesg
の基本について説明します。 コマンド。
dmesg
の使用 コマンド#
dmesg
の構文 コマンドは次のとおりです:
dmesg [OPTIONS]
オプションなしで呼び出された場合dmesg
カーネルリングバッファからのすべてのメッセージを標準出力に書き込みます:
dmesg
デフォルトでは、すべてのユーザーが dmesg
を実行できます 指図。ただし、一部のシステムでは、 dmesg
へのアクセス ルート以外のユーザーには制限される場合があります。この状況で、 dmesg
を呼び出すとき 次のようなエラーメッセージが表示されます:
dmesg: read kernel buffer failed: Operation not permitted
カーネルパラメータkernel.dmesg_restrict
非特権ユーザーがdmesg
を使用できるかどうかを指定します カーネルのログバッファからのメッセージを表示します。制限を削除するには、ゼロに設定します:
sudo sysctl -w kernel.dmesg_restrict=0
通常、出力には多くの情報行が含まれているため、出力の最後の部分のみが表示されます。一度に1ページを表示するには、出力を less
などのページャーユーティリティにパイプします。 またはmore
:
dmesg --color=always | less
-color =always
色付きの出力を保持するために使用されます。
バッファメッセージをフィルタリングする場合は、 grep
を使用します 。たとえば、USB関連のメッセージのみを表示するには、次のように入力します。
dmesg | grep -i usb
dmesg
カーネルによって生成されたメッセージを/proc / kmsg
から読み取ります 仮想ファイル。このファイルは、カーネルリングバッファへのインターフェイスを提供し、1つのプロセスでのみ開くことができます。 syslog
の場合 プロセスがシステムで実行されており、 cat
を使用してファイルを読み取ろうとしています 、または less
、コマンドがハングします。
syslog
デーモンはカーネルメッセージを/var / log / dmesg
にダンプします 、そのため、そのログファイルを使用することもできます:
cat /var/log/dmesg
dmesg
出力#
dmesg
コマンドは、出力のフォーマットとフィルタリングに役立ついくつかのオプションを提供します。
dmesg
で最もよく使用されるオプションの1つ -H
です (-人間
)、人間が読める形式の出力を有効にします。このオプションは、コマンド出力をポケットベルにパイプします:
dmesg -H
人間が読めるタイムスタンプを印刷するには、 -T
を使用します (-ctime
)オプション:
dmesg -T
[Mon Oct 14 14:38:04 2019] IPv6: ADDRCONF(NETDEV_CHANGE): wlp1s0: link becomes ready
タイムスタンプの形式は、-time-format
を使用して設定することもできます。 オプション。ctime、reltime、delta、notime、isoのいずれかになります。たとえば、デルタ形式を使用するには、次のように入力します。
dmesg --time-format=delta
2つ以上のオプションを組み合わせることもできます:
dmesg -H -T
dmesg
の出力を監視するには リアルタイムでコマンドを使用する-w
(-フォローコード> )オプション:
dmesg --follow
dmesg
出力#
dmesg
を制限できます 特定の施設とレベルへの出力。
ファシリティは、メッセージを作成したプロセスを表します。 dmesg
次のログ機能をサポートします:
カーン
-カーネルメッセージユーザー
-ユーザーレベルのメッセージメール
-メールシステムデーモン
-システムデーモン-
auth
-セキュリティ/承認メッセージ -
syslog
-内部syslogdメッセージ -
lpr
-ラインプリンタサブシステム ニュース
-ネットワークニュースサブシステム
-f
(-施設<リスト>
)オプションを使用すると、出力を特定の施設に制限できます。このオプションは、1つ以上のコンマ区切りの機能を受け入れます。
たとえば、使用するカーネルとシステムデーモンのメッセージのみを表示するには:
dmesg -f kern,daemon
各ログメッセージは、メッセージの重要性を示すログレベルに関連付けられています。 dmesg
次のログレベルをサポートします:
-
emerg
-システムは使用できません アラート
-すぐに行動を起こす必要がありますクリティカル
-重大な状況-
err
-エラー状態 警告
-警告条件通知
-正常ですが重大な状態情報
-情報デバッグ
-デバッグレベルのメッセージ
-l </ code> (
-レベル<リスト>
)オプションは、出力を定義されたレベルに制限します。このオプションは、1つ以上のコンマ区切りレベルを受け入れます。
次のコマンドは、エラーメッセージとクリティカルメッセージのみを表示します。
dmesg -l err,crit
リングバッファのクリア#
-C
(-clear
)オプションを使用すると、リングバッファをクリアできます:
sudo dmesg -C
rootまたはsudo権限を持つユーザーのみがバッファをクリアできます。
クリアする前にバッファの内容を出力するには、 -c
を使用します (-read-clear
)オプション:
sudo dmesg -c
現在のdmesg
を保存する場合 クリアする前にファイルにログインし、出力をファイルにリダイレクトします:
dmesg > dmesg_messages
結論#
dmesg
コマンドを使用すると、カーネルリングバッファを表示および制御できます。カーネルまたはハードウェアの問題をトラブルシューティングするときに非常に役立ちます。
man dmesg
と入力します 利用可能なすべてのdmesg
に関する情報については、端末で オプション。
ご質問やご意見がございましたら、お気軽にコメントをお寄せください。