Linux運維之dmesg 命令使用


Linux 內核是操作系統的核心,它控制對系統資源(例如:CPUI/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

通常,輸出包含很多信息行,因此只能看到輸出的最后一部分。要一次查看一頁,請將輸出通過管道傳送到分頁實用程序,例如 lessmore

$ dmesg --color=always | less

其中的 --color=always 參數用於保留彩色輸出。

如果要過濾緩沖區消息,可能使用 grep 。例如,要僅查看與 USB 相關的消息,請鍵入:

$ dmesg | grep -i usb

dmesg 從 /proc/kmsg 虛擬文件中讀取內核生成的消息。該文件提供了到內核環形緩沖區的接口,並且只能由一個進程打開。如果系統上正在運行 syslog 進程,並且你嘗試使用 catless 命令讀取文件,則命令將掛起。

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> 選項設置,可以是 ctimereltimedeltanotimeiso。例如:要使用增量格式,你可以輸入:

$ 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 選項的信息。

 

原文:https://linuxize.com/post/dmesg-command-in-linux/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM