Linux核心是作業系統的核心,它控制對系統資源(例如:CPU、I/O裝置、實體記憶體和檔案系統)的存取。在引導過程中以及系統運行時,核心會將各種訊息寫入核心環形緩衝區。這些訊息包括有關係統操作的各種資訊。
內核環形緩衝區是實體記憶體的一部分,用於保存內核的日誌訊息。它具有固定的大小,這意味著一旦緩衝區已滿,較舊的日誌記錄將被覆蓋。
dmesg命令列實用程式用於在Linux和其他類似Unix的作業系統中列印和控制核心環形緩衝區。對於檢查內核啟動訊息和調試與硬體相關的問題很有用。
在本教學中,我們將介紹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
$ dmesg --time-format=delta
你也可以組合兩個或多個選項:
$ dmesg -H -T
要即時觀看dmesg指令的輸出,請使用-w(--follow)選項:
$ dmesg --follow
過濾dmesg 輸出。
你可以將dmesg輸出限制為給定的設施和等級。 dmesg支援以下類型:
例如,要只顯示核心和系統守護程式訊息,可以使用:
$ dmesg -f kern,daemon
每個日誌訊息都與一個顯示訊息重要性的日誌等級相關聯,dmesg支援以下日誌等級:
-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中文網其他相關文章!