dmesg命令

dmesg 命令 #

dmesg命令(display message)用于显示内核环形缓冲区的消息。这些消息包含了系统启动时的信息、硬件检测、驱动程序加载、错误和警告等。它是诊断系统问题的重要工具。

语法 #

dmesg [选项]

常用选项 #

选项 描述
-C, --clear 清除环形缓冲区
-c, --read-clear 显示并清除环形缓冲区
-f, --facility 设施 只显示指定设施的消息
-l, --level 级别 只显示指定级别的消息
-n, --console-level 级别 设置控制台日志级别
-r, --raw 显示原始消息缓冲区
-s, --buffer-size 大小 使用指定大小的缓冲区
-T, --ctime 显示人类可读的时间戳
-t, --notime 不显示时间戳
-u, --userspace 显示用户空间消息
-w, --follow 等待新消息
-x, --decode 解码设施和级别为可读文本
-d, --show-delta 显示时间增量
-e, --reltime 显示本地时间和时间增量
-H, --human 以人类可读格式显示
-L, --color 使用彩色输出
-h, --help 显示帮助信息
-V, --version 显示版本信息

消息级别 #

dmesg消息有以下级别:

级别 名称 描述
0 emerg 系统不可用
1 alert 必须立即采取行动
2 crit 临界条件
3 err 错误条件
4 warn 警告条件
5 notice 正常但重要的条件
6 info 信息性消息
7 debug 调试级别消息

常见用法 #

1. 显示所有内核消息 #

dmesg

2. 显示带有人类可读时间戳的消息 #

dmesg -T

输出示例:

[Thu Jul 20 10:15:23 2023] Linux version 5.15.0-76-generic (buildd@lcy02-amd64-017) (gcc (Ubuntu 11.3.0-1ubuntu1~22.04) 11.3.0, GNU ld (GNU Binutils for Ubuntu) 2.38) #83-Ubuntu SMP Thu Jun 15 19:16:32 UTC 2023 (Ubuntu 5.15.0-76.83-generic 5.15.107)
[Thu Jul 20 10:15:23 2023] Command line: BOOT_IMAGE=/boot/vmlinuz-5.15.0-76-generic root=UUID=1234abcd-1234-abcd-1234-1234abcd1234 ro quiet splash vt.handoff=7
[Thu Jul 20 10:15:23 2023] KERNEL supported cpus:

3. 以人类可读格式显示 #

dmesg -H

这会使用颜色和格式化输出,使消息更易读。

4. 实时监控新消息 #

dmesg -w

这会持续显示新的内核消息,类似于tail -f

5. 显示特定级别的消息 #

# 只显示错误和更严重的消息
dmesg --level=err,crit,alert,emerg

# 只显示警告和错误
dmesg --level=warn,err

6. 显示特定设施的消息 #

# 只显示内核消息
dmesg --facility=kern

# 只显示用户级消息
dmesg --facility=user

7. 清除内核环形缓冲区 #

sudo dmesg -C

8. 显示并清除环形缓冲区 #

sudo dmesg -c

9. 不显示时间戳 #

dmesg -t

10. 显示时间增量 #

dmesg -d

11. 显示本地时间和时间增量 #

dmesg -e

12. 解码设施和级别 #

dmesg -x

输出示例:

[    0.000000] kern  :info  : Linux version 5.15.0-76-generic (buildd@lcy02-amd64-017) (gcc (Ubuntu 11.3.0-1ubuntu1~22.04) 11.3.0, GNU ld (GNU Binutils for Ubuntu) 2.38) #83-Ubuntu SMP Thu Jun 15 19:16:32 UTC 2023 (Ubuntu 5.15.0-76.83-generic 5.15.107)

过滤和搜索 #

1. 搜索特定硬件或驱动程序 #

dmesg | grep -i usb
dmesg | grep -i wifi
dmesg | grep -i bluetooth

2. 查找错误和警告 #

dmesg | grep -i error
dmesg | grep -i warn
dmesg | grep -i fail

3. 查看启动时间 #

dmesg | grep -i "boot time"

4. 查看 CPU 信息 #

dmesg | grep -i cpu

5. 查看内存信息 #

dmesg | grep -i memory

6. 查看磁盘和分区信息 #

dmesg | grep -i disk
dmesg | grep -i sda

7. 查看网络接口信息 #

dmesg | grep -i eth
dmesg | grep -i wlan

实用示例 #

1. 诊断硬件问题 #

# 检查硬件错误
dmesg | grep -i error

# 检查特定设备
dmesg | grep -i "device name"

2. 检查系统启动过程 #

dmesg -T | less

3. 监控 USB 设备插拔 #

dmesg -w | grep -i usb

4. 检查文件系统错误 #

dmesg | grep -i "filesystem"
dmesg | grep -i "ext4"

5. 查看内核模块加载情况 #

dmesg | grep -i "loaded module"

6. 检查系统过热问题 #

dmesg | grep -i thermal
dmesg | grep -i temperature

7. 检查系统休眠和唤醒 #

dmesg | grep -i suspend
dmesg | grep -i resume

提示 #

  • 使用sudo运行dmesg可能会显示更多信息,因为某些消息可能需要特权访问
  • 使用-T选项可以显示人类可读的时间戳,使消息更容易理解
  • 使用-H选项可以获得更友好的输出格式
  • 使用-w选项可以实时监控系统事件
  • 结合grep命令可以快速找到特定类型的消息
  • 在排查硬件问题时,dmesg是最先查看的工具之一
  • 系统启动后,dmesg缓冲区可能会被新消息覆盖,因此重要的启动消息可能会丢失
  • 在某些系统上,journalctl -k命令可以替代dmesg,并提供更多功能
  • 使用dmesg -c可以在查看消息后清除缓冲区,这在连续测试时很有用
  • 在脚本中使用dmesg时,可以使用-t选项去除时间戳,使输出更容易解析