如何在 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://xiahunao.cn/news/2814844.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

MasterAlign智能穿戴视觉应用软件说明书

​ ​随着智能穿戴设备的普及,生产过程中的质量检测成为了一个重要环节。MasterAlign视觉应用软件作为一款高效、精准的视觉检测软件,在智能穿戴设备生产过程中起到了至关重要的作用。本篇文章将详细介绍MasterAlign视觉应用软件的使用说明&#xff0…

卷积神经网络介绍

卷积神经网络(Convolutional Neural Networks,CNN) 网络的组件:卷积层,池化层,激活层和全连接层。 CNN主要由以下层构造而成: 卷积层:Convolutional layer(CONV)池化层&#xff1a…

C++十大经典算法案例

文章目录 1. **排序算法**:2. **搜索算法**:3. **图算法**:4. **动态规划**:5. **贪心算法**:6. **树与图算法**:7. **字符串处理算法**:8. **位运算算法**:9. **数学相关算法**&…

Jvm之内存泄漏

1 内存溢出 1.1 概念 java.lang.OutOfMemoryError,是指程序在申请内存时,没有足够的内存空间供其使用,出现OutOfMemoryError。产生该错误的原因主要包括:JVM内存过小。程序不严密,产生了过多的垃圾。 程序体现: 内…

C语言:字符函数 字符串函数 内存函数

C语言:字符函数 & 字符串函数 & 内存函数 字符函数字符分类函数字符转换函数tolowertoupper 字符串函数strlenstrcpystrcatstrcmpstrstrstrtok 内存函数memcpymemmovememsetmemcmp 字符函数 顾名思义,字符函数就是作用于字符的函数,…

搜索算法(算法竞赛、蓝桥杯)--双向DFS+二分查找

1、B站视频链接&#xff1a;B26 双向DFS 送礼物_哔哩哔哩_bilibili #include <bits/stdc.h> using namespace std; int n,m; int g[46];//存储所有物品的质量 int w[1<<23];//存储所有能凑出来的重量 int ans,cnt;//w的个数是cnt//搜索第u个数&#xff0c;和为s; …

揭示预处理中的秘密!(二)

目录 ​编辑 1. #运算符 2. ##运算符 3. 命名约定 4. #undef 5. 命令行定义 6. 条件编译 7. 头文件的被包含的方式 8.嵌套文件包含 9. 其他预处理指令 10. 完结散花 悟已往之不谏&#xff0c;知来者犹可追 …

几道特别难搞的数据库面试题

一、多选题(不定项选择) 在下面所列出的条目中&#xff0c;哪些是数据库管理系统的基本功能&#xff1f; A ‍‍ 数据库定义‍‍ B ‍‍ 数据库的建立和维护‍‍ C ‍‍ 数据库存取‍‍ D 数据库和其他软件系统的通信在Mongodb支持的数据类型中&#xff0c;ObjectId&#xff1…

【web APIs】3、(学习笔记)有案例!

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、概念其他事件页面加载事件元素滚动事件页面尺寸事件 元素尺寸与位置 二、案例举例电梯导航 前言 掌握阻止事件冒泡的方法理解事件委托的实现原理 一、概念…

设计模式七:责任链模式

文章目录 1、责任链模式2、spring中的责任链模式Spring InterceptorServlet FilterNetty 1、责任链模式 责任链模式为请求创建了一个接收者对象的链&#xff0c;在这种模式下&#xff0c;通常每个节点都包含对另一个节点者的引用。每个节点针对请求&#xff0c;处理自己感兴趣…

鸿蒙应用成企业布局新方向 鸿蒙人才成开年之后“香饽饽”

随着春节假期的结束&#xff0c;职场人也开始返工返岗。与此同时2024年春招季也已拉开帷幕。2月23日&#xff0c;据智联招聘发布的《2024年春招市场行情周报》&#xff08;第一期&#xff09;显示&#xff0c;2024年春节后第一周&#xff0c;依托消费需求释放与制造业返工复产&…

pv、pvc

目录 1、什么是pv和pvc 2、pvc的使用逻辑 3、StorageClass 4、pv和pvc相互作用 5、pv的生命周期中&#xff0c;一般有几种状态&#xff1f; 6、一个pv从创建到销毁的流程 7、nfs使用pv和pvc 7.1、配置nfs存储 7.2这里定义5个PV&#xff0c;并且定义挂载的路径以及访问…

成都规模最大的直播基地为数字经济时代注入新的活力

直播行业近年来在全球范围内迅速崛起&#xff0c;成为了数字经济时代的新业态。作为中国西南地区的中心城市&#xff0c;成都紧跟时代步伐&#xff0c;积极布局直播产业&#xff0c;以成都直播基地为载体&#xff0c;引领直播行业健康、多元发展。 天府锋巢直播产业基地作为成都…

Android和Linux的开发差异

最近开始投入Android的怀抱。说来惭愧&#xff0c;08年就听说这东西&#xff0c;当时也有同事投入去看&#xff0c;因为恶心Java&#xff0c;始终对这玩意无感&#xff0c;没想到现在不会这个嵌入式都快要没法搞了。为了不中年失业&#xff0c;所以只能回过头又来学。 首先还是…

预付费远传水表管理系统

预付费远传水表管理系统是一种为水表计量和管理而设计的先进系统&#xff0c;结合了预付费和远传智能化技术&#xff0c;为用户和水务部门提供了更便捷、高效的水表管理解决方案。通过这种系统&#xff0c;用户能够根据自身需求预付水费&#xff0c;同时水务部门也能实现对水表…

Java 小项目开发日记 01(注册接口的开发)

Java 小项目开发日记 01&#xff08;注册接口的开发&#xff09; 1.项目需求 完成注册接口 2.项目目录 3. 配置文件&#xff08;pom.xml&#xff09; <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-insta…

Apache Bench(ab )压力测试

目录 参数说明示例1&#xff1a;压力测试示例2&#xff1a;测试post接口post数据文件该如何编写&#xff1f; apr_pollset_poll: The timeout specified has expired (70007)apr_socket_recv: Connection reset by peer (104)参考 参数说明 官方文档参考这里。 ab -c 100 -n …

基础!!!吴恩达deeplearning.ai:神经网络中使用softmax

以下内容有任何不理解可以翻看我之前的博客哦&#xff1a;吴恩达deeplearning.ai 文章目录 softmax作为输出层的神经网络Tensorflow的实现softmax的改进实现数值舍入误差(Numerical Roundoff Errors)sigmoid修改修改softmax 在上一篇博客中我们了解了有关softmax的原理相关内容…

【mysql版本修改】

1、使用telnet确认当前mysql版本号 telnet <MySQL服务器IP地址> <MySQL端口号> telnet 192.168.38.20 33062、使用strings查看/usr/sbin/mysqld中包含版本号的字符串 # 查看/usr/sbin/mysqld文件中是否包含对应的版本号 strings /usr/sbin/mysqld | grep 5.7.30 …

11. Informer 机制总结

Informer 机制 在 Kubernetes 系统中&#xff0c;组件之间通过 HTTP 协议进行通信&#xff0c;在不依赖任何中间件的情况下需要保证消息的实时性、可靠性、顺序性等。那么 Kubernetes 是如何做到的呢&#xff1f;答案就是 Informer 机制。Kubernetes 的其他组件都是通过 clien…