Linux內(nèi)核是操作系統(tǒng)的核心,它控制對(duì)系統(tǒng)資源(例如:CPU、I/O設(shè)備、物理內(nèi)存和文件系統(tǒng))的訪問(wèn)。在引導(dǎo)過(guò)程中以及系統(tǒng)運(yùn)行時(shí),內(nèi)核會(huì)將各種消息寫入內(nèi)核環(huán)形緩沖區(qū)。這些消息包括有關(guān)系統(tǒng)操作的各種信息。
內(nèi)核環(huán)形緩沖區(qū)是物理內(nèi)存的一部分,用于保存內(nèi)核的日志消息。它具有固定的大小,這意味著一旦緩沖區(qū)已滿,較舊的日志記錄將被覆蓋。
dmesg命令行實(shí)用程序用于在Linux和其他類似Unix的操作系統(tǒng)中打印和控制內(nèi)核環(huán)形緩沖區(qū)。對(duì)于檢查內(nèi)核啟動(dòng)消息和調(diào)試與硬件相關(guān)的問(wèn)題很有用。
在本教程中,我們將介紹dmesg命令的基礎(chǔ)。
使用 dmesg 命令
dmesg命令的語(yǔ)法如下:
dmesg [OPTIONS] 在不帶任何選項(xiàng)的情況下調(diào)用時(shí),dmesg將所有消息從內(nèi)核環(huán)形緩沖區(qū)寫入標(biāo)準(zhǔn)輸出:
登錄后復(fù)制
$ dmesg
默認(rèn)情況下,所有用戶都可以運(yùn)行dmesg命令。但是,在某些系統(tǒng)上,非 root 用戶可能會(huì)限制對(duì)dmesg的訪問(wèn)。在這種情況下,調(diào)用 dmesg 時(shí)您將收到如下錯(cuò)誤消息:
dmesg: readkernel buffer failed: Operation not permitted
內(nèi)核參數(shù)kernel.dmesg_restrict指定非特權(quán)用戶是否可以使用dmesg查看來(lái)自內(nèi)核日志緩沖區(qū)的消息。要?jiǎng)h除限制,請(qǐng)將其設(shè)置為零:
$ sudo sysctl -w kernel.dmesg_restrict=0
通常,輸出包含很多信息行,因此只能看到輸出的最后一部分。要一次查看一頁(yè),請(qǐng)將輸出通過(guò)管道傳送到分頁(yè)實(shí)用程序,例如less或more:
$ dmesg --color=always | less
其中的–color=always參數(shù)用于保留彩色輸出。
如果要過(guò)濾緩沖區(qū)消息,可能使用grep。例如,要僅查看與 USB 相關(guān)的消息,請(qǐng)鍵入:
$ dmesg | grep -i usb
dmesg 從/proc/kmsg虛擬文件中讀取內(nèi)核生成的消息。該文件提供了到內(nèi)核環(huán)形緩沖區(qū)的接口,并且只能由一個(gè)進(jìn)程打開(kāi)。如果系統(tǒng)上正在運(yùn)行syslog進(jìn)程,并且你嘗試使用cat或less命令讀取文件,則命令將掛起。
syslog守護(hù)程序?qū)?nèi)核消息轉(zhuǎn)儲(chǔ)到/var/log/dmesg,因此你也可以使用該日志文件:
$ cat /var/log/dmesg
格式化 dmesg 輸出。
dmesg命令提供了許多選項(xiàng),可幫助你格式化和過(guò)濾輸出。
dmesg中最常用的選項(xiàng)之一是-H(–human),它將輸出更容易讀的結(jié)果。
$ dmesg -H
要打印人類可讀的時(shí)間戳,請(qǐng)使用-T(–ctime選項(xiàng)):
$ dmesg -T [Mon Oct 14 14:38:04 2019] IPv6: ADDRCONF(NETDEV_CHANGE): wlp1s0: link becomes ready
登錄后復(fù)制
時(shí)間戳格式也可以使用–time-format選項(xiàng)設(shè)置,可以是ctime,reltime,delta,notime或iso。例如:要使用增量格式,你可以輸入:
$ dmesg --time-format=delta
你也可以組合兩個(gè)或多個(gè)選項(xiàng):
$ dmesg -H -T
要實(shí)時(shí)觀看dmesg命令的輸出,請(qǐng)使用-w(–follow)選項(xiàng):
$ dmesg --follow
過(guò)濾 dmesg 輸出。
你可以將dmesg輸出限制為給定的設(shè)施和等級(jí)。dmesg支持以下類型:
例如,要僅顯示內(nèi)核和系統(tǒng)守護(hù)程序消息,可以使用:
$ dmesg -f kern,daemon
每條日志消息都與一個(gè)顯示消息重要性的日志級(jí)別相關(guān)聯(lián),dmesg支持以下日志級(jí)別:
-l(--level )
選項(xiàng)允許你將輸出限制為定義的級(jí)別,該選項(xiàng)接受一個(gè)或多個(gè)逗號(hào)分隔的級(jí)別。以下命令僅顯示錯(cuò)誤和嚴(yán)重消息:
$ dmesg -l err,crit
清除環(huán)形緩沖區(qū)
-C(–clear)選項(xiàng)可讓您清除環(huán)形緩沖區(qū):
$ sudo dmesg -C
只有root或具有sudo特權(quán)的用戶才能清除緩沖區(qū)。
要在清除之前打印緩沖區(qū)內(nèi)容,請(qǐng)使用-c(–read-clear)選項(xiàng):
$ sudo dmesg -c
如果要在清除文件之前將當(dāng)前dmesg日志保存到文件中,你可以將輸出重定向到文件:
$ dmesg > dmesg_messages
結(jié)論
dmesg命令允許你查看和控制內(nèi)核環(huán)形緩沖區(qū)。對(duì)內(nèi)核或硬件問(wèn)題進(jìn)行故障排除時(shí),它非常有用。
在終端中輸入man dmesg,你可以獲取有關(guān)所有可用dmesg選項(xiàng)的信息。
以上就是你真的會(huì)調(diào)試 Linux 內(nèi)核故障嗎,看完這一篇后你會(huì)茅塞頓開(kāi)的!的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注www.92cms.cn其它相關(guān)文章!