dmesg 命令没有 -p 参数,正确用法是 -l 指定日志级别(如 err,warn),配合 | less -r 分页或 -w 实时滚动;journalctl -k -p 才支持优先级过滤。

用 -l 指定日志级别过滤输出
`dmesg` 支持 `-l`(小写 L)后跟一个或多个逗号分隔的级别名(不区分大小写),只显示对应优先级及更高级别的消息(例如 `err` 包含 `crit`、`alert`、`emerg`)。常用级别(从高到低):
emerg(紧急)→ alert → crit → err → warn → notice → info → debug
示例命令:
- 只看错误和警告及以上:
dmesg -l err,warn - 只看严重及以上(含 crit/alert/emerg):
dmesg -l crit - 只看调试信息(需内核启用 DEBUG):
dmesg -l debug
滚动查看:分页或实时模式
纯 `dmesg -l ...` 输出是一次性刷屏。如需滚动浏览,推荐以下两种方式:
-
分页查看(适合翻阅历史):
dmesg -l err,warn | less -R
(-R保留颜色;按Space下一页,/pattern搜索,q退出) -
实时滚动(持续监听新事件):
dmesg -l err,warn -w
(类似tail -f,按Ctrl+C停止)
补充:用 journalctl 实现更灵活的优先级控制
如果你的系统使用 systemd(绝大多数现代发行版),journalctl -k 是 `dmesg` 的增强替代方案,原生支持 `-p`:
- 只显示错误级内核日志:
journalctl -k -p err - 错误 + 警告:
journalctl -k -p warning(warning 及以上自动包含 err) - 实时跟踪:
journalctl -k -p err -f
优势:支持时间范围(--since "2 hours ago")、服务过滤、结构化字段,且默认持久化。
注意:级别名称必须准确,不可用数字代替(除非用 -n)
虽然内核内部用数字 0–7 表示级别,但 `dmesg -l` 只接受英文名称(如 err),不能写 dmesg -l 3(那是旧版或误传)。若想用数字临时设全局输出阈值,可用:
- 临时生效(当前会话):
sudo dmesg -n 3(此后dmesg默认只显示级别 ≥3 的消息) - 恢复全部:
sudo dmesg -n 8
⚠️ 此操作影响后续所有 `dmesg` 调用,但重启后失效;生产环境慎用。











