dmesg -c 是读取并清空内核环形缓冲区的最常用方法,先输出未读消息再清空,不影响历史日志文件和后续新日志生成,需 root 权限;搭配 dmesg -w 可实时监控新报错,组合使用可精准定位操作后的问题。

dmesg -c 是最直接、最常用的方法,用于清空当前内核环形缓冲区并立即输出剩余内容(即“读取后清除”),特别适合在排查实时资源错误前做一次干净的日志截断。
它不会删除历史文件(如 /var/log/dmesg),也不会影响后续新日志的生成,只是把已存在但尚未读取过的旧消息清掉,让后续 dmesg 或 dmesg -w 的输出更聚焦于新发生的硬件/驱动/资源类报错(比如内存不足、PCIe链路重置、USB设备断连、OOM killer触发等)。
用 dmesg -c 快速清理并观察实时报错
-
运行命令需 root 权限(因为内核缓冲区受保护):
sudo dmesg -c
执行后会立刻打印出清除前最后一屏未被读取的消息,然后清空缓冲区。之后再运行
dmesg就只看到新产生的条目了。 -
想持续监控新报错?搭配
-w实时跟随:sudo dmesg -w
这个命令会阻塞等待,一有新的内核消息(例如显卡驱动报错、NVMe超时、cgroup内存限制触发)就立刻打印出来,非常适合现场复现问题时盯屏。
-
如果你刚执行了某项操作(如插拔设备、加载模块、触发 OOM),推荐组合使用:
sudo dmesg -c && sudo dmesg -w
先清旧日志,再开启实时流——这样屏幕上出现的每一条都是该操作之后的新事件,排除干扰,定位更快。
注意几个关键点
-c和-C不同:-c(小写)是“读取并清空”,会先输出再清;-C(大写)是“仅清空不输出”,适合静默清理,但无法确认清了什么。-
清除的是内存中的 ring buffer,不是磁盘文件。
/var/log/dmesg是系统启动时保存的一次快照,不受dmesg -c影响;若要更新它,可手动执行:sudo dmesg > /var/log/dmesg
-
避免误清重要线索:
如果你怀疑已有异常(比如刚发生过 kernel panic 或硬件警告),先保存再清:sudo dmesg > ~/dmesg-before-clear-$(date +%s).log sudo dmesg -c
这样操作下来,缓冲区就干净了,后续任何资源类错误都会清晰、即时地出现在终端里。











