dmesg
是 Linux/Unix 系统中非常常用的一个命令,全称 display message,主要作用是 查看内核环形缓冲区(kernel ring buffer)中的消息。这些消息通常是系统启动过程、硬件驱动加载、内核模块运行、错误信息、硬件检测等输出。
一、原理
- Linux 内核在运行时会不断向一个缓冲区写入日志信息,这个缓冲区就是 内核环形缓冲区。
- 用户态的
dmesg
命令就是去读取这个缓冲区,并按顺序打印出来。 - 这些信息和
/var/log/kern.log
、/var/log/messages
中的内容会有重叠(因为 syslog/rsyslog/systemd-journald 也会收集内核消息)。
二、常见用途
查看开机信息
系统刚启动时,内核初始化硬件(CPU、内存、磁盘、网卡、驱动)都会输出信息,可以用dmesg
来回溯。硬件检测
插拔 USB、加载驱动、磁盘报错时,dmesg
会显示相关日志。
例如插入 USB 后:dmesg | tail
排查问题
- 硬盘 I/O 错误
- 内存 ECC 错误
- 网络驱动报错
- 内核 panic / oops 信息
性能调优
比如 thermal(温度监控)、CPU 频率调节器、NUMA 配置等信息都能看到。
三、常用参数
dmesg # 打印全部日志
dmesg | less # 分页查看
dmesg | grep usb # 过滤关键词
dmesg -T # 把时间戳转换成人类可读的时间
dmesg -l err # 只显示 error 级别日志
dmesg -w # 实时跟踪新日志(类似 tail -f)
重点参数说明
-T
默认的时间戳是 从开机到现在的秒数,加-T
会转成人类时间(例如2025-09-05 10:31:22
)。-l <level>
日志等级(内核定义了8个级别):- emerg(紧急)
- alert(警报)
- crit(严重)
- err(错误)
- warn(警告)
- notice(注意)
- info(信息)
- debug(调试)
四、和日志系统关系
dmesg
直接读内核缓冲区,不依赖 syslog。/var/log/kern.log
或journalctl -k
也能看内核日志,但它们是日志系统保存的。dmesg
更偏向实时调试,比如插 USB、加载模块。