查看原文
其他

Linux dmesg 命令

myfreax myfreax 2023-02-03

Linux 内核是操作系统的核心,它控制着对系统资源的访问,例如 CPU,I/O 设备,物理内存和文件系统。

引导过程中以及系统运行时,内核会将各种消息写入内核环形缓冲区。这些消息包括系统操作的各种信息。

内核环形缓冲区是物理内存的一部分,用于保存内核的日志消息。它具有固定的大小,这意味着一旦缓冲区已满,较旧的日志记录将被覆盖。

dmesg 命令是用于在 Linux / Unix 的操作系统中查看和控制内核环形缓冲区。对于检查内核启动消息和调试硬件相关的问题很有用。

在本教程中,我们将说明 dmesg 命令的基础。包括dmesg命令语法与选项,允许非root用户读取日志消息。

dmesg 命令

dmesg命令的语法形式是 dmesg [OPTIONS]OPTIONSdmesg 命令的选项,可选参数。

在指定任何选项运行 dmesg 命时,dmesg 命令将所有消息从内核环形缓冲区写到标准输出,也就是终端屏幕。

默认情况下,所有用户都可以运行 dmesg 命令。但是,在某些系统上,非 root 用户可能会限制对 dmesg 命令的访问。

在这种情况下,调用 dmesg 时,您将看到错误消息 dmesg: read kernel buffer failed: Operation not permitted。

dmesgdmesg: read kernel buffer failed: Operation not permitted

内核参数 kernel.dmesg_restrict 指定非 root 用户是否可以运行 dmesg 命令查看内核日志缓冲区的消息。

要禁用或者删除此限制,请将其设置为零。运行命令 sudo sysctl -w kernel.dmesg_restrict=0

sudo sysctl -w kernel.dmesg_restrict=0

通常,dmesg 命令输出包含许多信息记录,因此只能看到输出的最后一部分。要一次查看一页。

请将 dmesg 命令的标准输出通过管道传送到 lessmore 命令可分页查看 dmesg 命令打印的消息。运行命令 dmesg --color=always | less

dmesg --color=always | less

--color=always 选项用于保留颜色的输出。如果要过滤缓冲区消息,请使用 grep 命令对日志消息进行过滤。

例如,要仅查看与USB相关的消息,请运行命令 dmesg | grep -i usb

dmesg | grep -i usb

dmesg 命令从 /proc/kmsg 虚拟文件中读取内核生成的消息。该文件提供了到内核环形缓冲区的接口,并且只能由一个进程打开。

如果系统上正在运行 syslog 进程,并且您尝试使用 catless 命令读取文件,则命令将挂起等待 syslog 进程的结束。

syslog守 护程序将内核消息转储到 /var/log/dmesg,因此您也可以使用日志文件 /var/log/dmesg 查看内核消息。

cat /var/log/dmesg

dmesg 格式化输出

dmesg 命令提供了许多选项,可帮助您格式化和过滤输出。dmesg 命令中最常用的选项之一是 -H / --humandmesg 命令将以友好的阅读格式进行输出。

-H / --human 选项还将 dmesg 命令的输出通过管道传递到一个分页器。要打印可读格式的时间戳,请使用-T / --ctime选项。

dmesg -H
dmesg -T
[Mon Oct 14 14:38:04 2019] IPv6: ADDRCONF(NETDEV_CHANGE): wlp1s0: link becomes ready

时间戳格式也可以使用 --time-format <format> 选项设置,可以是 ctime,reltime,delta,notime 或 iso。

例如,要使用增量格式,请运行命令 dmesg --time-format=delta 。您也可以组合两个或多个选项。

要实时查看 dmesg 命令的输出,请使用 -w / --follow 选项,例如命令 dmesg -H -T --follow

dmesg --time-format=delta
dmesg -H -T

dmesg -H -T --follow

dmesg 日志分类与级别

您可以将 dmesg 命令输出限制为指定的分类和等级。dmesg 命令支持分类消息包括。

kern 内核消息。user 用户级消息。mail 邮件系统。daemon 系统守护程序。auth 安全/授权消息。

syslog 内部 syslogd 消息。lpr 行式打印机子系统。news 网络新闻子系统。

dmesg 命令的 -f / --facility <list> 项允许您将输出限制为指定的分类。该选项接受一个或多个逗号分隔的分类。

例如,要仅打印内核和系统守护程序消息,可以运行命令 dmesg -f kern,daemon

dmesg -f kern,daemon

每条日志消息都与消息重要性的日志级别相关联。dmesg 命令支持的日志级别包括。

emerg 系统无法使用,alert 必须立即采取措施,crit 紧急情况,err 错误消息。

warn 警告条件。notice 正常但重要的条件。info 信息性。debug 调试级消息。

dmesg 命令的 -l / --level <list> 选项将输出限制为指定级别。该选项接受一个或多个逗号分隔的级别类型。

例如仅显示错误和严重消息,请运行命令 dmesg -l err,crit

dmesg -l err,crit

清除环形缓冲区

只有 roo t或具有 sudo 权限的用户才能清除缓冲区。要在清除之前缓冲区的内容,请使用 -c / --read-clear 选项。

如果要在清除文件之前将当前日志保存到文件中,请将 dmesg 命令的输出重定向到文件。

dmesg > dmesg_messages

sudo dmesg -C

结论

dmesg 命令允许您查看和控制内核环形缓冲区。对内核或硬件问题进行故障排除时,它非常有用。

在终端中输入man dmesg,获取所有可用于 dmesg 选项的信息。

如果您有任何问题或反馈,请随时发表评论。点击下方阅读原文获取更好排版格式。

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存