介绍
在本实验中,你将学习 Linux 的 dmesg 命令,并了解如何使用它来探索内核环形缓冲区(kernel ring buffer)。dmesg 命令是一个强大的系统监控和管理工具,它提供了对内核级消息的访问权限,这些消息可用于故障排除和监控系统健康状况。
你将首先了解 dmesg 命令的用途和用法,它允许你查看内核环形缓冲区的内容。这个环形缓冲区存储了 Linux 内核在系统启动和运行期间生成的消息,包括硬件初始化、驱动程序加载和系统事件的信息。然后,你将探索各种选项来过滤和分析 dmesg 的输出,使你能够专注于特定类型的消息或日志级别。
了解 dmesg 命令的用途和用法
在这一步中,你将学习 Linux 中 dmesg 命令的用途和用法。dmesg 命令用于查看内核环形缓冲区(kernel ring buffer),该缓冲区包含 Linux 内核在系统启动和运行期间生成的消息。
内核环形缓冲区是一个循环缓冲区,用于存储内核级别的消息,包括硬件初始化、驱动程序加载和系统事件的信息。dmesg 命令允许你访问和分析这些消息,这对于排查系统问题和监控系统健康状况非常有用。
要查看内核环形缓冲区的内容,请运行以下命令:
sudo dmesg
示例输出:
[ 0.000000] Initializing cgroup subsys cpuset
[ 0.000000] Initializing cgroup subsys cpu
[ 0.000000] Initializing cgroup subsys cpuacct
[ 0.000000] Linux version 5.15.0-58-generic (buildd@lgw01-amd64-054) (gcc-11) #64~20.04.1-Ubuntu SMP Thu Jan 5 12:11:15 UTC 2023 (Ubuntu 5.15.0-58.64~20.04.1-generic 5.15.52)
[ 0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-5.15.0-58-generic root=UUID=0b1d7f41-a4a6-4c7e-9e2f-5d8d6d7d3b2e ro quiet splash
[ 0.000000] KERNEL supported cpus:
[ 0.000000] Intel GenuineIntel
[ 0.000000] AMD AuthenticAMD
[ 0.000000] Hygon HygonGenuine
[ 0.000000] Centaur CentaurHauls
[ 0.000000] zhaoxin Shanghai
输出显示了各种内核级别的消息,包括内核版本、命令行参数和支持的 CPU 架构信息。
你可以使用 dmesg 命令的各种选项来过滤和格式化输出,例如:
dmesg -T:以人类可读的格式显示时间戳。dmesg -l <level>:按日志级别过滤输出(例如,dmesg -l err仅显示错误消息)。dmesg -n <level>:设置控制台日志级别,决定控制台上显示的消息的最低级别。dmesg -w:实时跟踪内核环形缓冲区,类似于tail -f。
了解 dmesg 命令的用途和用法对于 Linux 中的系统监控和故障排除至关重要。
使用 dmesg 探索内核环形缓冲区
在这一步中,你将学习如何使用 dmesg 命令及其各种选项来探索内核环形缓冲区(kernel ring buffer)。
首先,让我们查看内核环形缓冲区的完整内容:
sudo dmesg
这将显示内核环形缓冲区中存储的所有消息,包括启动时和运行时的消息。
接下来,让我们过滤输出以仅显示最新的消息:
sudo dmesg -T | tail
-T 选项以人类可读的格式显示时间戳,而 tail 显示输出的最后 10 行。
你还可以按日志级别过滤输出。例如,仅显示错误消息:
sudo dmesg -l err
-l 选项允许你按日志级别过滤输出,其中 err 表示错误消息。
要实时持续监控内核环形缓冲区,请使用 -w 选项:
sudo dmesg -w
这将使 dmesg 命令持续运行,并在新消息添加到内核环形缓冲区时显示它们。
示例输出:
[ +0.000000] Linux version 5.15.0-58-generic (buildd@lgw01-amd64-054) (gcc-11) #64~20.04.1-Ubuntu SMP Thu Jan 5 12:11:15 UTC 2023 (Ubuntu 5.15.0-58.64~20.04.1-generic 5.15.52)
[ +0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-5.15.0-58-generic root=UUID=0b1d7f41-a4a6-4c7e-9e2f-5d8d6d7d3b2e ro quiet splash
[ +0.000000] KERNEL supported cpus:
[ +0.000000] Intel GenuineIntel
[ +0.000000] AMD AuthenticAMD
[ +0.000000] Hygon HygonGenuine
[ +0.000000] Centaur CentaurHauls
[ +0.000000] zhaoxin Shanghai
通过探索 dmesg 命令的不同选项,你可以有效地分析内核环形缓冲区,并收集用于系统监控和故障排除的有价值信息。
过滤和分析 dmesg 输出
在这最后一步中,你将学习如何过滤和分析 dmesg 命令的输出,以提取用于系统监控和故障排除的有用信息。
首先,让我们过滤 dmesg 输出以仅显示最新的消息:
sudo dmesg -T | tail
这将显示内核环形缓冲区中的最后 10 条消息,并附带人类可读的时间戳。
接下来,让我们在 dmesg 输出中搜索特定关键词。例如,查找与网络接口相关的任何消息:
sudo dmesg | grep -i network
-i 选项使搜索不区分大小写,因此它将匹配 "network" 和 "Network"。
你还可以按日志级别和严重性过滤输出。例如,仅显示警告和错误消息:
sudo dmesg -l warn,err
这将仅显示内核环形缓冲区中的警告和错误消息。
要获取内核启动过程的摘要,可以使用以下命令:
sudo dmesg | grep -E 'Linux version|Command line'
这将显示内核版本信息以及用于启动系统的命令行参数。
最后,让我们将 dmesg 输出保存到文件中以便进一步分析:
sudo dmesg > dmesg_output.txt
然后,你可以使用文本编辑器或其他工具查看 dmesg_output.txt 文件的内容。
通过掌握这些过滤和分析技术,你可以有效地使用 dmesg 命令来监控 Linux 系统并排查各种问题。
总结
在本实验中,你学习了 Linux 中 dmesg 命令的用途和用法。dmesg 命令用于查看内核环形缓冲区(kernel ring buffer),该缓冲区包含 Linux 内核在系统启动和运行期间生成的消息。你探索了如何使用 dmesg 命令访问和分析这些内核级别的消息,这对于排查系统问题和监控系统健康状况非常有用。你还学习了各种过滤和格式化 dmesg 输出的选项,例如显示时间戳、按日志级别过滤以及设置控制台日志级别。



