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に関する情報については、端末で オプション。
ご質問やご意見がございましたら、お気軽にコメントをお寄せください。