#Linux カーネルはオペレーティング システムの中核であり、システム リソース (CPU、I/O デバイス、物理メモリ、ファイル システムなど) へのアクセスを制御します。 。ブート プロセス中およびシステムの実行中、カーネルはさまざまなメッセージをカーネル リング バッファに書き込みます。これらのメッセージには、システム動作に関するさまざまな情報が含まれています。
カーネル リング バッファは、カーネルのログ メッセージを保存するために使用される物理メモリの一部です。サイズは固定されており、バッファがいっぱいになると、古いログ レコードが上書きされます。
dmesg コマンド ライン ユーティリティは、Linux およびその他の Unix 系オペレーティング システムでカーネル リング バッファを出力および制御するために使用されます。カーネルのブート メッセージを検査し、ハードウェア関連の問題をデバッグするのに役立ちます。
このチュートリアルでは、dmesg コマンドの基本について説明します。
dmesg コマンドの構文は次のとおりです:
dmesg [OPTIONS] 在不带任何选项的情况下调用时,dmesg将所有消息从内核环形缓冲区写入标准输出:
$ dmesg
デフォルトでは、すべてのユーザーが dmesg コマンドを実行できます。ただし、一部のシステムでは、dmesg へのアクセスが非 root ユーザーに制限されている場合があります。この場合、dmesg を呼び出すと次のエラー メッセージが表示されます:
dmesg: カーネル バッファの読み取りに失敗しました: 操作は許可されていません
カーネル パラメータkernel.dmesg_restrict特権のないユーザーが dmesg を使用してカーネルからのメッセージを表示できるかどうかを指定しますログバッファ情報。制限を削除するには、制限をゼロに設定します。
$ sudo sysctl -w kernel.dmesg_restrict=0
通常、出力には多くの情報行が含まれるため、次の情報のみを参照してください。出力の最後の部分。一度に 1 ページを表示するには、出力を「less」または「more」などのページング ユーティリティにパイプします:
$ dmesg --color=always |less
where --color=always パラメータは、色付きの出力を保持するために使用されます。
バッファメッセージをフィルタリングしたい場合は、grep を使用できます。たとえば、USB 関連のメッセージのみを表示するには、次のように入力します:
$ dmesg | grep -i usb
dmesg 从/proc/kmsg虚拟文件中读取内核生成的消息。该文件提供了到内核环形缓冲区的接口,并且只能由一个进程打开。如果系统上正在运行syslog进程,并且你尝试使用cat或less命令读取文件,则命令将挂起。
syslog守护程序将内核消息转储到/var/log/dmesg,因此你也可以使用该日志文件:
$ cat /var/log/dmesg
格式化 dmesg 输出。
dmesg命令提供了许多选项,可帮助你格式化和过滤输出。
dmesg中最常用的选项之一是-H(--human),它将输出更容易读的结果。
$ dmesg -H
要打印人类可读的时间戳,请使用-T(--ctime选项):
$ dmesg -T [Mon Oct 14 14:38:04 2019] IPv6: ADDRCONF(NETDEV_CHANGE): wlp1s0: link becomes ready
时间戳格式也可以使用--time-format
$ dmesg --time-format=delta
2 つ以上のオプションを組み合わせることもできます:
$ dmesg -H -T
dmesg コマンドの出力をリアルタイムで確認するには、-w (--follow) オプションを使用します:
$ dmesg --follow
dmesg 出力をフィルタリングします。
dmesg 出力を特定の機能とレベルに制限できます。 dmesg は次のタイプをサポートします:
$ dmesg -f kern,daemon
-l( - -level <list>)
オプションを使用すると、出力を定義されたレベルに制限できます。このオプションは、1 つ以上のカンマ区切りレベルを受け入れます。次のコマンドは、エラー メッセージと重大なメッセージのみを表示します:
$ dmesg -l err,crit
clearringbuffer
-C (--clear) ) オプションを使用すると、リング バッファをクリアできます:
$ sudo dmesg -C
root または sudo 権限を持つユーザーのみがバッファをクリアできます。
クリアする前にバッファーの内容を出力するには、-c (--read-clear) オプションを使用します。
$ sudo dmesg -c
現在の dmesg ログをクリアする前にファイルに保存すると、出力をファイルにリダイレクトできます:
$ dmesg > dmesg_messages
dmesg コマンドを使用すると、カーネル リング バッファを表示および制御できます。これは、カーネルまたはハードウェアの問題のトラブルシューティングを行うときに役立ちます。
ターミナルに man dmesg と入力すると、利用可能なすべての dmesg オプションに関する情報を取得できます。
以上がLinux カーネルの障害をデバッグする方法を本当に知っていますか? この記事を読めば、きっと理解できるでしょう。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。