news 2026/8/23 17:56:43

【Linux 基础知识系列:第一百九十九篇】Linux 内核日志查看:dmesg 命令

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【Linux 基础知识系列:第一百九十九篇】Linux 内核日志查看:dmesg 命令

一、简介:为什么“看内核日志”是 Linux 基本功?

  • 内核是操作系统地基:驱动、文件系统、内存管理、SELinux、AppArmor 都在内核空间。

  • 用户空间工具(ls、lspci)只能看到“结果”dmesg 能看到“过程”:设备识别、驱动加载、硬件错误、内核崩溃。

  • 典型场景

    • 插入 U 盘无反应 → 用dmesg看是否识别成sdb还是直接报错I/O error

    • 升级内核后网卡消失 → 对比旧内核dmesg日志,看驱动是否probe failed

    • 服务器随机重启 → 通过dmesg -T时间戳定位Hardware ErrorOOMsoft lockup

掌握dmesg= 给 Linux 装了一双“内核透视眼”。


二、核心概念:5 个关键词先搞懂

名词一句话说明本文出现形式
ring buffer内核循环缓冲区,保存启动+运行日志,断电清空dmesg直接读取
printk内核版printf,级别 0~7,数字越小越严重dmesg -l过滤
facility功能域:kern、user、daemon 等dmesg --facility=kern
timestamp两种格式:开机秒数(默认)/ 绝对时间(-Tdmesg -T
loglevel控制台显示阈值,/proc/sys/kernel/printk 控制echo 4 > /proc/sys/kernel/printk

三、环境准备:3 分钟搞定实验沙箱

  1. 系统

    • Ubuntu 20.04+ / CentOS 8+ / Debian 11+(内核 ≥4.15 即可)

  2. 权限

    • 普通用户可读;硬件插拔、错误注入需 root

  3. 安装(通常自带)

    # 验证是否已安装 which dmesg # 若不存在 sudo apt install -y util-linux # Ubuntu/Debian sudo dnf install -y util-linux # CentOS
  4. 实验目录

    mkdir -p ~/dmesg-lab && cd ~/dmesg-lab touch dmesg-boot.log dmesg-current.log

四、实际案例与步骤:由浅入深 5 大关卡

每个脚本均可直接复制,保存后chmod +x xxx.sh && ./xxx.sh跑通。


4.1 基础查看:启动日志、驱动加载一览

#!/usr/bin/env bash # file: 01-basic.sh echo "===== 1. 查看最近 20 行 =====" dmesg | tail -20 echo "===== 2. 人类可读时间 =====" dmesg -T | head -10 echo "===== 3. 只看 ERR/FAIL =====" dmesg -l err,crit,alert,emerg

场景:新机上线,快速扫一眼有无严重错误。


4.2 硬件识别:USB/SATA/PCIe 设备瞬间定位

#!/usr/bin/env bash # file: 02-hardware.sh echo "===== 1. 查找 USB 插入记录 =====" dmesg | grep -i 'usb.*new device' | tail -5 echo "===== 2. 查看硬盘识别序列 =====" dmesg | grep -i 'attached scsi disk' | awk '{print $3,$4}' echo "===== 3. 网卡驱动是否加载 =====" driver=$(dmesg | grep -i 'eth0.*driver' | awk -F: '{print $3}') echo "eth0 驱动: $driver"

实战:U 盘没反应?先dmesg | tail -f再插一次,立刻看到sdb: sdb1I/O error


4.3 实时监控:持续打印新日志(排错神器)

#!/usr/bin/env bash # file: 03-follow.sh echo "Ctrl+C 退出实时模式" dmesg -w | tee dmesg-current.log

场景

  • 热插拔硬盘、网卡瞬间掉线、内核模块insmod失败,都能秒级捕获。


4.4 级别过滤:只看 “错误” 和 “警告”

#!/usr/bin/env bash # file: 04-level.sh # 0=emerg 1=alert 2=crit 3=err 4=warn 5=notice 6=info 7=debug dmesg -l 3,4 -T > error-warn.log echo "已导出错误/警告到 error-warn.log"

技巧

  • 配合watch -n 1 'dmesg -l err'做实时大屏。


4.5 清空与保存:生产排错标准化流程

#!/usr/bin/env bash # file: 05-save.sh # 1. 保存当前 ring buffer(可选) dmesg > dmesg-boot.log # 2. 清空(需要 root) sudo dmesg -C echo "ring buffer 已清空,后续日志纯净" # 3. 触发测试事件(示例:加载模块) sudo modprobe br_netfilter dmesg | tail -10

最佳实践

  • 复现前先-C,避免旧日志干扰。

  • dmesg-boot.log随工单上传,方便研发二次分析。


4.6 高级:结合 journalctl 跨用户空间关联

#!/usr/bin/env bash # file: 06-joint.sh # 内核日志 + 服务日志 时间对齐 journalctl -k -b -0 | tail -20 # -k = dmesg journalctl -u NetworkManager -b | tail -20

场景

  • 网卡掉线时,内核link downNetworkManager同时报device disconnected,两条日志时间对齐,定位根因。


五、常见问题与解答(FAQ)

问题现象解决
dmesg: read kernel buffer failed: Operation not permitted普通用户无权限内核 5.10+ 限制非特权,用sudo dmesgsysctl kernel.dmesg_restrict=0
时间戳全是[ 0.000000]默认相对秒数-T转为绝对时间
清空后dmesg仍不断刷屏某驱动疯狂打印echo 0 > /proc/sys/kernel/printk提高控制台阈值
grep找不到刚插的 U 盘信息被冲掉`dmesggrep -i usbless或提前dmesg -w` 实时看
想导出上次启动日志ring buffer 断电丢失启用持久化见下节

六、实践建议与最佳实践

  1. 持久化 ring buffer(可选)
    Ubuntu 18.04+ 默认启用:/etc/systemd/journald.conf

    Storage=persistent

    重启后journalctl -k -b -1可看上次启动内核日志。

  2. 监控脚本模

    #!/bin/bash # 发现关键字立即告警 tail -Fn0 /var/log/kern.log | \ while read line; do echo "$line" | grep -q "Hardware Error" && \ curl -X POST https://alert-api.example.com -d "msg=HardwareError" done
  3. ELK 采集
    Filebeat 模块system.syslog已含kernel标签,直接索引dmesg内容。

  4. 性能调优
    高频打印驱动加pr_debug()编译,生产环境关闭dynamic_debug

  5. 安全第一
    禁止非特权查看:echo 1 > /proc/sys/kernel/dmesg_restrict,防止信息泄露。


七、总结:一张脑图带走全部要点

dmesg 实战 ├─ 查看:dmesg | less / -T / -l err ├─ 硬件:grep -i usb/eth/sda ├─ 实时:dmesg -w ├─ 保存:> dmesg.log ; sudo -C ├─ 关联:journalctl -k └─ 监控:tail + grep + 告警

掌握dmesg,等于给 Linux 装了“内核级 CCTV”:

  • 开发阶段:驱动 probe 失败?秒级定位。

  • 上线阶段:硬件兼容性一次看清,避免“生产翻车”。

  • 运维阶段:随机重启、OOM、soft lockup 有迹可循。

立刻打开终端,输入dmesg -T | less,从头到尾浏览一次你的机器“人生日记”,你会发现——原来内核早已告诉你答案,只是你还没学会查看。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/24 9:39:52

43、深入探索C++与汇编语言交互及MS-DOS编程

深入探索C++与汇编语言交互及MS-DOS编程 1. C++程序与汇编语言的链接 在与C++程序进行链接时,栈参数的访问可以不依赖EBP。例如,将位于栈偏移ESP + 12处的Count赋值给EDX,栈偏移通过一种迂回的方式计算为 _count$ + (ESP - 4) ,其中 _count$ 等于16,代码如下: mo…

作者头像 李华
网站建设 2026/8/24 14:33:50

游戏开发者的福音:EmotiVoice实现动态NPC语音生成

游戏开发者的福音:EmotiVoice实现动态NPC语音生成 在如今的开放世界游戏中,你是否曾因某个NPC反复说着同一句“欢迎光临”而瞬间出戏?又或者,在一场本应扣人心弦的剧情对话中,角色语气平淡得像在念说明书,情…

作者头像 李华
网站建设 2026/8/24 15:11:32

TLS网络安全协议巩固知识基础题(1)

1. TLS 的前身是什么协议? A. SSL B. SSH C. IPSec D. Kerberos 答案:A 解析: TLS 是 SSL(Secure Sockets Layer)协议的继任者,由 Netscape 开发的 SSL 协议演变而来。 2. TLS 协议工作在 OSI 模型的哪一层? A. 物理层 B. 数据链路层 C. 网络层 D. 传输层 答案:D …

作者头像 李华
网站建设 2026/8/24 0:39:29

EmotiVoice语音合成能否实现群体欢呼语音生成?合成策略

EmotiVoice语音合成能否实现群体欢呼语音生成?合成策略 在一场电竞比赛的决胜时刻,屏幕前的角色高举奖杯,背景中爆发出震耳欲聋的欢呼声——观众呐喊、队友庆祝、解说激动嘶吼交织成一片情绪洪流。这种“群体欢呼”场景,是游戏、影…

作者头像 李华
网站建设 2026/8/24 8:45:03

Git 回退神技:用ID一键“穿越”到旧版本

家人们谁懂啊!刚提交完代码,测试就炸了——新写的逻辑把整个功能都带崩了,可上一个能跑的版本早就被覆盖了。这时候别慌,Git的“按ID回退”就是你的“时光机”,不管你改了多少行代码,只要记住旧版本的“身份…

作者头像 李华
网站建设 2026/8/23 20:04:18

如何快速掌握vokoscreenNG:2024年最完整的屏幕录制终极指南

如何快速掌握vokoscreenNG:2024年最完整的屏幕录制终极指南 【免费下载链接】vokoscreenNG vokoscreenNG is a powerful screencast creator in many languages to record the screen, an area or a window (Linux only). Recording of audio from multiple sources…

作者头像 李华