Linux中的dmesg命令

时间:2020-03-05 15:26:33  来源:igfitidea点击:

Linux内核是操作系统的核心,它控制对系统资源(例如CPU,I/O设备,物理内存和文件系统)的访问。
在引导过程中以及系统运行时,内核会将各种消息写入内核环形缓冲区。
这些消息包括有关系统操作的各种信息。

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

“ dmesg”命令行实用程序用于打印和控制Linux和其他类似Unix的操作系统中的内核环形缓冲区。
这对于检查内核启动消息和调试与硬件相关的问题很有用。

在本教程中,我们将介绍'dmesg'命令的基础知识。

使用'dmesg'命令

“ dmesg”命令的语法如下:

dmesg [OPTIONS]

在不带任何选项的情况下调用时,“ dmesg”会将所有消息从内核环形缓冲区写入标准输出:

dmesg

默认情况下,所有用户都可以运行“ dmesg”命令。
但是,在某些系统上,非root用户可能会限制对'dmesg'的访问。
在这种情况下,调用“ dmesg”时,我们将收到如下错误消息:

dmesg: read kernel buffer failed: Operation not permitted

内核参数“ 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'命令提供了许多选项,可格式化和过滤输出。

'dmesg'最常用的选项之一是'-H'('--human'),它使人可读的输出。
此选项将命令输出通过管道传递到寻呼机:

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'-内核消息
  • '用户'-用户级别的消息
  • '邮件'-邮件系统
  • 'daemon'-系统守护程序
  • 'auth'-安全/授权消息
  • 'syslog'-内部syslogd消息
  • 'lpr'-行式打印机子系统
  • '新闻'-网络新闻子系统

'-f'('--facility <list>')选项允许我们将输出限制为特定的设施。
该选件接受一个或者多个逗号分隔的功能。

例如,要仅显示内核和系统守护程序消息,可以使用:

dmesg -f kern,daemon

每个日志消息都与一个显示消息重要性的日志级别相关联。
'dmesg'支持以下日志级别:

  • 'emerg'-系统无法使用
  • “警告”-必须立即采取行动
  • “暴击”-关键条件
  • 'err'-错误条件
  • “警告”-警告条件
  • '通知'-正常但严重的状况
  • '信息'-信息性
  • '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