dmesg 是什麼?
dmesg 是 'display message' 或 'driver message' 的縮寫,用於輸出儲存在 Linux 核心環狀緩衝區 (Ring Buffer) 中的訊息。它以時間順序顯示系統從啟動到目前為止,硬體如何被識別、驅動程式如何載入,以及發生了哪些錯誤。
核心功能與用途
dmesg 用於診斷系統最低層級(核心)發生的事件。
- 檢查啟動訊息: 查看系統啟動時輸出的所有核心訊息。
- 硬體診斷: 檢查新硬體(如 USB、磁碟)連接或移除時的日誌。
- 驅動程式錯誤: 追蹤驅動程式載入失敗或核心級別錯誤 (Kernel Panic) 的原因。
- 環狀緩衝區: 緩衝區大小固定,舊日誌會被新日誌覆蓋。
主要選項 (Shell)
dmesg 通常與其他命令(如 grep, less)透過管道 (|) 結合使用,但它本身也具有許多實用的選項。
1. 輸出格式與時間
2. 過濾與即時監控
3. 緩衝區/控制台控制 (需注意)
生成的命令:
請試著組合命令。
這個 Django 應用程序是一個技術指南文檔,旨在為用戶輕鬆解釋 Linux 的各種命令。
`dmesg` 執行命令。
請將上述選項組合在一起,與 AI 一同虛擬執行命令。
使用情境範例 (Shell)
dmesg 經常與 grep 結合使用,以過濾出所需的資訊。
查看所有訊息 (分頁)
dmesg | less
最基本的使用方法。使用 less 方便捲動。
即時查看新訊息 (易讀模式)
dmesg -wH
結合 -w (即時) 和 -H (人類易讀時間) 選項。
僅過濾 USB 相關訊息
dmesg | grep -i usb
grep 的 -i 選項會忽略大小寫。
過濾磁碟 (SATA/NVMe) 相關訊息
dmesg | grep -iE 'sd[a-z]|nvme'
使用 grep -E (擴展正則表達式) 查找包含 'sd[a-z]' 或 'nvme' 的日誌。
僅過濾錯誤 (Error) 或警告 (Warn)
dmesg -H -l err,warn
使用 -l 選項指定日誌級別。
僅查看最近 10 行訊息
dmesg | tail -n 10
結合 tail 快速查看最近的訊息。
包含 facility/level 標籤查看
dmesg -xT | less
使用 -x 選項解碼 facility/level 以幫助理解。
將日誌儲存到檔案
dmesg -T > ~/dmesg-$(date +%F-%H%M).log
在啟動後立即保存完整的 dmesg 輸出。
安裝
dmesg 包含在 util-linux 套件中,並且在大多數 Linux 發行版中預設提供。
預設已安裝
無需額外安裝。如果沒有,請安裝發行版的 'util-linux' 套件。
提示與注意事項
dmesg 與 journalctl 的比較
- systemd 環境: 在最新的 systemd 系統中,可以使用 'journalctl -k' (核心日誌) 或 'journalctl -b' (本次啟動日誌) 來整合查看超越 dmesg 級別的系統日誌。
- 時間格式: dmesg 預設輸出的時間是 [系統啟動後的經過秒數]。若要查看實際時間,請使用 '-H' 或 '-T' 選項。
- 緩衝區覆蓋: 由於環狀緩衝區的特性,舊訊息可能會被覆蓋。如果需要保留啟動初期的日誌,請使用 'journalctl -b 0' 檢查或將 dmesg 輸出儲存到檔案中。
- 權限/安全性: 某些發行版會透過 '/proc/sys/kernel/dmesg_restrict=1' 限制普通使用者對 dmesg 的存取。在這種情況下,請使用 'sudo dmesg' 或 'sudo journalctl -k'。
- 清除日誌 (-c, -C): 'dmesg -c' 和 '-C' 對於調試很有用,但一旦清除就無法恢復。在生產環境中請謹慎使用。