Linux 中的 dmesg 命令
Linux 内核是操作系统的核心,它控制对系统资源(例如 CPU , I/O 设备,物理内存和文件系统)的访问。在引导过程中以及系统运行时,内核会将各种消息写入内核环形缓冲区。这些消息包括有关系统操作的各种信息。
内核环形缓冲区是物理内存的一部分,用于保存内核的日志消息。它具有固定的大小,这意味着一旦缓冲区已满,较旧的日志记录将被覆盖。
命令行实用程序 dmesg
是用来打印,并控制在 Linux 和其它类 Unix 操作系统内核环缓冲区。这对于检查内核启动消息和调试与硬件相关的问题很有用。
在本教程中,我们将介绍该 dmesg
命令的基础知识。
使用 dmesg
命令
dmesg
命令的语法如下:
dmesg [OPTIONS]
在不带任何选项的情况下调用时, dmesg
会将所有消息从内核环形缓冲区写入标准输出:
dmesg
默认情况下,所有用户都可以运行该 dmesg
命令。但是,在某些系统上, dmesg
对非 root 用户的访问可能受到限制。在这种情况下,调用 dmesg
时会收到如下错误消息:
dmesg: read kernel buffer failed: Operation not permitted
kernel 参数 kernel.dmesg_restrict
指定非特权用户是否可以用 dmesg
查看来自内核日志缓冲区的消息。要删除限制,请将其设置为零:
sudo sysctl -w kernel.dmesg_restrict=0
通常,输出包含很多信息行,因此仅输出的最后一部分是可见的。要一次查看一页,请将输出通过管道传递到寻呼机实用程序,例如 less
或 more
:
dmesg --color=always | less
选项 --color=always
是用来彩色输出。
如果要过滤缓冲区消息,请使用 grep
。例如,要仅查看与 USB 相关的消息,请键入:
dmesg | grep -i usb
dmesg
从 /proc/kmsg
虚拟文件中读取内核生成的消息。该文件提供了到内核环形缓冲区的接口,并且只能由一个进程打开。如果系统上正在运行 syslog
进程,并且您尝试使用 cat
或读取文件 less
,则该命令将挂起。
syslog
守护进程转储内核消息,所以你也可以使用该日志文件 /var/log/dmesg
:
cat /var/log/dmesg
格式化 dmesg
输出
该 dmesg
命令提供了许多选项,可帮助您格式化和过滤输出。
-H``--human
是 dmesg
最常用的选项之一,它使人类可读的输出成为可能。
dmesg -H
要打印人类可读的时间戳,请使用 -T
(--ctime
) 选项:
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 --follow
过滤 dmesg
输出
您可以将 dmesg
输出限制为给定的设施和级别。
该功能代表创建消息的过程。 dmesg
支持以下日志功能:
kern
- 内核消息user
- 用户级消息mail
- 邮件系统daemon
- 系统守护程序auth
- 安全/授权消息syslog
- 内部 syslogd 消息lpr
- 行式打印机子系统news
- 网络新闻子系统
使用 -f
(--facility <list>
) 选项,您可以限制输出到特定的设备。该选项接受一个或多个逗号分隔的功能。
例如,要仅显示内核和系统守护程序消息,可以使用:
dmesg -f kern,daemon
每个日志消息都与一个显示消息重要性的日志级别相关联。 dmesg
支持以下日志级别:
emerg
-系统无法使用alert
-必须立即采取行动crit
-关键条件err
-错误条件warn
-警告条件notice
-正常但状况显着info
-信息性的debug
-调试级别的消息
使用 -l
(--level <list>
) 选项将输出限制到所定义的级别。该选项接受一个或多个逗号分隔的级别。
以下命令仅显示错误和严重消息:
dmesg -l err,crit
清除环形缓冲区
在 -C
(--clear
) 选项允许你清除环形缓冲区:
sudo dmesg -C
只有 root 或具有 sudo 特权的用户才能清除缓冲区。
要在清除之前打印缓冲区内容,请使用 -c
(--read-clear
) 选项:
sudo dmesg -c
如果要在清除之前将当前日志保存到文件中,请将输出重定向到文件:
dmesg > dmesg_messages
结论
该 dmesg
命令允许您查看和控制内核环形缓冲区。对内核或硬件问题进行故障排除时,此功能非常有用。
如果想查看更多的信息,请在终端键入 man dmesg
查看更多的 dmesg
选项和用法。