在本文中,我们将介绍Linux下dmesg命令的基础知识。Linux内核是操作系统的核心,它控制对系统资源(例如CPU、I/O设备、物理内存和文件系统)的访问,在引导过程中以及系统运行时,内核会将各种消息写入内核环形缓冲区,这些消息包括有关系统操作的各种信息。内核环形缓冲区是物理内存的一部分,用于保存内核的日志消息,它具有固定的大小,这意味着一旦缓冲区已满,较旧的日志记录将被覆盖。dmesg命令行实用程序用于在Linux和其他类似Unix的操作系统中打印和控制内核环形缓冲区,这对于检查内核启动消息和调试与硬件相关的问题很有用。
使用dmesg命令 dmesg命令的语法如下: dmesg [OPTIONS] 在不带任何选项的情况下调用dmesg会将所有消息从内核环形缓冲区写入标准输出: $ dmesg 默认情况下,所有用户都可以运行dmesg命令,但是,在某些系统上,非root用户可能会限制对dmesg的访问,在这种情况下,调用dmesg时,你将收到如下错误消息: dmesg: read kernel buffer failed: Operation not permitted(dmesg:读取内核缓冲区失败:不允许操作) 内核参数kernel.dmesg_restrict指定无特权的用户是否可以使用dmesg查看来自内核日志缓冲区的消息,要删除限制,请将其设置为零: $ sudo sysctl -w kernel.dmesg_restrict=0 通常,输出包含很多信息行,因此仅输出的最后一部分是可见的,要一次查看一页,请将输出通过管道传递到诸如less和more的pager实用程序: $ dmesg --color=always | less --color=always始终用于保留彩色输出。 如果要过滤缓冲区消息,请使用grep,例如,要仅查看与USB相关的消息,请键入: $ dmesg | grep -i usb 参考:在Linux系统下使用grep命令搜索文件的详细用法。 dmesg从/proc/kmsg虚拟文件读取内核生成的消息,该文件提供了到内核环形缓冲区的接口,并且只能由一个进程打开,如果你的系统上正在运行syslog进程,并且你尝试使用cat(或更少)读取文件,该命令将挂起。 syslog守护程序将内核消息转储到/var/log/dmesg,因此也可以使用该日志文件: $ cat /var/log/dmesg
格式化dmesg输出 dmesg命令提供了许多选项,可帮助你格式化和过滤输出。 dmesg最常用的选项之一是-H(-human),它使人可读的输出成为可能,此选项将命令输出通过管道传递到pager: $ 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 -H -T 要实时观看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 > dmesg_messages
结论 dmesg命令允许你查看和控制内核环形缓冲区,对内核或硬件问题进行故障排除时,此功能非常有用。 在你的终端中键入man dmesg以获取有关所有可用dmesg选项的信息。
相关主题 |