首頁 >運維 >linux運維 >你真的會調試 Linux 核心故障嗎,看完這篇後你會茅塞頓開的!

你真的會調試 Linux 核心故障嗎,看完這篇後你會茅塞頓開的!

Linux中文社区
Linux中文社区轉載
2023-08-03 16:50:341068瀏覽

Linux核心是作業系統的核心,它控制對系統資源(例如:CPU、I/O裝置、實體記憶體和檔案系統)的存取。在引導過程中以及系統運行時,核心會將各種訊息寫入核心環形緩衝區。這些訊息包括有關係統操作的各種資訊。

內核環形緩衝區是實體記憶體的一部分,用於保存內核的日誌訊息。它具有固定的大小,這意味著一旦緩衝區已滿,較舊的日誌記錄將被覆蓋。

dmesg命令列實用程式用於在Linux和其他類似Unix的作業系統中列印和控制核心環形緩衝區。對於檢查內核啟動訊息和調試與硬體相關的問題很有用。

在本教學中,我們將介紹dmesg指令的基礎。

使用dmesg 指令

dmesg指令的語法如下:

dmesg [OPTIONS]
在不带任何选项的情况下调用时,dmesg将所有消息从内核环形缓冲区写入标准输出:

$ dmesg

預設情況下,所有使用者都可以執行dmesg命令。但是,在某些系統上,非 root 使用者可能會限制對dmesg的存取。在這種情況下,呼叫 dmesg 時您將收到以下錯誤訊息:

dmesg: readkernel buffer failed: Operation not permitted

核心參數kernel.dmesg_restrict指定非特權使用者是否可以使用dmesg來檢視來自核心日誌緩衝區的消息。要刪除限制,請將其設為零:

$ sudo sysctl -w kernel.dmesg_restrict=0

通常,輸出包含許多資訊行,因此只能看到輸出的最後一部分。要一次查看一頁,請將輸出通過管道傳送到分頁實用程序,例如less或more:

#$ dmesg --color=always | less

其中的--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

你也可以組合兩個或多個選項:

$ dmesg -H -T

要即時觀看dmesg指令的輸出,請使用-w(--follow)選項:

$ dmesg --follow

過濾dmesg 輸出。

你可以將dmesg輸出限制為給定的設施和等級。 dmesg支援以下類型:

  • kern-核心訊息
  • user-使用者層級訊息
  • mail-郵件系統
  • daemon-系統守護程式
  • auth-安全性/授權訊息
  • syslog-內部syslogd 訊息
  • lpr-行式印表機子系統
  • news-網路新聞子系統
  • -f( --facility)選項可讓你將輸出限制為特定的設備,該選項接受一個或多個逗號分隔的功能。

例如,要只顯示核心和系統守護程式訊息,可以使用:

$ dmesg -f kern,daemon

每個日誌訊息都與一個顯示訊息重要性的日誌等級相關聯,dmesg支援以下日誌等級:

  • emerg-系統無法使用
  • alert-必須立即採取措施
  • crit-緊急情況
  • err-錯誤條件
  • warn-警告條件
  • notice-正常但重要的條件
  • info-資訊性
  • debug-偵錯級訊息

-l( --level 4309a73696dbaeac0ddd115cebb6f9b7)選項允許你將輸出限制為定義的級別,該選項接受一個或多個逗號分隔的級別。以下命令僅顯示錯誤和嚴重訊息:

$ 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選項的資訊。

以上是你真的會調試 Linux 核心故障嗎,看完這篇後你會茅塞頓開的!的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:Linux中文社区。如有侵權,請聯絡admin@php.cn刪除