ホームページ  >  記事  >  運用・保守  >  Linux カーネルの障害をデバッグする方法を本当に知っていますか? この記事を読めば、きっと理解できるでしょう。

Linux カーネルの障害をデバッグする方法を本当に知っていますか? この記事を読めば、きっと理解できるでしょう。

Linux中文社区
Linux中文社区転載
2023-08-03 16:50:34952ブラウズ

#Linux カーネルはオペレーティング システムの中核であり、システム リソース (CPU、I/O デバイス、物理メモリ、ファイル システムなど) へのアクセスを制御します。 。ブート プロセス中およびシステムの実行中、カーネルはさまざまなメッセージをカーネル リング バッファに書き込みます。これらのメッセージには、システム動作に関するさまざまな情報が含まれています。

カーネル リング バッファは、カーネルのログ メッセージを保存するために使用される物理メモリの一部です。サイズは固定されており、バッファがいっぱいになると、古いログ レコードが上書きされます。

dmesg コマンド ライン ユーティリティは、Linux およびその他の Unix 系オペレーティング システムでカーネル リング バッファを出力および制御するために使用されます。カーネルのブート メッセージを検査し、ハードウェア関連の問題をデバッグするのに役立ちます。

このチュートリアルでは、dmesg コマンドの基本について説明します。

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选项设置,可以是ctime,reltime,delta,notime或iso。例如:要使用增量格式,你可以输入:

$ dmesg --time-format=delta

2 つ以上のオプションを組み合わせることもできます:

$ dmesg -H -T

dmesg コマンドの出力をリアルタイムで確認するには、-w (--follow) オプションを使用します:

$ dmesg --follow

dmesg 出力をフィルタリングします。

dmesg 出力を特定の機能とレベルに制限できます。 dmesg は次のタイプをサポートします:

  • カーンカーンメッセージ
  • ユーザーユーザーレベルのメッセージ
  • メールメールシステム
  • daemon - システム デーモン
  • auth - セキュリティ/認可メッセージ
  • ##syslog - 内部 syslogd メッセージ
  • lpr-line プリンタ サブシステム
  • news-network ニュース サブシステム
  • -f( --facility
    ) オプションを使用すると、出力を特定のデバイスに制限できます。このオプションは、1 つ以上のカンマ区切りの機能を受け入れます。
たとえば、カーネルとシステム デーモンのメッセージのみを表示するには、次のように使用します:

$ dmesg -f kern,daemon

各ログ メッセージは、メッセージの重要性を示すログ レベルに関連付けられています。dmesg は次のログ レベルをサポートしています:

  • emerg-システムが利用できません
  • alert-直ちにアクションを実行する必要があります
  • crit-Emergency
  • err-エラー状態
  • warn-警告状態
  • notice-通常だが重要な状態
  • info - 情報
  • debug - デバッグ レベルのメッセージ

-l( - -level 4309a73696dbaeac0ddd115cebb6f9b7) オプションを使用すると、出力を定義されたレベルに制限できます。このオプションは、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 サイトの他の関連記事を参照してください。

声明:
この記事はLinux中文社区で複製されています。侵害がある場合は、admin@php.cn までご連絡ください。