当前位置:首页 > 文章列表 > 文章 > linux > Linux dmesg --level 怎样筛选内核日志级别

Linux dmesg --level 怎样筛选内核日志级别

来源:17golang原创 2026-11-01 10:19:34 0浏览 收藏

我在排查一台机器的网卡初始化问题时,第一次直接运行 dmesg,终端里很快被一大段启动消息淹没。真正有用的只是 error 和 warning 附近的几行。这个场景里,最小写法是:

# 只显示错误和警告级别,逗号表示选择多个级别
dmesg --level=err,warn

# 需要看到级别前缀时,再解码 facility 和 priority
dmesg --level=err,warn --decode
--level 只筛选这次 dmesg 输出的消息级别,不会修改内核环形缓冲区,也不会替代持久化日志系统。官方手册地址:https://man7.org/linux/man-pages/man1/dmesg.1.html

先把 dmesg、级别和输出筛选分开

dmesg 的对象是内核环形缓冲区。内核消息通常带有 facility 和 priority,priority 可以用 emerg、alert、crit、err、warn、notice、info、debug 表示。--level 根据 priority 选择要显示的记录,结果仍然来自同一个环形缓冲区。

这和 --console-level 是两件事。前者控制本次读取时显示哪些消息,后者设置哪些消息可以打印到控制台;调高控制台阈值,不等于把旧消息从环形缓冲区删除。排障时先用 --level 缩小输出,避免把两个阈值混为一谈。

dmesg 从内核环形缓冲区读取 priority 并按 --level 列表过滤输出的静态结构图
图1:dmesg 级别过滤结构图,说明消息从内核环形缓冲区进入级别列表筛选后形成可见输出。

最小配方:用逗号选择多个级别

只想看错误时用 err,同时看错误和警告时用逗号分隔。逗号列表是“明确选择”,适合先建立一个不容易误解的排障命令。

# 只看 error 消息,适合先确认是否存在内核错误
dmesg --level=err

# 同时看 warning 和 error,不改变其它级别消息
dmesg --level=err,warn

# 把输出交给分页器,避免长消息滚过屏幕
dmesg --level=err,warn --nopager | less -R

如果系统支持颜色,分页时保留颜色需要 less -R;如果你只关心纯文本,可以去掉这个参数。这里的管道只是整理当前输出,不会让筛选变成持久化规则。

需要看到级别名称时加上 --decode

默认输出未必直接把 facility 和 priority 展开成易读前缀。遇到“我筛到了什么”不够直观的情况,可以加 --decode,让每条消息旁边出现可读的设施和优先级信息。

# 先按级别筛选,再把数字字段解码为可读名称
dmesg --level=crit,err,warn --decode

# 需要同时定位时间范围时,叠加 since/until;它仍然读取 dmesg 的消息源
dmesg --since="10 minutes ago" --until=now --level=err,warn --decode

--since 和 --until 适合缩小本次查看的时间窗口,但 dmesg 的内核时间戳可能受到挂起与恢复影响。不要把这个时间窗口当成 journalctl 那种跨重启的持久化索引。

err+ 与 +warn:加号方向不要写反

逗号列表解决“指定哪些级别”,加号则解决“从一个级别向一侧扩展”。syslog 级别的数字顺序是 emerg 最严重、debug 最不严重。

写法包含的方向适合的场景
err+err、crit、alert、emerg只看 error 及更严重消息
+warnwarn、notice、info、debug从 warning 开始连同更低优先级消息观察
err,warn只选 err 与 warn需要精确控制输出集合
# err+ 向更严重的一侧扩展,不包含 warn、info、debug
dmesg --level=err+

# +warn 向更低优先级的一侧扩展,包含 notice、info、debug
dmesg --level=+warn

# 多个范围可以和普通级别一起写,但要先确认输出集合是否过宽
dmesg --level=err+,+warn

我更建议在故障初筛时优先用 err,warn,因为它表达的是明确集合;只有确实需要一整个方向的级别时,才用加号范围。这样回看命令时,不容易把“更严重”和“更低优先级”理解反。

emerg 到 debug 的级别层级以及 err+、+warn 和 --console-level 独立边界的静态结构图
图2:级别范围结构图,说明 err+ 向更严重级别扩展,+warn 向更低优先级扩展,控制台阈值与输出筛选各自独立。

把级别筛选放进排障命令

确定级别语义后,可以按任务叠加几个互不冲突的选项。下面的组合分别服务于“只看新消息”“持续观察”和“避免分页器打断脚本”。

# 只看最近五分钟的错误和警告,适合复现后立即回看
dmesg --since="5 minutes ago" --level=err,warn --decode

# 持续等待新的内核消息,适合插拔设备或重连网络时观察
dmesg --follow --level=err,warn --decode

# 脚本或采集器不需要交互分页时,显式关闭 pager
dmesg --nopager --level=err,warn --decode

这些参数改变的是读取和呈现方式,不会替你保存日志。如果任务要求跨重启检索、按服务筛选或长期审计,应转到系统实际使用的持久化日志方案,而不是只依赖 dmesg 当前还能保留的环形缓冲区内容。

三个容易误判的边界

为什么出现 permission denied?

部分系统启用了 dmesg_restrict,普通用户读取内核消息会被拒绝。这是权限边界,不是 --level 写错。应按主机安全策略使用有权限的运维身份,或让管理员提供经过授权的日志入口,不要为了绕过权限直接关闭安全限制。

为什么筛选后没有消息?

可能是当前环形缓冲区里没有该 priority,也可能是消息已经被覆盖,或者你把 err+、+warn 的方向理解反了。先用 dmesg --level=err,warn --decode 看明确集合,再扩大范围定位。

为什么重启后以前的 dmesg 不见了?

dmesg 面向内核环形缓冲区,容量有限,重启后也不保证保留上一轮启动的全部消息。需要跨启动查询时,应使用系统配置的日志持久化服务;dmesg 的 --since 只是对当前可读消息做时间筛选。

最后记住这张速查表

  • 精确选择:--level=err,warn。
  • error 及更严重:--level=err+。
  • warning 及更低优先级:--level=+warn。
  • 查看可读 facility 与 priority:增加 --decode。
  • 本次输出筛选:--level;控制台打印阈值:--console-level。
  • 权限、环形缓冲区容量和持久化策略决定“能不能看到”,不是级别列表本身决定全部结果。

我的使用习惯是先用明确的 err,warn 缩小范围,再根据现场需要改成 err+ 或加上 --decode。命令越能直接表达筛选集合,后续复盘就越不容易把 dmesg 的读取边界和系统日志保存边界混在一起。

版本声明
本文转载于:17golang原创 如有侵犯,请联系study_golang@163.com删除
Linux find -printf 怎样输出带大小和时间的文件清单Linux find -printf 怎样输出带大小和时间的文件清单
上一篇
Linux find -printf 怎样输出带大小和时间的文件清单
Linux rsync --delete-after 的删除时机与回滚风险
下一篇
Linux rsync --delete-after 的删除时机与回滚风险
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之JavaScript设计模式
    前端进阶之JavaScript设计模式
    设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
    543次学习
  • GO语言核心编程课程
    GO语言核心编程课程
    本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
    516次学习
  • 简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信
    如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
    500次学习
  • JavaScript正则表达式基础与实战
    JavaScript正则表达式基础与实战
    在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
    487次学习
  • 从零制作响应式网站—Grid布局
    从零制作响应式网站—Grid布局
    本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
    485次学习
查看更多
AI推荐
  • PubMedQA数据集详解:生物医学问答基准、功能与应用指南
    PubMedQA
    深入了解PubMedQA生物医学问答数据集,涵盖其核心功能、使用方法及在临床决策、药物研发等场景的应用,助力提升NLP模型性能。
    821次使用
  • H2O EvalGPT:开源LLM大模型评估与排行榜工具
    H2O EvalGPT
    H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
    816次使用
  • LMArena是什么?伯克利AI模型评估平台使用指南与功能解析
    LMArena
    LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
    905次使用
  • 斯坦福HELM:大语言模型Holistic Evaluation整体评估框架详解
    HELM
    深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
    876次使用
  • MMBench详解:多模态大模型基准测试、功能特点与使用指南
    MMBench
    MMBench是由上海人工智能实验室等机构联合推出的多模态基准测试平台,提供细粒度能力评估、大规模数据集及VLMEvalKit工具。本文详细介绍其核心功能、安装使用方法及应用场景,助力开发者全面评估多模态模型性能。
    698次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议 和 隐私政策
返回登录
  • 重置密码