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
$ 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 )選項允許你將輸出限制為定義的級別,該選項接受一個或多個逗號分隔的級別。以下命令僅顯示錯誤和嚴重消息:
$ 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選項的信息。