Linux運維之dmesg 命令使用
Linux
核心是作業系統的核心,它控制對系統資源(例如:CPU
、I/O
裝置、實體記憶體和檔案系統)的訪問。在引導過程中以及系統執行時,核心會將各種訊息寫入核心環形緩衝區。這些訊息包括有關係統操作的各種資訊。
核心環形緩衝區是實體記憶體的一部分,用於儲存核心的日誌訊息。它具有固定的大小,這意味著一旦緩衝區已滿,較舊的日誌記錄將被覆蓋。
dmesg
命令列實用程式用於在 Linux
和其他類似 Unix
的作業系統中列印和控制核心環形緩衝區。對於檢查核心啟動訊息和除錯與硬體相關的問題很有用。
在本教程中,我們將介紹 dmesg
命令的基礎。
使用 dmesg 命令
dmesg
命令的語法如下:
dmesg [OPTIONS]
在不帶任何選項的情況下呼叫時,dmesg
將所有訊息從核心環形緩衝區寫入標準輸出:
$ dmesg
預設情況下,所有使用者都可以執行 dmesg
命令。但是,在某些系統上,非 root 使用者可能會限制對 dmesg
的訪問。在這種情況下,呼叫 dmesg`時您將收到如下錯誤訊息:
dmesg: read kernel 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 <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 <list>)
選項允許你將輸出限制為特定的裝置,該選項接受一個或多個逗號分隔的功能。
例如,要僅顯示核心和系統守護程式訊息,可以使用:
$ dmesg -f kern,daemon
每條日誌訊息都與一個顯示訊息重要性的日誌級別相關聯,dmesg
支援以下日誌級別:
- emerg-系統無法使用
- alert-必須立即採取措施
- crit-緊急情況
- err-錯誤條件
- warn-警告條件
- notice-正常但重要的條件
- info-資訊性
- debug-除錯級訊息
-l(--level <list>)
選項允許你將輸出限制為定義的級別,該選項接受一個或多個逗號分隔的級別。以下命令僅顯示錯誤和嚴重訊息:
$ 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
選項的資訊。