做什么

内核环形缓冲(kernel ring buffer)——记录内核 / 硬件相关消息:硬盘错误、内存不足 OOM、设备插拔、网卡上下、模块加载等。

实战

sudo dmesg                          # 全部
sudo dmesg -T                       # ★ 带可读时间戳
sudo dmesg --level=err              # 仅错误
sudo dmesg -w                       # 实时跟踪
sudo dmesg | tail -50               # 最近
sudo dmesg --since "1 hour ago"     # 时间过滤

关键参数

参数 含义
-T 可读时间戳
-w follow(实时)
-l err 仅错误级别
-l warn,err 多个级别
--level=err 同上
-H human-readable 输出
-c 看完清空缓冲(要 root)

典型用途

1. 插 U 盘 / 新硬盘后看识别

sudo dmesg | tail -20
# [12345.678] usb 1-2: new high-speed USB device number 3
# [12345.789] usb-storage 1-2:1.0: USB Mass Storage device detected
# [12345.890] scsi host6: usb-storage 1-2:1.0
# [12346.123] sd 6:0:0:0: [sdc] ...

2. OOM Killer 杀进程的记录

sudo dmesg -T | grep -i "killed process"
# [Fri May 9 10:23:45 2026] Out of memory: Killed process 12345 (myapp) ...

3. 硬盘错误

sudo dmesg | grep -i "i/o error\|sector error"
sudo dmesg | grep -i "ata\|sata"

4. 网卡上下

sudo dmesg | grep eth0
sudo dmesg | grep "Link is"

5. SELinux 拒绝

sudo dmesg | grep -i "denied"

dmesg vs journalctl

dmesg journalctl -k
来源 内核 ring buffer journal 数据库
持久 重启丢(除非配持久 journal) 可持久
速度 极快 较慢
推荐 实时查 历史查
journalctl -k -b -1          # 上次 boot 的内核日志(dmesg 看不到)

  • dmesg 默认时间戳是开机后秒数——不直观,加 -T 才是人可读
  • ring buffer 满了会覆盖旧的——历史看 journal
  • 没 sudo 看不到(多数现代 Linux)—— 较老版本可能不要