当前位置: 首页 > news >正文

如何在 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 消息。

相关文章:

如何在 Linux 上使用 dmesg 命令

文章目录 1. Overview2.ring buffer怎样工作?3.dmesg命令4.移除sudo需求5. 强制彩色输出6.使用人性化的时间戳7.使用dmesg的人性化可读时间戳8.观察实时event9.检索最后10条消息10.搜索特定术语11.使用Log Levels12.使用Facility Categories13.Combining Facility a…...

WPF的DataGrid设置标题头

要设置DataGrid标题头的分割线、背景色和前景色等属性,您可以使用DataGrid的样式和模板来自定义标题头的外观。下面是详细解释以及示例代码: 分割线设置: 您可以使用DataGrid.ColumnHeaderStyle样式中的BorderThickness和BorderBrush属性来设…...

【软考】UML中的图之通信图

目录 1. 说明2. 图示3. 特性4. 例题4.1 例题1 1. 说明 1.通信图强调收发消息的对象的结构组织2.早期版本叫做协作图3.通信图强调参加交互的对象和组织4.首先将参加交互的对象作为图的顶点,然后把连接这些对象的链表示为图的弧,最后用对象发送和接收的消…...

为什么ChatGPT预训练能非常好地捕捉语言的普遍特征和模式

ChatGPT能够非常好地捕捉语言的普遍特征和模式,主要得益于以下几个方面的原因: 大规模语料库:ChatGPT的预训练是在大规模文本语料库上进行的,这些语料库涵盖了来自互联网、书籍、文章、对话记录等多种来源的丰富数据。这种大规模的…...

如何安装ProtoBuf环境

1 🍑下载 ProtoBuf🍑 下载 ProtoBuf 前⼀定要安装依赖库:autoconf automake libtool curl make g unzip 如未安装,安装命令如下: Ubuntu ⽤⼾选择: sudo apt-get install autoconf automake libtool cur…...

C语言 vs Rust应该学习哪个?

C语言 vs Rust应该学习哪个? 在开始前我有一些资料,是我根据网友给的问题精心整理了一份「C语言的资料从专业入门到高级教程」, 点个关注在评论区回复“888”之后私信回复“888”,全部无偿共享给大家!!&am…...

IT廉连看——Uniapp——配置文件pages

IT廉连看——Uniapp——配置文件pages [IT廉连看] 本堂课主要为大家介绍pages.json这个配置文件 一、打开官网查看pages.json可以配置哪些属性。 下面边写边讲解 新建一个home页面理解一下这句话。 以下一些页面的通用配置 通用设置里我们可以对导航栏和状态栏进行一些设…...

服务器上部署WEb服务方法

部署Web服务在服务器上是一个比较复杂的过程。这不仅仅涉及到配置环境、选择软件和设置端口,更有众多其它因素需要考虑。以下是在服务器上部署WEb服务的步骤: 1. 选择服务器:根据项目规模和预期访问量,选择合适的服务器类型和配置…...

设计模式:模版模式

模板模式(Template Pattern)是一种行为型设计模式,它定义了一个操作中的算法骨架,将一些步骤的具体实现延迟到子类中。模板模式使得子类可以在不改变算法结构的情况下重新定义算法的某些步骤。 在模板模式中,将算法的…...

pikachu之特殊注入之搜索型注入、xx型注入、insert/update注入、delete注入、宽字节注入

一步一脚印!!! 补充:此处为什么不写http请求头注入,因为该注入类型只是换了注入点,语句其他根本没有什么变化 1.搜索型 先尝试输入常用payload: 1 or 11 #。 已经有回显 我们在查看提示 我们…...

docker构建hyperf环境

一,构建hyperf 镜像 官网git https://github.com/hyperf/hyperf-docker 使用dockerfile构建镜像 根据需要这里我使用8.1 swoole版本的镜像 在/home/hyperfdocker 目录中新建一个Dockerfile文件,将这个git上的Dockerfile内容复制粘贴进去 docker build…...

WPF常用mvvm开源框架介绍 vue的mvvm设计模式鼻祖

WPF(Windows Presentation Foundation)是一个用于构建桌面应用程序的.NET框架,它支持MVVM(Model-View-ViewModel)架构模式来分离UI逻辑和业务逻辑。以下是一些常用的WPF MVVM开源框架: Prism Prism是由微软…...

HTML <script>元素的10个属性

将javascrip插入HTML的主要方法是使用<script>元素&#xff0c;这个元素是网景公司&#xff08;Netscape&#xff09;创造出来的&#xff0c;script 元素所属类型因其用法而异。位于 head 元素中的 script 元素属于元数据元素&#xff0c;位于其他元素&#xff08;如 bod…...

NX二次开发:ListingWindow窗口的应用

一、概述 在NX二次开发的学习中&#xff0c;浏览博客时发现看到[社恐猫]和[王牌飞行员_里海]这两篇博客中写道有关信息窗口内容的打印和将窗口内容保存为txt,个人人为在二次开发项目很有必要&#xff0c;因此做以下记录。 ListingWindow信息窗口发送信息四种位置类型 设置Listi…...

设计模式-结构型模式-外观模式

外观模式&#xff08;Facade&#xff09;&#xff0c;为子系统中的一组接口提供一个一致的界面&#xff0c;此模式定义了一个高层接口&#xff0c;这个接口使得这一子系统更加容易使用。[DP] 首先&#xff0c;定义子系统的各个组件接口和具体实现类&#xff1a; // 子系统组件接…...

C++学习第四天(类与对象下)

1、构造函数的其他知识 构造函数体赋值 在创建对象时&#xff0c;编译器通过调用构造函数&#xff0c;给对象中各个成员变量一个合适的初始值 构造函数调用之后&#xff0c;对象中已经有了一个初始值&#xff0c;但是不能将其称为对对象中成员变量的初始化&#xff0c;构造函…...

【AI Agent系列】【MetaGPT多智能体学习】0. 环境准备 - 升级MetaGPT 0.7.2版本及遇到的坑

之前跟着《MetaGPT智能体开发入门课程》学了一些MetaGPT的知识和实践&#xff0c;主要关注在MetaGPT入门和单智能体部分&#xff08;系列文章附在文末&#xff0c;感兴趣的可以看下&#xff09;。现在新的教程来了&#xff0c;新教程主要关注多智能体部分。 本系列文章跟随《M…...

python自动化管理和zabbix监控网络设备(无线AC控制瘦ap配置部分)

目录 前言 拓扑 一、AC-SW1 二、Core-sw1 三、Core-sw2 四、汇聚层 五、AC1 六、SW1-6 七、DMZ区域 前言 具体原理和操作可以访问我的主页视频 白帽小丑的个人空间-白帽小丑个人主页-哔哩哔哩视频 拓扑 一、AC-SW1 sys sysname AC-SW1 vlan batch 100 200 210 220 2…...

XSS中级漏洞(靶场)

目录 一、环境 二、正式开始闯关 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x0B 0x0C 0x0D 0x0E ​ 0x0F 0x10 0x11 0x12 一、环境 在线环境&#xff08;gethub上面的&#xff09; alert(1) 二、正式开始闯关 0x01 源码&#xff1a; 思路&#xff1a;闭…...

etcd java 客户端jetcd库踩坑日志

问题 Q&#xff1a; EtcdException: Unable to resolve endpoints [http://0.0.0.0:2379/] A&#xff1a; 经过测试&#xff0c;endpoints最后的斜杠不能写&#xff0c;完整的endpoints是http://0.0.0.0:2379 Q&#xff1a; java.lang.NoSuchMethodError: io.netty.buffer.Po…...

day52 ResNet18 CBAM

在深度学习的旅程中&#xff0c;我们不断探索如何提升模型的性能。今天&#xff0c;我将分享我在 ResNet18 模型中插入 CBAM&#xff08;Convolutional Block Attention Module&#xff09;模块&#xff0c;并采用分阶段微调策略的实践过程。通过这个过程&#xff0c;我不仅提升…...

云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地

借阿里云中企出海大会的东风&#xff0c;以**「云启出海&#xff0c;智联未来&#xff5c;打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办&#xff0c;现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...

剑指offer20_链表中环的入口节点

链表中环的入口节点 给定一个链表&#xff0c;若其中包含环&#xff0c;则输出环的入口节点。 若其中不包含环&#xff0c;则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...

面向无人机海岸带生态系统监测的语义分割基准数据集

描述&#xff1a;海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而&#xff0c;目前该领域仍面临一个挑战&#xff0c;即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...

基于SpringBoot在线拍卖系统的设计和实现

摘 要 随着社会的发展&#xff0c;社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统&#xff0c;主要的模块包括管理员&#xff1b;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...

关于easyexcel动态下拉选问题处理

前些日子突然碰到一个问题&#xff0c;说是客户的导入文件模版想支持部分导入内容的下拉选&#xff0c;于是我就找了easyexcel官网寻找解决方案&#xff0c;并没有找到合适的方案&#xff0c;没办法只能自己动手并分享出来&#xff0c;针对Java生成Excel下拉菜单时因选项过多导…...

go 里面的指针

指针 在 Go 中&#xff0c;指针&#xff08;pointer&#xff09;是一个变量的内存地址&#xff0c;就像 C 语言那样&#xff1a; a : 10 p : &a // p 是一个指向 a 的指针 fmt.Println(*p) // 输出 10&#xff0c;通过指针解引用• &a 表示获取变量 a 的地址 p 表示…...

32单片机——基本定时器

STM32F103有众多的定时器&#xff0c;其中包括2个基本定时器&#xff08;TIM6和TIM7&#xff09;、4个通用定时器&#xff08;TIM2~TIM5&#xff09;、2个高级控制定时器&#xff08;TIM1和TIM8&#xff09;&#xff0c;这些定时器彼此完全独立&#xff0c;不共享任何资源 1、定…...

Java中栈的多种实现类详解

Java中栈的多种实现类详解&#xff1a;Stack、LinkedList与ArrayDeque全方位对比 前言一、Stack类——Java最早的栈实现1.1 Stack类简介1.2 常用方法1.3 优缺点分析 二、LinkedList类——灵活的双端链表2.1 LinkedList类简介2.2 常用方法2.3 优缺点分析 三、ArrayDeque类——高…...

Easy Excel

Easy Excel 一、依赖引入二、基本使用1. 定义实体类&#xff08;导入/导出共用&#xff09;2. 写 Excel3. 读 Excel 三、常用注解说明&#xff08;完整列表&#xff09;四、进阶&#xff1a;自定义转换器&#xff08;Converter&#xff09; 其它自定义转换器没生效 Easy Excel在…...