dmesg命令允许您窥视Linux启动进程的隐藏世界。与“故障查找者的朋友”一起查看和监视来自内核自己的环形缓冲区的硬件设备和驱动程序消息
在Linux和Unix类计算机中,启动和启动是计算机通电时发生的事件序列的两个不同阶段。
引导进程(BIOS或UEFI、MBR和GRUB)将系统初始化到内核加载到内存并连接到初始ramdisk(initrd或initramfs)的点,然后启动systemd。
然后启动进程拿起指挥棒,完成操作系统的初始化。在初始化的早期阶段,诸如syslogd或rsyslogd之类的日志守护程序还没有启动和运行。为了避免在这个初始化阶段丢失明显的错误消息和警告,内核包含一个环形缓冲区,它将其用作消息存储。
环形缓冲区是为消息保留的内存空间。它设计简单,尺寸固定。当邮件已满时,较新的邮件将覆盖最旧的邮件。从概念上讲,它可以被认为是一个“循环缓冲区”
内核环形缓冲区存储诸如设备驱动程序的初始化消息、来自硬件的消息和来自内核模块的消息等信息。因为它包含这些低级启动消息,所以环形缓冲区是开始调查硬件错误或其他启动问题的好地方。
但不要空手而归。带上dmesg。
dmesg命令允许您查看存储在环形缓冲区中的消息。默认情况下,您需要使用sudo来使用dmesg。
sudo dmesg环形缓冲区中的所有消息都显示在终端窗口中。
那是一场洪水。显然,我们需要做的是少用管道输送:
sudo dmesg | less现在我们可以在消息中滚动查找感兴趣的项目。
您可以使用less中的搜索功能来定位和突出显示您感兴趣的项目和术语。按less中的正斜杠“/”键启动搜索功能。
相关:如何在Linux上使用less命令
如果希望避免每次使用dmesg时都必须使用sudo,可以使用以下命令。但是,请注意:它允许任何拥有您的计算机用户帐户的人使用dmesg,而不必使用sudo。
sudo sysctl -w kernel.dmesg_restrict=0默认情况下,dmesg可能被配置为生成彩色输出。如果不是,您可以告诉dmesg使用-L(color)选项对其输出着色。
sudo dmesg -L要强制dmesg始终默认为彩色显示,请使用以下命令:
sudo dmesg --color=always默认情况下,dmesg使用自内核启动以来秒和纳秒的时间戳表示法。要以更人性化的格式呈现,请使用-H(human)选项。
sudo dmesg -H这导致两件事发生。
如果您不需要纳秒精度,但确实希望时间戳比默认值更易于读取,请使用-t(人类可读)选项。)有点困惑。-H是“人类”选项,-T是“人类可读”选项。)
sudo dmesg -T时间戳呈现为标准日期和时间,但分辨率降低到一分钟。
一分钟内发生的一切都有相同的时间戳。如果你只关心事件的顺序,这就足够了。另外,请注意,您在命令提示符下返回。此选项不会自动调用less。
要在消息到达内核环形缓冲区时查看消息,请使用--follow(等待消息)选项。那句话可能有点奇怪。如果环形缓冲区用于存储启动序列中发生的事件的消息,那么一旦计算机启动并运行,实时消息如何到达环形缓冲区?
任何导致连接到计算机的硬件发生更改的操作都会导致消息被发送到内核环形缓冲区。更新或添加内核模块,您将看到关于这些更改的环形缓冲区消息。如果**USB驱动器或连接或断开蓝牙设备,您将在dmesg输出中看到消息。即使是虚拟硬件也会导致新消息出现在环形缓冲区中。启动一个虚拟机,您将看到新信息到达环形缓冲区。
sudo dmesg --follow请注意,不会返回到命令提示符。当出现新消息时,dmesg将在终端窗口的底部显示这些消息。
即使装载CD-ROM磁盘也被视为一种变化,因为您已经将CD-ROM磁盘的内容嫁接到目录树上。
要退出实时提要,请按Ctrl+C。
使用tail命令检索最后十条内核环缓冲区消息。当然,您可以检索任意数量的消息。十只是我们的例子。
sudo dmesg | last -10最后十条消息将被检索并在终端窗口中列出。
通过grep将dmesg的输出管道化,以搜索特定的字符串或模式。在这里,我们使用-i(忽略大小写)选项,以便忽略匹配字符串的大小写。我们的结果将包括“u**”和“u**”以及任何其他小写和大写的组合。
sudo dmesg | grep -i u**突出显示的搜索结果是大写和小写的。
我们可以隔离包含对系统sda上第一个SCSI硬盘的引用的消息。(实际上,sda现在也用于第一个SATA硬盘驱动器和USB驱动器。)
sudo dmesg | grep -i sda所有提到sda的消息都会被检索并在终端窗口中列出。
要使grep一次搜索多个术语,请使用-E(扩展正则表达式)选项。必须在带引号的字符串中提供搜索项,在搜索项之间使用管道“|”分隔符:
sudo dmesg | grep -E "memory|tty|dma"任何提到任何搜索词的消息都会列在终端窗口中。
记录到内核环形缓冲区的每条消息都有一个附加级别。级别表示消息中信息的重要性。级别为:
通过使用-l(level)选项并将级别的名称作为命令行参数传递,我们可以让dmesg提取与特定级别匹配的消息。要仅查看“信息”级消息,请使用以下命令:
sudo dmesg -l info列出的所有消息都是信息性消息。它们不包含错误或警告,只是有用的通知。
在一个命令中组合两个或多个日志级别以检索多个日志级别的消息:
sudo dmesg -l debug,noticedmesg的输出是每个日志级别的消息的混合:
dmesg消息分为称为“设施”的类别。设施列表为:
我们可以要求dmesg过滤其输出,以便只显示特定设施中的消息。为此,我们必须使用-f(facility)选项:
sudo dmesg -f daemondmesg列出终端窗口中与守护进程相关的所有消息。
正如我们对级别所做的那样,我们可以要求dmesg一次列出来自多个设施的消息:
sudo dmesg -f syslog, daemon输出是syslog和daemon日志消息的混合。
x(decode)选项使dmesg将设施和级别显示为每行的可读前缀。
sudo dmesg -x在每条线的起点可以看到设施和水平:
第一个突出显示的部分是来自“kernel”工具的消息,级别为“notice”。第二个突出显示的部分是来自“kernel”工具的消息,级别为“info”
简言之,故障查找。
如果您遇到硬件无法识别或无**常工作的问题,dmesg可能会对该问题有所帮助。
狩猎愉快。
... 在本文中,我将向您展示如何在Linux上安装、运行和使用PowerShell! ...
...许您在Android设备上安装诚实善良的Linux应用程序。下面是如何使用Termux应用程序。 ...
... 如何在windows10上安装linux bash shell ...
要在Linux中重命名文件吗?如果您知道如何在Windows、macOS或Chrome操作系统中完成这项工作,那么您就知道如何在这里完成这项工作。在大多数版本的Linux上,您只需右键单击一个文件并选择Rename选项。 ...
想在Linux系统上添加用户但不知道如何添加?在Linux上使用命令行界面管理用户无疑是一项复杂的工作。而对于初学者来说,即使添加新用户也是一场噩梦。 ...
...版本可以让您对安全更新做出重要决定。我们将向您展示如何找到这些,无论您使用哪个发行版。 滚动和点释放 你知道你在运行哪个版本的Linux吗?你能找到内核版本吗?Linux的滚动发行版,如Arch、Manjaro和openSUSE,经常使用自...
...。 这一次,我们将专注于tmux。接下来,我们将介绍screen如何处理相同的特性或功能。 关于屏幕,只有一件事让我们恼火。我们到了以后再谈,看看tmux是否更好。 相关:如何使用Linux的screen命令 安装tmux 虽然screen通常在流行的Li...