如何在 Linux 上使用 dmesg 命令

文章目录

  • 1. Overview
  • 2.ring buffer怎样工作?
  • 3.dmesg命令
  • 4.移除sudo需求
  • 5. 强制彩色输出
  • 6.使用人性化的时间戳
  • 7.使用dmesg的人性化可读时间戳
  • 8.观察实时event
  • 9.检索最后10条消息
  • 10.搜索特定术语
  • 11.使用Log Levels
  • 12.使用Facility Categories
  • 13.Combining Facility and Level
  • 14.结尾

1. Overview

  • dmesg 命令允许查看存储在 Linux ring buffer中的消息,从而深入了解硬件错误和启动问题。
  • 我们能自定义dmesg命令组合,实现如下目的:

removing the need for sudo(消除对 sudo 的需要)
forcing color output(强制颜色输出)
using human-readable timestamps(使用人性化可读的时间戳)
watching live events(观看实时事件)
retrieving the last messages(检索最后的消息)
searching for specific terms(搜索特定术语)
filtering by log levels or facility categories(按日志级别或设施类别进行过滤来自定义 dmesg 命令)
总之,dmesg 命令可帮助我们深入了解 Linux 启动过程中的隐藏世界。 检查和监视来自内核自己的环形缓冲区的硬件设备和驱动程序消息。

2.ring buffer怎样工作?

在 Linux 和类 Unix 计算机中,booting和startup动是计算机power on时发生的事件序列的两个不同阶段。
booting过程(BIOS 或 UEFI、MBR 和 GRUB)将系统初始化到加载内核到内存并连接到初始 RAM 磁盘(initrd 或 initramfs)以及启动 systemd 的阶段。

然后startup过程接手,完成操作系统的初始化。 在初始化的早期阶段,日志守护进程(例如 syslogd 或 rsyslogd)尚未启动并运行。 为了避免在初始化阶段丢失错误消息和警告,内核包含一个用于消息存储的环形缓冲区(ring buffer)。
环形缓冲区是为消息保留的内存空间。 它设计简单,尺寸固定。 当它已满时,较新的消息将覆盖最旧的消息。 从概念上讲,它可以被认为是“循环缓冲区(cirular buffer)”。
内核环形缓冲区存储设备驱动程序的初始化消息、来自硬件的消息以及来自内核模块的消息等信息。 由于环形缓冲区包含这些低级启动消息,因此它是开始调查硬件错误或其他启动问题的好地方。

这就是 dmesg 命令发挥作用的地方。

3.dmesg命令

dmesg 命令允许查看存储在ring buffer中的消息。 默认情况下,需要使用 sudo 才能使用 dmesg。

sudo dmesg

ring buffer中的所有消息都显示在终端窗口中。

Initializing cgroup subsys cpuset
Initializing cgroup subsys cpu
Linux version 2.6.32-300.10.1.el5uek (mockbuild@ca-build56.us.oracle.com) (gcc version 4.1.2 20080704 (Red Hat 4.1.2-50)) #1 SMP Wed Feb 22 17:37:40 EST 2012
Command line: ro root=LABEL=/ rhgb quiet
KERNEL supported cpus:
Intel GenuineIntel
AMD AuthenticAMD
Centaur CentaurHauls
BIOS-provided physical RAM map:
BIOS-e820: 0000000000000000 - 000000000009f800 (usable)
BIOS-e820: 000000000009f800 - 00000000000a0000 (reserved)
BIOS-e820: 00000000000dc000 - 0000000000100000 (reserved)
BIOS-e820: 0000000000100000 - 00000000bfee0000 (usable)
BIOS-e820: 00000000bfee0000 - 00000000bfeff000 (ACPI data)
BIOS-e820: 00000000bfeff000 - 00000000bff00000 (ACPI NVS)
BIOS-e820: 00000000bff00000 - 00000000c0000000 (usable)
BIOS-e820: 00000000f0000000 - 00000000f8000000 (reserved)
BIOS-e820: 00000000fec00000 - 00000000fec10000 (reserved)
BIOS-e820: 00000000fee00000 - 00000000fee01000 (reserved)
BIOS-e820: 00000000fffe0000 - 0000000100000000 (reserved)
BIOS-e820: 0000000100000000 - 00000001c0000000 (usable)
DMI present.
Phoenix BIOS detected: BIOS may corrupt low RAM, working around it.

由于内容太多,需要做使用 less 进行管道传输:

sudo dmesg | less

pciehp 0000:00:15.0:pcie04: service driver pciehp loaded
pciehp 0000:00:15.1:pcie04: HPC vendor_id 15ad device_id 7a0 ss_vid 0 ss_did 0
pciehp 0000:00:15.1:pcie04: service driver pciehp loaded
pciehp 0000:00:15.2:pcie04: HPC vendor_id 15ad device_id 7a0 ss_vid 0 ss_did 0
pciehp 0000:00:15.2:pcie04: service driver pciehp loaded
pciehp 0000:00:15.3:pcie04: HPC vendor_id 15ad device_id 7a0 ss_vid 0 ss_did 0
pciehp 0000:00:15.3:pcie04: service driver pciehp loaded
pciehp 0000:00:15.4:pcie04: HPC vendor_id 15ad device_id 7a0 ss_vid 0 ss_did 0
pciehp 0000:00:15.4:pcie04: service driver pciehp loaded
pciehp 0000:00:15.5:pcie04: HPC vendor_id 15ad device_id 7a0 ss_vid 0 ss_did 0
pciehp 0000:00:15.5:pcie04: service driver pciehp loaded
pciehp 0000:00:15.6:pcie04: HPC vendor_id 15ad device_id 7a0 ss_vid 0 ss_did 0
pciehp 0000:00:15.6:pcie04: service driver pciehp loaded
/service

可以使用 less 中的搜索功能来定位并突出显示感兴趣的项目和术语。通过在 less 中按正斜杠键“/”来启动搜索功能。

4.移除sudo需求

如果想避免每次使用 dmesg 时都必须使用 sudo,可以使用此命令。
但是,请注意:它允许任何拥有您计算机用户帐户的人使用 dmesg,而无需使用 sudo。

sudo sysctl -w kernel.dmesg_restrict=0

5. 强制彩色输出

默认情况下,dmesg 可能会配置为生成彩色输出。 如果不是,可以告诉 dmesg 使用 -L(颜色)选项为其输出着色。

sudo dmesg -L

要强制 dmesg 始终默认为彩色显示,使用以下命令:

sudo dmesg --color=always

6.使用人性化的时间戳

默认情况下,dmesg 使用自内核启动以来的秒和纳秒时间戳记法。 要以更人性化的格式呈现此内容,请使用 -H(人性化)选项。

这会导致两件事发生。

[Jul30 10:26] Initializing cgroup subsys cpuset
[ +0.000000] Initializing cgroup subsys cpu
[ +0.000000] Initializing cgroup subsys cpuacct
[ +0.000000] Linux version 3.10.0-1062.12.1.el7.x86_64 (mockbuild@jenkins-10-147-72-125-c2dc54eb-871b-45db-b195-4c48862bf1cf) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-39.0.1) (GCC) ) #1 SMP Tue Feb 4 15:08:25 PST
[ +0.000000] Command line: BOOT_IMAGE=/vmlinuz-3.10.0-1062.12.1.el7.x86_64 root=UUID=521925fd-a19d-46cb-8b1a-8edb5291928f ro crashkernel=auto rhgb quiet numa=off transparent_hugepage=never LANG=en_US.UTF-8
[ +0.000000] Disabled fast string operations
[ +0.000000] e820: BIOS-provided physical RAM map:
[ +0.000000] BIOS-e820: [mem 0x0000000000000000-0x000000000009ebff] usable
[ +0.000000] BIOS-e820: [mem 0x000000000009ec00-0x000000000009ffff] reserved
[ +0.000000] BIOS-e820: [mem 0x00000000000dc000-0x00000000000fffff] reserved
[ +0.000000] BIOS-e820: [mem 0x0000000000100000-0x00000000bfedffff] usable
[ +0.000000] BIOS-e820: [mem 0x00000000bfee0000-0x00000000bfefefff] ACPI data
[ +0.000000] BIOS-e820: [mem 0x00000000bfeff000-0x00000000bfefffff] ACPI NVS
[ +0.000000] BIOS-e820: [mem 0x00000000bff00000-0x00000000bfffffff] usable
[ +0.000000] BIOS-e820: [mem 0x00000000f0000000-0x00000000f7ffffff] reserved
[ +0.000000] BIOS-e820: [mem 0x00000000fec00000-0x00000000fec0ffff] reserved
[ +0.000000] BIOS-e820: [mem 0x00000000fee00000-0x00000000fee00fff] reserved
[ +0.000000] BIOS-e820: [mem 0x00000000fffe0000-0x00000000ffffffff] reserved
[ +0.000000] BIOS-e820: [mem 0x0000000100000000-0x000000043fffffff] usable

输出会自动以 less 形式显示。
时间戳显示带有日期和时间的时间戳,分辨率为分钟。 每分钟发生的消息都标有从该分钟开始算起的秒数和纳秒数。

7.使用dmesg的人性化可读时间戳

如果不需要纳秒精度,但确实希望时间戳比默认值更容易阅读,可以使用 -T (人类可读)选项。(这有点令人困惑。-H 是“人性化”选项,-T 是“人性化可读”选项。)

sudo dmesg -T

时间戳呈现为标准日期和时间,但分辨率降低到一分钟。

[Sun Jul 30 10:26:23 2023] Disabled fast string operations
[Sun Jul 30 10:26:23 2023] e820: BIOS-provided physical RAM map:
[Sun Jul 30 10:26:23 2023] BIOS-e820: [mem 0x0000000000000000-0x000000000009ebff] usable
[Sun Jul 30 10:26:23 2023] BIOS-e820: [mem 0x000000000009ec00-0x000000000009ffff] reserved
[Sun Jul 30 10:26:23 2023] BIOS-e820: [mem 0x00000000000dc000-0x00000000000fffff] reserved
[Sun Jul 30 10:26:23 2023] BIOS-e820: [mem 0x0000000000100000-0x00000000bfedffff] usable
[Sun Jul 30 10:26:23 2023] BIOS-e820: [mem 0x00000000bfee0000-0x00000000bfefefff] ACPI data
[Sun Jul 30 10:26:23 2023] BIOS-e820: [mem 0x00000000bfeff000-0x00000000bfefffff] ACPI NVS

Everything that happened within a single minute has the same timestamp. If all you’re bothered about is the sequence of events, this is good enough. Also, note that you’re dumped back at the command prompt. This option doesn’t automatically invoke less.
一分钟内发生的所有事情都有相同的时间戳。 如果所关心的只是事件的顺序,那么这就足够了。

8.观察实时event

任何导致连接到计算机的硬件发生变化的情况都会导致消息发送到内核ring buffer。 更新或添加内核模块,将看到有关这些更改的ring buffer消息。 如果插入 USB 驱动器或连接或断开蓝牙设备,将在 dmesg 输出中看到消息。 即使虚拟硬件也会导致新消息出现在ring buffer中。 启动虚拟机,将看到新信息到达ring buffer。

sudo dmesg --follow

请注意,命令执行后不会返回到命令提示符。 当新消息出现时,它们会由 dmesg 显示在终端窗口的底部。
在这里插入图片描述

甚至挂载 CD-ROM 盘也被视为变化,因为已将 CD-ROM 盘的内容移植到目录树上。
在这里插入图片描述
要退出实时反馈,按Ctrl+C。

9.检索最后10条消息

sudo dmesg | last -10

10.搜索特定术语

将 dmesg 的输出通过管道传输到 grep 以搜索特定的字符串或模式。 这里我们使用 -i(忽略大小写)选项,以便忽略匹配字符串的大小写。 我们的结果将包括“usb”和“USB”以及任何其他小写和大写的组合。

sudo dmesg | grep -i usb

突出显示的搜索结果以大写和小写形式显示。
在这里插入图片描述
我们可以隔离包含对系统 sda 上第一个 SCSI 硬盘的引用的消息。 (实际上,sda 现在也用于第一个 SATA 硬盘驱动器和 USB 驱动器。)

[oracle@test ~]$ sudo dmesg | grep -i sda
[ 2.016997] sd 0:0:0:0: [sda] 83886080 512-byte logical blocks: (42.9 GB/40.0 GiB)
[ 2.017043] sd 0:0:0:0: [sda] Write Protect is off
[ 2.017045] sd 0:0:0:0: [sda] Mode Sense: 61 00 00 00
[ 2.017066] sd 0:0:0:0: [sda] Cache data unavailable
[ 2.017068] sd 0:0:0:0: [sda] Assuming drive cache: write through
[ 2.026601] sda: sda1 sda2 sda3
[ 2.027336] sd 0:0:0:0: [sda] Attached SCSI disk
[ 2.392710] EXT4-fs (sda2): mounted filesystem with ordered data mode. Opts: (null)
[ 6.802833] EXT4-fs (sda2): re-mounted. Opts: (null)
[ 9.187060] Adding 8388604k swap on /dev/sda3. Priority:-2 extents:1 across:8388604k FS
[ 9.676498] EXT4-fs (sda1): mounted filesystem with ordered data mode. Opts: (null)

要使 grep 一次搜索多个术语,请使用 -E(扩展正则表达式)选项。 必须在带引号的字符串内提供搜索词,并使用管道“|” 搜索词之间的分隔符:

sudo dmesg | grep -E "memory|tty|dma"

在这里插入图片描述

11.使用Log Levels

记录到内核ring buffer的每条消息都附加了一个级别。 级别代表消息中信息的重要性。 级别为:

emerg:系统无法使用。
alert:必须立即采取行动。
Crit:危急情况。
err:错误情况。
warn:警告情况。
notice:正常但重要的情况。
information:信息性的。
debug:调试级别消息。

We can make dmesg extract messages that match a particular level by using the -l (level) option and passing the name of the level as a command-line parameter. To see only “informational” level messages, use this command:
我们可以使用 -l(级别)选项并将级别名称作为命令行参数传递,从而使 dmesg 提取与特定级别匹配的消息。 要仅查看“information”级别的消息,使用以下命令:

sudo dmesg -l info

将两个或多个日志级别组合在一个命令中以检索多个日志级别的消息:

sudo dmesg -l debug,notice

12.使用Facility Categories

The Facility Categories
dmesg消息被分组为称为“facilities”的类别。facilities列表如下:

kern:内核消息。
user:用户级消息。
mail:邮件系统。
daemon:系统守护进程。
auth:安全/授权消息。
syslog:内部syslogd消息。
lpr:打印子系统。
news:网络新闻子系统。

We can ask dmesg to filter its output to only show messages in a specific facility. To do so, we must use the -f (facility) option:
我们可以要求 dmesg 过滤其输出,仅显示特定设施中的消息。 为此,我们必须使用 -f(facility)选项:

sudo dmesg -f daemon

如同我们对级别所做的那样,我们可以要求 dmesg 同时列出来自多个设施的消息:

sudo dmesg -f syslog, daemon

输出是系统日志和守护程序日志消息的混合。

13.Combining Facility and Level

The -x (decode) option makes dmesg show the facility and level as human-readable prefixes to each line.
-x(decode)选项使 dmesg 将facility和level显示为每行的人类可读前缀。

sudo dmesg -x

在这里插入图片描述
第一个突出显示的部分是来自“kernel”设施的消息,级别为“notice”。 第二个突出显示的部分是来自“kernel”设施的消息,级别为“info”。

14.结尾

简而言之,就是找错。
如果遇到某个硬件无法识别或运行不正常的问题,dmesg 可能会对该问题有所帮助。
使用 dmesg 从最高级别到每个较低级别查看消息,查找提及硬件项目或可能与问题有关的任何错误或警告。
使用 dmesg 搜索任何提及的适当设施,看看它们是否包含任何有用的信息。
通过 grep 管道 dmesg 并查找相关字符串或标识符,例如产品制造商或型号。
通过 grep 管道 dmesg 并查找“gpu”或“存储”等通用术语,或“失败”、“失败”或“无法”等术语。
使用 --follow 选项并实时观看 dmesg 消息。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/496101.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何使用ETLCloud拉通金蝶云

一、ETLCloud集成组件 ETLCloud采用了一种创新的基于平台底座的理念。它通过将组件和平台进行分离,用户可以在平台上自行下载和安装所需的组件,而无需升级整个底座版本。这样用户就可以通过不断升级组件来增强数据集成平台的处理能力。同时,…

把 Windows 10/11 系统安装到内存上,会发生什么?速度快到爆炸!

把 Windows 10/11 系统安装到内存上,会发生什么?速度快到爆炸! Primo Ramdisk 下载:https://www.freedidi.com/11637.html Primo 内存盘 强大的磁盘模拟器可创建超快 RAM 磁盘 1.超快访问、超低时延 RAM 磁盘是根据系统内存创建的…

【论文复现】——一种新的鲁棒三维点云平面拟合方法

目录 一、算法原理1、论文概述2、参考文献二、代码实现三、结果展示本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的GPT爬虫。 一、算法原理 1、论文概述 针对三维点云中的异常值和粗差点对平面拟合精度产生的影响,文章提出一…

LeetCode 刷题 [C++] 第240题.搜索二维矩阵 II

题目描述 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性: 每行的元素从左到右升序排列。 每列的元素从上到下升序排列。 题目分析 通过分析矩阵的特点发现,其左下角和右上角可以看作一个“二叉搜索树的根节…

安卓平板主板_安卓平板电脑主板MTK联发科|高通|紫光展锐方案

安卓平板电脑主板选择了MTK联发科方案,并且可以选配高通或者紫光展锐平台方案,为用户提供更强劲的性能和定制化的服务。主板搭载了联发科MT6771处理器,采用12nm制程工艺,拥有八核Cortex-A73Coretex-A53架构,主频为2.0G…

人脸识别技术不适用于哪些应用场景?

人脸识别技术在很多应用场景中都具有广泛的应用,但也存在一些场景下不适用的情况,包括: 1. 隐私保护:人脸识别技术涉及对个人敏感信息的收集和处理,可能对隐私构成潜在威胁。在一些需要高度保护个人隐私的场景&#x…

如何运行github上的项目

为了讲明白这个过程,特意做了一个相当来说比较好读懂的原理图,希望和我一样初学的小伙伴也能很快上手哈😊 在Github中找到想要部署的项目,这里以BartoszJarocki/CV(线上简历📄)项目为例 先从头…

NerfStudio安装及第一个场景重建

NerfStudio文档是写在windows和linux上安装,本文记录Linux安装的过程,且我的cuda是11.7 创建环境 conda create --name nerfstudio -y python3.8 conda activate nerfstudio python -m pip install --upgrade pip Pytorch要求2.0.1之后的,文档推荐cud…

resilience4j 2.0.0版本使用要求最低JDK17(使用踩坑记录)

文章目录 🔊博主介绍🥤本文内容📢文章总结📥博主目标 🔊博主介绍 🌟我是廖志伟,一名Java开发工程师、Java领域优质创作者、CSDN博客专家、51CTO专家博主、阿里云专家博主、清华大学出版社签约作…

免费的Git图形界面工具sourceTree介绍

阅读本文同时请参阅-----代码库管理工具Git介绍 sourceTree是一款免费的Git图形界面工具,它简化了Git的使用过程,使得开发者可以更加方便地下载代码、更新代码、提交代码和处理冲突。下面我将详细介绍如何使用sourceTree进行这些操作。 1.下载和…

uniapp:使用DCloud的uni-push推送消息通知(在线模式)java实现

uniapp:使用DCloud的uni-push推送消息通知(在线模式)java实现 1.背景 今天开发app的时候遇到一个需求: 业务在出发特定条件的时候向对应的客户端推送消息通知。 为什么选择在线模式,因为我们使用的是德邦类似的手持终端&#xf…

Springboot+vue的考务报名平台(有报告)。Javaee项目,springboot vue前后端分离项目。

演示视频: Springbootvue的考务报名平台(有报告)。Javaee项目,springboot vue前后端分离项目。 项目介绍: 本文设计了一个基于Springbootvue的前后端分离的考务报名平台,采用M(model&#xff0…