dmesg简述


发布于 2024-06-27 / 41 阅读 / 0 评论 /
dmesg全称display message,是打印或控制内核环形缓冲区的工具,主要用于问题分析和系统调试。

Linux Kernel 会将开机信息存储在 ring buffer 中,我们可以从中获得诸如系统架构、CPU、挂载的硬件,RAM 等多个运行级别的大量的系统信息。可利用 dmesg 来查看系统的启动信息。开机信息也会保存在 /var/log/dmesg。

当计算机启动时,系统内核会被加载到内存中。在加载的过程中会显示很多的信息,在这些信息中我们可以看到内核检测硬件设备。因此我们可以利用 dmesg 进行设备故障的诊断。

内核进行硬件的连接或断开连接操作时,在 dmesg 命令的帮助下,我们可以看到硬件的检测或者断开连接的信息。

1.dmesg命令说明

命令行格式为:dmesg <options>

具体支持以下options

 -C, --clear
 	清除内核环形缓冲区(ring butter)。
-c, --read-clear
 	读取并清除所有消息。
-D, --console-off
	禁止向终端打印消息。
 -d, --show-delta
 	显示打印消息之间的时间差。
 -e, --reltime
 	以易读格式显示本地时间和时间差。
 -E, --console-on
 	启用向终端打印消息。
 -F, --file <file>
 	用文件代替内核日志缓冲区。
 -f, --facility <list>
 	将输出限制为定义的设施。
 -H, --human
 	易读格式输出。
 -k, --kernel
 	显示内核消息。
 -L, --color
 	显示彩色消息。
 -l, --level <list>
 	限制输出级别。
 -n, --console-level <level>
 	设置打印到终端的消息级别。
 -P, --nopager
 	不将输出通过管道传递给分页程序。
 -r, --raw
 	打印原生消息缓冲区。
 -S, --syslog
 	强制使用系统调用 syslog(2) 而非 /dev/kmsg 去读取内核信息,因为从 kernel 3.5.0 开始,默认使用 /dev/kmsg。
 -s, --buffer-size <size>
 	查询内核环形缓冲区所用的缓冲区大小。
 -T, --ctime
 	显示易读的时间戳(如果您使用了 SUSPEND/RESUME 则可能不准)。
 -t, --notime
 	不打印消息时间戳。
 -u, --userspace
 	显示用户空间消息。
 -w, --follow
 	等待新消息。
 -x, --decode
 	将设施和级别解码为可读的字符串。
 -h, --help
 	显示此帮助并退出。
 -V, --version
 	输出版本信息并退出。

2.使用案例

以下是常用的使用场景。

2.1.输出特定类型的信息

命令如下:

# 输出守护进程信息
dmesg --facility=daemon

facility有8种选项:kern、user、mail、daemon、auth、syslog、lpr、news

2.2.输出特定级别的信息

命令如下:

# 只要error和warn的信息
dmesg --level=err,warn 

level选项共有8个枚举值:emerg、alert、crit、err、warn、notice、info、debug

2.3.输出时间戳和详细日志信息

命令如下:

dmesg -Tx

输出如下所示:

kern  :warn  : [Thu Jul  4 16:08:17 2024] kauditd_printk_skb: 14 callbacks suppressed

kern  :notice: [Thu Jul  4 16:08:17 2024] audit: type=1106 audit(1720080497.387:4190050): pid=3811950 uid=0 auid=1001 ses=35 msg='op=PAM:session_close grantors=pam_limits,pam_limits,pam_systemd,pam_unix acct="root" exe="/usr/bin/sudo" hostname=? addr=? terminal=? res=success'

第一列是类型,第二列是输出级别,第三列是时间,第四列是输出模块,之后的是输出的具体消息。