欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 产业 > 【Linux系统调试】dmesg:Linux 内核日志查看工具详解

【Linux系统调试】dmesg:Linux 内核日志查看工具详解

2025/5/14 0:18:27 来源:https://blog.csdn.net/qq_43584113/article/details/147831437  浏览:    关键词:【Linux系统调试】dmesg:Linux 内核日志查看工具详解

目录

前言

一、什么是 dmesg?

二、安装 dmesg

在 Debian/Ubuntu 上安装:

在 CentOS/RHEL 上安装:

三、基本使用方法

3.1 查看所有内核日志

分页查看:

按关键字搜索:

四、常用选项详解与示例

4.1 显示时间戳(推荐启用)

4.2 只显示特定级别的日志(--level)

示例:只查看错误和警告级别的日志

4.3 清空环形缓冲区(谨慎操作)

4.4 将日志保存到文件

五、典型应用场景与实例说明

5.1 排查硬件识别问题

示例:查看 USB 插拔日志

5.2 定位内核 Oops 和 Panic

示例:查找内核 Oops

5.3 跟踪内核模块加载/卸载

示例:

六、高级技巧

6.1 实时监控内核日志

方法一:使用 watch 命令

方法二:使用 journalctl(systemd 系统)

七、常见误区与注意事项

八、常用命令汇总

九、dmesg和syslog有什么区别?

dmesg

syslog

总结区别

十、总结


前言

在 Linux 系统中,dmesg(diagnostic message) 是一个用于打印或控制内核环形缓冲区(kernel ring buffer)内容的命令行工具。它可以帮助系统管理员和开发人员查看系统启动过程中的硬件检测、驱动加载、内核错误、警告等关键信息,在调试系统问题、排查硬件兼容性问题、分析内核崩溃等方面具有重要意义。

一、什么是 dmesg?

dmesg 命令从 内核环形缓冲区 中读取信息,并将其输出到终端。该缓冲区由 Linux 内核维护,记录了系统从开机到当前时刻的所有重要事件,包括:

  • CPU、内存、硬盘、USB 设备等硬件初始化信息
  • 内核模块加载与卸载
  • 驱动程序状态变化
  • 内核警告(warn)与错误(oops)
  • 内核 panic 信息(致命错误)

这些信息在系统日志文件(如 /var/log/messages/var/log/syslog)中可能不会全部记录,因此 dmesg 是获取最完整内核日志的重要手段。

二、安装 dmesg

dmesgutil-linux 软件包的一部分,几乎所有的 Linux 发行版都默认包含它。

在 Debian/Ubuntu 上安装:

sudo apt update
sudo apt install util-linux

在 CentOS/RHEL 上安装:

sudo yum install util-linux

三、基本使用方法

3.1 查看所有内核日志

dmesg

这会将整个内核环形缓冲区的内容打印到终端。由于输出较多,建议结合管道进行过滤或分页查看。

分页查看:
dmesg | less
按关键字搜索:
dmesg | grep -i usb

例如查找 USB 相关的日志。

四、常用选项详解与示例

4.1 显示时间戳(推荐启用)

默认情况下,dmesg 输出不带时间戳。为了方便定位事件发生的时间顺序,可以使用 -T 选项显示可读时间格式:

dmesg -T

输出示例:

[Thu May  9 16:00:00 2025] Initializing cgroup subsys cpuset
[Thu May  9 16:00:00 2025] CPU0: Intel(R) Core(TM) i7-8650U CPU @ 1.90GHz stepping 0x0

4.2 只显示特定级别的日志(--level)

Linux 内核定义了 8 种日志级别(从 0 到 7),dmesg 支持通过 --level 参数只显示指定级别的日志。

日志级别关键字含义
0emerg紧急情况(系统不可用)
1alert必须立即采取行动
2crit严重错误
3err错误条件
4warn警告信息
5notice正常但重要的条件
6info信息性消息
7debug调试级消息
示例:只查看错误和警告级别的日志
dmesg --level=err,warn

4.3 清空环形缓冲区(谨慎操作)

sudo dmesg -C

此命令会清空当前的内核日志缓冲区。适用于在执行某个操作前清除旧日志,便于后续跟踪新生成的信息。

⚠️ 注意:清空后无法恢复原始日志,请谨慎使用。

4.4 将日志保存到文件

dmesg > kernel_log.txt

将完整的 dmesg 输出保存为文本文件,便于离线分析或提交 bug 报告。

五、典型应用场景与实例说明

5.1 排查硬件识别问题

当你插入 USB 存储设备、网卡、显卡等硬件时,可以通过 dmesg 查看是否被正确识别。

示例:查看 USB 插拔日志
dmesg | grep -i usb

输出示例:

[Thu May  9 16:02:10 2025] usb 1-1: new high-speed USB device number 2 using xhci_hcd
[Thu May  9 16:02:10 2025] usb 1-1: New USB device found, idVendor=0781, idProduct=5581
[Thu May  9 16:02:10 2025] usb-storage 1-1:1.0: USB Mass Storage device detected

5.2 定位内核 Oops 和 Panic

当内核出现严重错误(如访问非法地址)时,会产生 OopsPanic 信息,通常伴随着堆栈回溯。dmesg 是诊断这些问题的关键工具。

示例:查找内核 Oops
dmesg | grep -A 20 "Oops"

输出示例:

[Thu May  9 16:10:00 2025] Oops: 0000 [#1] PREEMPT SMP
[Thu May  9 16:10:00 2025] Modules linked in: my_module(+)
[Thu May  9 16:10:00 2025] CPU: 0 PID: 1234 Comm: myapp Tainted: P           O    5.10.0-18-generic #1
[Thu May  9 16:10:00 2025] Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS rel-1.14.0-0-ga698c89-prebuilt.qemu.org 04/01/2014
[Thu May  9 16:10:00 2025] Call Trace:
[Thu May  9 16:10:00 2025]  my_function+0x12/0x30 [my_module]
[Thu May  9 16:10:00 2025]  another_function+0x56/0x80

上述信息表明是 my_function 函数中发生了异常,开发者可以根据偏移量 0x12 结合 objdump 进一步定位具体代码位置。

5.3 跟踪内核模块加载/卸载

如果你正在开发或调试内核模块,可以使用 dmesg 来查看模块加载和卸载的情况。

示例:
sudo insmod mymodule.ko
dmesg | tail -n 20

输出示例:

[Thu May  9 16:15:00 2025] mymodule: module_init called
[Thu May  9 16:15:00 2025] mymodule: initialized successfully

六、高级技巧

6.1 实时监控内核日志

虽然 dmesg 本身不支持实时更新,但可以配合 tail -fwatch 命令实现类似功能。

方法一:使用 watch 命令
watch -n 1 "dmesg | tail -n 20"

每秒刷新一次最新的 20 行日志。

方法二:使用 journalctl(systemd 系统)
journalctl -k -f

-k 表示只显示内核日志,-f 表示实时跟踪。

七、常见误区与注意事项

误区正确做法
❌ dmesg 日志永久保留✅ 内核日志是临时的,重启后丢失。需手动保存
❌ 使用 dmesg 替代 syslog✅ dmesg 提供更底层信息,syslog 提供更高层服务日志
❌ 不加筛选直接查看大量日志✅ 使用 greplesstail 等工具辅助阅读
❌ 不关注日志等级✅ 使用 --level 只查看关键日志(如 err/warn)提高效率

八、常用命令汇总

功能描述命令示例
查看所有日志dmesg
显示带时间戳的日志dmesg -T
只显示错误和警告日志dmesg --level=err,warn
清除内核日志缓冲区sudo dmesg -C
保存日志到文件dmesg > kernel_log.txt
查找 USB 相关日志dmesg | grep -i usb
查找内核 Oops 信息dmesg | grep -A 20 "Oops"
实时查看最新 20 行日志`watch -n 1 "dmesg

九、dmesg和syslog有什么区别?

dmesgsyslog 都是用于记录和查看系统日志的重要工具,但它们在用途、范围以及操作方式上存在显著差异。理解这些差异有助于更有效地进行系统监控与故障排查。

dmesg

  • 来源dmesg 是一个命令行工具,专门用于打印或控制内核环形缓冲区(kernel ring buffer)的内容。它展示了从系统启动到当前时刻的所有内核消息。

  • 内容

    • 主要包含硬件检测信息、驱动程序加载/卸载信息、内核模块状态变化、硬件错误、内核警告和错误等。
    • 这些信息对于诊断硬件问题、分析内核崩溃(如 Oops 或 Panic)、检查设备是否被正确识别等非常有用。
  • 特点

    • 数据存储在一个循环缓冲区内,这意味着当缓冲区满时,最早的条目会被覆盖。
    • 默认情况下,dmesg 输出不带时间戳,但可以通过 -T 参数添加。
    • 可以通过管道与其他命令结合使用,例如 grep 来过滤特定的信息。
  • 应用场景

    • 在系统启动后立即检查是否有任何硬件初始化失败的情况。
    • 调试内核模块或驱动程序时,查看其加载情况及运行状态。
    • 分析内核级别的错误或警告信息。

syslog

  • 来源syslog 实际上是指一组服务和协议,用于收集、处理并存储来自各种来源的日志消息。Linux 系统中常见的实现包括 rsyslogdsyslogd

  • 内容

    • 包含了比 dmesg 更广泛的信息,不仅限于内核消息,还包括用户空间应用程序的日志、网络活动、安全事件等。
    • 根据配置的不同,可以将日志发送到本地文件、远程服务器或者通过电子邮件通知管理员。
  • 特点

    • 提供灵活的日志分级机制,允许根据重要性对日志进行分类(如 info, warning, error 等),并且可以根据级别设置不同的处理策略。
    • 支持多种输出格式和目的地,便于集中管理和长期存档。
    • 日志文件通常位于 /var/log/ 目录下,如 /var/log/syslog/var/log/messages 等。
  • 应用场景

    • 监控系统的整体健康状况,包括但不限于应用程序错误、用户登录尝试、网络连接状态等。
    • 安全审计,追踪潜在的安全威胁或违规行为。
    • 故障排除,特别是当问题涉及多个组件或服务时。

总结区别

  • 数据源dmesg 专注于内核层面的消息,而 syslog 则涵盖了整个系统的日志,包括用户空间应用和服务。
  • 持久性dmesg 的日志存储在内存中的环形缓冲区,重启后丢失;syslog 的日志则通常保存在磁盘上的文件中,除非手动清理否则会一直保留。
  • 详细程度与用途dmesg 更适合用于低级别的调试和技术支持,比如硬件兼容性测试、驱动开发等;syslog 则更适合于日常运维、安全管理及全面的系统监控。
  • 灵活性syslog 系统提供了更多的配置选项,可以定制化地处理不同类型、不同级别的日志,而 dmesg 的功能相对固定,主要用于查看和导出内核日志。

十、总结

dmesg 是 Linux 系统中最基础但也最重要的内核日志查看工具之一。无论是系统启动调试、硬件识别、驱动开发,还是内核崩溃分析,dmesg 都能提供第一手的线索。

掌握其使用方法,尤其是结合时间戳、日志级别、关键词过滤等功能,将极大提升你在嵌入式开发、运维、内核调试等领域的问题排查效率。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词