dmesg 是什么?
dmesg 是 'display message' 或 'driver message' 的缩写,用于输出存储在 Linux 内核环形缓冲区中的消息。它按时间顺序显示系统自启动以来硬件如何被识别、驱动程序如何加载以及发生了哪些错误。
核心功能与用途
dmesg 用于诊断系统最底层(内核)发生的事情。
- 查看启动消息: 查看系统启动时输出的所有内核消息。
- 硬件诊断: 检查新硬件(USB、磁盘等)连接或移除时的日志。
- 驱动错误: 追踪驱动加载失败或内核级别错误(内核崩溃)的原因。
- 环形缓冲区: 缓冲区大小固定,旧日志会被新日志覆盖。
主要选项 (Shell)
dmesg 通常与其他命令(grep, less)通过管道(|)结合使用,但它本身也带有一些有用的选项。
1. 输出格式和时间
2. 过滤和实时监控
3. 缓冲区/控制台控制 (需谨慎)
生成的命令:
请尝试组合命令。
描述:
`dmesg` 执行命令。
通过组合这些选项,您可以与 AI 一起虚拟地执行命令。
使用场景示例 (Shell)
dmesg 经常与 grep 结合使用,以过滤出所需的信息。
查看所有消息 (分页)
dmesg | less
最基本的用法。使用 less 方便滚动查看。
实时查看新消息 (易读格式)
dmesg -wH
结合 -w (实时) 和 -H (人类可读时间)。
只过滤 USB 相关消息
dmesg | grep -i usb
grep 的 -i 选项忽略大小写。
过滤磁盘 (SATA/NVMe) 相关消息
dmesg | grep -iE 'sd[a-z]|nvme'
使用 grep -E (扩展正则表达式) 查找包含 'sd[a-z]' 或 'nvme' 的日志。
只过滤错误 (Error) 或警告 (Warn)
dmesg -H -l err,warn
使用 -l 选项指定日志级别。
只查看最近 10 行消息
dmesg | tail -n 10
结合 tail 快速查看最新消息。
包含 facility/level 标签查看
dmesg -xT | less
使用 -x 选项解码 facility/level 以帮助理解。
将日志保存到文件
dmesg -T > ~/dmesg-$(date +%F-%H%M).log
在启动后立即保存完整的 dmesg 输出。
安装
dmesg 包含在 util-linux 软件包中,并且大多数 Linux 发行版都默认提供。
默认已安装
无需单独安装。如果缺少,请安装发行版的 'util-linux' 软件包。
提示与注意事项
dmesg vs journalctl
- systemd 环境: 在最新的 systemd 系统中,可以使用 'journalctl -k'(内核日志)或 'journalctl -b'(本次启动日志)来查看超越 dmesg 级别的集成系统日志。
- 时间格式: dmesg 输出的默认时间是 [启动后的经过时间(秒)]。要查看实际时间,请使用 '-H' 或 '-T' 选项。
- 缓冲区覆盖: 由于环形缓冲区的特性,旧消息可能会丢失。如果需要保留启动初期的日志,请使用 'journalctl -b 0' 查看或将 dmesg 输出保存到文件。
- 权限/安全: 某些发行版通过 '/proc/sys/kernel/dmesg_restrict=1' 限制普通用户访问 dmesg。在这种情况下,请使用 'sudo dmesg' 或 'sudo journalctl -k'。
- 清除日志(-c, -C): 'dmesg -c' 和 '-C' 对于调试很有用,但一旦清除,就无法恢复。在生产环境中请谨慎使用。