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

【Linux篇】深入理解文件系统:从基础概念到 ext2 文件系统的应用与解析

文件系统的魔法:让计算机理解并存储你的数据

  • 一. 文件系统
    • 1.1 块
    • 1.2 分区
    • 1.3 inode(索引节点)
  • 二. ext2文件系统
    • 2.1 认识文件系统
    • 2.2 Block Group (块组)
      • 2.2.1 Block Group 的基本概念
      • 2.2.2 Block Group 的作用
    • 2.3 块组内部结构
      • 2.3.1 超级块(Super Block)
      • 2.3.2 GDT(Group Descriptor Table)
      • 2.3.3 块位图(Block Bitmap)
      • 2.3.4 inode位图(Inode Bitmap)
      • 2.3.5 inode表
      • 2.3.6 Data Block(数据块)
    • 2.4 目录与文件名
    • 2.5 路径解析
      • 2.5.1 路径解析与文件系统一致性
    • 2.6 路径缓存
    • 2.7 挂载分区
  • 三. 最后

本文将介绍文件系统的基本概念及其重要性。文件系统作为操作系统的一部分,负责管理存储设备上的数据存储、读取和组织方式。它提供了一种高效且可靠的方法来存储和检索文件,使得操作系统能够有效地管理大量数据。本文将从文件系统的基本架构、常见类型、以及其在实际应用中的表现和优化策略等方面展开讨论,旨在帮助读者理解文件系统如何支持现代计算环境中的数据存储需求。

💬 欢迎讨论:如果你在学习过程中有任何问题或想法,欢迎在评论区留言,我们一起交流学习。你的支持是我继续创作的动力! 👍
点赞、收藏与分享:觉得这篇文章对你有帮助吗?别忘了点赞、收藏并分享给更多的小伙伴哦!你们的支持是我不断进步的动力! 🚀
分享给更多人:如果你觉得这篇文章对你有帮助,欢迎分享给更多对Linux OS感兴趣的朋友,让我们一起进步!

一. 文件系统

打开的文件被内存管理着,实际是进程通过相关数据结构将每个对象进行关联;而未被打开的文件被保存在磁盘上,一般是未被打开的文件占据最多。

1.1 块

文件系统块(也称为磁盘块)是操作系统用来管理磁盘空间的基本单位。它的引入主要解决了两个问题:一个是磁盘的访问效率,另一个是存储空间的管理。块的大小最常见为4KB,即八个扇区组成一个块。块是文件存取的最小单位。

LBA(Logical Block Address)逻辑块地址,本质是线性地址。

在这里插入图片描述
块号=LBA/8,因为LBA是线性的像数组一样,8个扇区是一个块。
LBA=块号*8+n(n指的是指定扇区的第几个位置)。

1.2 分区

文件系统分区是指将磁盘划分为多个逻辑上独立的区域,每个区域可以格式化为独立的文件系统,用于存储数据和文件。分区的引入主要是为了提高磁盘的管理效率,优化存储空间的利用,同时也增强了系统的安全性和可扩展性。通过分区,操作系统能够在同一物理磁盘上为不同类型的数据提供不同的存储环境,例如操作系统、应用程序和用户数据可以分别存储在不同的分区中,从而避免它们之间的相互干扰。每个分区可以使用不同的文件系统格式(如NTFS、FAT32、ext4等),以满足不同需求的性能和功能要求。此外,分区还可以提供数据隔离,一旦一个分区发生故障,其他分区的数据不会受到影响,增加了数据的安全性。通过分区,系统管理员可以更方便地管理磁盘,进行备份、恢复或扩展,也便于磁盘的高效利用和性能优化。

1.3 inode(索引节点)

文件=内容(数据)+ 属性,文件的内容存储在哪里呢???存在inode表中。

查看inode的命令格式:

ls -li

  • 示例:

ls usercode.c -li
1061373 -rw-rw-r-- 1 wch_1 wch_1 404 Apr 12 17:37 usercode.c

  • 1061273:inode编号
  • -rw-rw-r-- :权限
  • 1:硬链接数
  • wch_1 :拥有者
  • wch_1:所属组
  • 404:文件大小
  • Apr 12 17:37:最近修改时间
  • usercode.c:文件名

还有另一个方式:stat 文件名

  • 示例:

stat usercode.c
在这里插入图片描述
inode是文件的唯一标识符,有且仅有一个,叫做inode号。

二. ext2文件系统

前言:文件系统有很多的分类,如:

  • ext3/ext4: Linux 中广泛使用的文件系统,ext4 是其更先进的版本,支持更大的文件系统和更高效的数据存储。
  • JFS(Journaled File System): IBM 开发的日志文件系统,广泛应用于高性能服务器。
  • ReiserFS: 另一个支持日志的文件系统,主要用于 Linux 系统。

虽然文件种类很多,本文章主要以ext2文件系统为例。

2.1 认识文件系统

文件系统的目的是组织和管理硬盘上的文件,确保文件能够在磁盘上高效、安全地存储和访问。格式化硬盘是将硬盘转化为特定文件系统的过程,这样硬盘就能够被操作系统识别并使用。文件系统的设计和选择影响文件存储的性能、安全性以及后续的扩展能力,因此根据应用需求选择合适的文件系统非常重要。

“只要能管理一个分区,就能管理所有分区,也就能管理所有磁盘文件” 这句话的含义是:ext2 文件系统通过将硬盘分区划分成多个相同大小的块组来管理数据,每个块组都有独立的管理机制。只要操作系统能够理解和管理一个分区中的块组结构,它就能通过相同的方式管理其他分区和整个磁盘中的所有文件。这个设计使得文件系统管理的过程更加简洁和高效,便于扩展。
在这里插入图片描述
上面可以看到分区的前面存在Boot Sector。下面将介绍一下它。

  • Boot Sector(启动扇区)

Boot Sector(启动扇区)是计算机存储设备(如硬盘、固态硬盘、U盘等)上的一个特殊区域,用于存放引导操作系统的相关信息。它是系统启动过程中的重要组成部分,负责将操作系统加载到内存并开始执行。

  • Boot Sector 是存储设备上的特殊区域,负责启动操作系统。
  • 在传统的 BIOS 系统中,它通常指的是 MBR,包含引导程序和分区表信息。
  • 在现代的 UEFI 系统中,启动信息存储在 EFI System Partition (ESP) 中。
  • Boot Sector 是计算机启动过程的关键,确保操作系统能够加载并执行。

2.2 Block Group (块组)

Block Group 是一种用于文件系统中存储和组织数据的结构,尤其在 ext2、ext3 和 ext4 等文件系统中应用广泛。它是一种将文件系统数据划分成更小单元的方式,以便提高磁盘访问的效率并确保数据的组织性。

2.2.1 Block Group 的基本概念

在 ext2/3/4 文件系统中,磁盘分区(或硬盘)被划分为多个 Block Group。每个 Block Group 是磁盘上的一个逻辑单位,通常由以下几个部分组成:

  • 数据块(Data Blocks): 存储文件的实际数据。
  • inode 表(Inode Table): 存储文件的元数据,如文件的权限、大小、创建时间等信息。
  • 超级块(Superblock): 存储关于文件系统的总体信息,如文件系统的大小、已用空间、剩余空间等。
  • 块位图(Block Bitmap): 用于标记哪些数据块是空闲的,哪些是已经使用的。
  • inode 位图(Inode Bitmap): 用于标记哪些 inode 是空闲的,哪些是已经使用的。

2.2.2 Block Group 的作用

Block Group 的设计目的有几个,主要包括以下几点:

  1. 提高访问效率: 将硬盘分为多个 Block Group 有助于提高文件系统的性能。每个 Block Group 内的数据结构相对独立,这样操作系统可以更快地定位文件。每个块组中的 inode 表 和 数据块尽量靠近,这样可以减少磁盘寻道时间,提高文件读取速度。
  2. 避免碎片化: 通过将文件的 inode 和 数据块 组织在同一个块组内,ext系列文件系统能有效地减少碎片化。这样,文件的数据和它的元数据被存放在同一块区域,读写操作更加连续,减少了由于寻址不连续带来的磁盘碎片。
  3. 管理和分配空间 :每个 Block Group 都有一个独立的位图,标记数据块和 inode
    的使用情况。这使得文件系统可以灵活地管理磁盘空间,减少不必要的磁盘访问和冲突。在一个文件系统中,如果所有数据都集中在一个大块区域,访问时可能需要更多的寻址和空间管理,使用Block Group 的方法可以使得空间管理更加高效。
  4. 容错性与恢复:由于文件系统是通过多个块组管理磁盘空间,一些块组发生错误时,其他块组仍然能够正常工作,这提高了文件系统的容错性。损坏的块组可以通过文件系统的修复工具进行恢复,而不必影响整个磁盘。

下面将详细介绍块组内部的结构即功能。😆

2.3 块组内部结构

2.3.1 超级块(Super Block)

Superblock(超级块)是文件系统中的一个重要结构,负责存储有关文件系统的元数据。它是文件系统的核心部分之一,用于描述文件系统的总体信息,包括文件系统的大小、空闲空间、块的大小、文件系统的状态等。每个文件系统都有一个 超级块,它是文件系统结构的关键。

Superblock 的作用

Superblock 存储了文件系统的基本信息,这些信息对于文件系统的运行和维护至关重要。它主要包括以下内容:

  1. 文件系统的总大小: 文件系统的总大小(以字节为单位)以及文件系统使用的总块数。
  2. 块大小(Block Size): 文件系统中每个块的大小(通常为 512 字节、1 KB、2 KB、4 KB等)。块大小决定了文件系统数据存储的最小单位。
  3. 空闲空间的信息: 包括文件系统中空闲块的数量、空闲 inode 的数量等。这些信息用于文件分配和空间管理。
  4. inode 信息: 包括文件系统总共有多少个 inode、每个 inode 占用多少空间,以及 inode 表的位置等。
  5. 文件系统状态: 用于记录文件系统的健康状态(如是否需要修复),并存储文件系统的版本信息。
  6. 文件系统的创建时间、最后挂载时间、文件系统的版本等: 用于文件系统管理和维护。
  7. 块位图(Block Bitmap)和 inode 位图(Inode Bitmap)的状态信息: 用于跟踪哪些数据块和 inode是空闲的,哪些已经被分配。

一个超级块存在很多备份,防止丢失,可以系统调用(如 Linux 中的 fsck 命令)来检查和修复文件系统。在文件系统损坏时,fsck 会使用 superblock 中的信息来尝试恢复文件系统的状态。

总结:
Superblock 是文件系统中最重要的数据结构之一,它包含文件系统的总体配置信息、空闲空间、inode 信息等。文件系统的初始化、挂载、空间管理、数据恢复等操作都离不开 superblock 的帮助。在文件系统损坏或异常的情况下,superblock 还提供了修复文件系统所需要的关键数据。

2.3.2 GDT(Group Descriptor Table)

块组描述表(Block Group Descriptor Table) 是在一些文件系统中用于管理块组(Block Group)信息的数据结构,尤其是在 ext2、ext3、ext4 等文件系统中,块组描述表是管理磁盘空间的核心部分之一。

用于描述块组的属性信息,块组与块组描述符一一对应。

块组描述表的结构

在 ext2、ext3 和 ext4 文件系统中,块组描述表的每个条目通常包含以下信息:

  1. 块组的起始地址(Block Group Start Address): 用于表示该块组在磁盘上的物理起始位置。
  2. 数据块位图的地址(Block Bitmap): 存储块组内所有数据块的分配情况。它是一个位图,每一位代表一个数据块,0 表示空闲,1表示已分配。
  3. inode 位图的地址(Inode Bitmap): 存储块组内所有 inode 的分配情况。它同样是一个位图,每一位表示一个inode,0 表示空闲,1 表示已分配。
  4. inode 表的地址(Inode Table): 存储该块组内所有 inode 的数据结构,每个 inode
    包含一个文件的元数据。文件的创建、删除、修改等操作都与 inode 表的管理紧密相关。
  5. 块组的空闲块数(Free Block Count): 记录该块组内空闲数据块的数量。
  6. 块组的空闲 inode 数量(Free Inode Count): 记录该块组内空闲 inode 的数量。
  7. 已分配的目录项数(Used Directory Count): 记录该块组中目录 inode
    的数量,这对于管理文件系统中的目录结构非常重要。

块组描述表与超级块的关系

超级块 和 块组描述表 是密切相关的。在 ext2/3/4 文件系统中,超级块 存储文件系统的整体信息,如文件系统的总大小、块大小、inode 数量等,而 块组描述表 则存储每个块组的管理信息。超级块会包含一个指向块组描述表的指针,操作系统通过这个指针来访问并更新块组的状态。

2.3.3 块位图(Block Bitmap)

Block Bitmap中记录着Data Block中哪个数据块已经被占⽤,哪个数据块没有被占⽤。

2.3.4 inode位图(Inode Bitmap)

每个bit表⽰⼀个inode是否空闲可⽤。

2.3.5 inode表

  • 存放⽂件属性 如 ⽂件⼤⼩,所有者,最近修改时间等
  • 当前分组所有Inode属性的集合
  • inode编号以分区为单位,整体划分,不可跨分区

2.3.6 Data Block(数据块)

Data Block(数据块)是文件系统中用于存储实际文件内容的最小单位。它是文件系统中存储数据的基本结构。每个 Data Block 都包含文件的实际数据,而不仅仅是元数据(如文件的权限、所有者、修改时间等),这些元数据通常存储在 inode(索引节点)中。数据块使得文件系统能够高效地管理和存储文件内容。

思考:知道inode号的情况下,在指定分区,请解释:对⽂件进⾏增、删、查、改是在
做什么?

  1. 查(查找文件):查找inode,通过inode指针访问数据块。
  2. 增(增添数据):查找数据块(通过块位图和inode位图查找空闲的数据块),修改inode,写入数据。
  3. 删(删除文件):查找inode和数据块,释放数据块和inode,同时更改目录项。
  4. 改(修改文件):查找inode,更新数据块同时修改文件大小。

上述文件系统结构还是没看到文件名存在哪里???它存在哪里呢?下面将揭晓此答案。

2.4 目录与文件名

目录保存的内容是:文件名与inode号的映射关系。
OS会记录当前的工作路径,通过文件名与映射关系深度进行路径解析。

2.5 路径解析

路径解析 是操作系统和文件系统用来确定文件或目录在存储介质(如硬盘)上的位置的过程。路径解析的目的是从文件的路径名称中找到与其对应的 inode,并通过文件系统中的目录结构和索引节点,最终定位到实际的数据块(Data Block)。在这个过程中,操作系统需要解析给定的文件路径,找到文件的 inode 号,然后通过这个 inode 号 获取文件的元数据以及文件的存储位置。

2.5.1 路径解析与文件系统一致性

文件系统需要确保在路径解析过程中保持一致性。例如,在路径解析时,如果文件或目录被删除或移动,操作系统需要更新目录项和 inode 信息,以保持文件系统的一致性和可靠性。很多现代文件系统通过 日志记录(journaling) 或 写时复制(Copy-on-Write) 技术确保路径解析和其他文件系统操作的原子性。

总结

路径解析是操作系统查找文件或目录在文件系统中的过程。根据给定的路径(无论是绝对路径还是相对路径),操作系统逐级查找目录项并通过 inode 号 获取文件的元数据和数据块。在符号链接存在的情况下,路径解析还需要处理链接的目标路径。路径解析涉及到文件系统中的 目录项 和 inode 表,并通过它们来定位文件的实际内容。

2.6 路径缓存

访问任何文件到要从/目录开始进行路径解析吗?原则上是,实际LinuxOS会缓存历史的路径结构,存在于一个数据结构对象struct dentry,本质上是一个多叉树结构。所有文件都有dentry结构,所有被打开的文件就可以在内存中形成树形结构。

2.7 挂载分区

挂载分区是将物理磁盘分区、光盘、USB 驱动器等存储设备与操作系统的文件系统结构相连接的过程。一旦挂载,操作系统可以将该分区或设备的文件与其它文件进行交互,就像它们是计算机本地的文件一样。挂载后,文件系统中的路径可以直接访问该分区的数据。

本人理解:实际就是将需要访问的设备或数据尾插入到目录,

  • 挂载命令

在大多数 Linux 系统中,可以使用 mount 命令挂载分区。基本的挂载命令格式如下:

mount <设备文件> <挂载点>

例如,要将设备 /dev/sdb1 挂载到 /mnt/usb 目录,可以使用以下命令:

sudo mount /dev/sdb1 /mnt/usb

  • 挂载选项

mount 命令可以使用不同的选项来控制挂载过程。例如:

-t:指定文件系统类型,如 ext4、ntfs、vfat 等。例如:

sudo mount -t ext4 /dev/sdb1 /mnt/usb

-o:指定挂载选项,如只读(ro)、读写(rw)、设置文件权限等。例如:

sudo mount -o ro /dev/sdb1 /mnt/usb

-a:挂载 /etc/fstab 中列出的所有文件系统。例如:

sudo mount -a

总结:挂载分区 是将物理分区或设备连接到操作系统目录结构中的过程,使得分区上的文件和目录能够在操作系统中被访问。

  1. 使用 mount 命令可以将设备挂载到指定的目录,挂载成功后,文件系统中的路径就能访问分区数据。
  2. 可以通过 /etc/fstab 配置文件设置自动挂载,确保分区在系统启动时自动挂载。
  3. 卸载分区 使用 umount 命令,这样可以确保文件系统完整性。
  4. 通过挂载分区,操作系统能够灵活地管理不同存储设备,使得用户能够方便地访问各类存储介质上的数据。

三. 最后

本文介绍了文件系统的基本概念及其在操作系统中的重要性。文件系统通过分区、块、inode等结构管理磁盘上的数据,并提供高效的数据存储与访问方式。重点讲解了ext2 文件系统,介绍了其基本架构、块组(Block Group)的设计与作用,以及 超级块、GDT、inode 位图 和 数据块等组成部分。文件路径解析和文件名映射也被详细说明,强调了操作系统如何通过 inode号定位文件数据块。最后,介绍了如何挂载分区,使不同存储设备的数据能与文件系统结构连接,便于访问和管理。

路虽远,行则将至;事虽难,做则必成

亲爱的读者们,下一篇文章再会!!! \color{Red}亲爱的读者们,下一篇文章再会!!! 亲爱的读者们,下一篇文章再会!!!

相关文章:

【Linux篇】深入理解文件系统:从基础概念到 ext2 文件系统的应用与解析

文件系统的魔法&#xff1a;让计算机理解并存储你的数据 一. 文件系统1.1 块1.2 分区1.3 inode(索引节点) 二. ext2文件系统2.1 认识文件系统2.2 Block Group (块组)2.2.1 Block Group 的基本概念2.2.2 Block Group 的作用 2.3 块组内部结构2.3.1 超级块&#xff08;Super Bloc…...

MarkDown 输出表格的方法

MarkDown用来输出表格很简单&#xff0c;比Word手搓表格简单多了&#xff0c;而且方便修改。 MarkDown代码&#xff1a; |A|B|C|D| |:-|-:|:-:|-| |1|b|c|d| |2|b|c|d| |3|b|c|d| |4|b|c|d| |5|b|c|d|显示效果&#xff1a; ABCD1bcd2bcd3bcd4bcd5bcd A列强制左对齐&#xf…...

DOM解析XML:Java程序员的“乐高积木式“数据搭建

各位代码建筑师们&#xff01;今天我们要玩一个把XML变成内存乐高城堡的游戏——DOM解析&#xff01;和SAX那种"边看监控边破案"的刺激不同&#xff0c;DOM就像把整个乐高说明书一次性倒进大脑&#xff0c;然后慢慢拼装&#xff08;内存&#xff1a;你不要过来啊&…...

Python 数组里找出子超集

碰见一个问题&#xff0c;有一个大数组&#xff0c;如下所示&#xff1a; xx [[1, 3, 4], [3, 4, 5], [1, 2, 3, 4, 5], [6], [7, 8], [6, 7, 8]]大数组里面有好多小的数组&#xff0c;观察发现&#xff0c;小的数组其实有挺多别的小数组的子集&#xff0c;现在问题来了&…...

上层 Makefile 控制下层 Makefile ---- 第二部分(补充一些例子与细节)

1. 递归调用子目录 Makefile 通过 $(MAKE) -C 进入子目录并执行其 Makefile&#xff0c;这是最常见的分层构建方法。 示例&#xff1a;基本递归调用 目录结构&#xff1a; project/ ├── Makefile # 顶层 Makefile ├── lib/ │ ├── Makefile # 子目录…...

LeetCode算法题(Go语言实现)_44

题目 有 n 个城市&#xff0c;其中一些彼此相连&#xff0c;另一些没有相连。如果城市 a 与城市 b 直接相连&#xff0c;且城市 b 与城市 c 直接相连&#xff0c;那么城市 a 与城市 c 间接相连。 省份是一组直接或间接相连的城市&#xff0c;组内不含其他没有相连的城市。 给你…...

STM32 HAL库之USART示例代码

串口发送和接收以及回调函数都可在这个文件中查询&#xff1a;stm32f1xx_hal_uart.h 串口配置初始化代码main.c中&#xff1a;MX_USART1_UART_Init();&#xff0c;初始化 UART 高层参数&#xff08;波特率、数据位、停止位、校验、模式等&#xff09; void MX_USART1_UART_In…...

头歌educoder——数据库 第10-11章

第10章 1、 事务的&#xff08; &#xff09;特性要求事务必须被视为一个不可分割的最小工作单元 A、 原子性 B、 一致性 C、 隔离性 D、 持久性 2、 事务的&#xff08; &#xff09;特性要求一个事务在执行时&#xff0c;不会受到其他事务的影响。 A、 原子性 B、 一致性 C…...

从 Vue 到 React:深入理解 useState 的异步更新与函数式写法

目录 从 Vue 到 React&#xff1a;深入理解 useState 的异步更新与函数式写法1. Vue 的响应式回顾&#xff1a;每次赋值立即生效2. React 的状态更新是异步且批量的原因解析 3. 函数式更新&#xff1a;唯一的正确写法4. 对比 Vue vs React 状态更新5. React useState 的核心源码…...

如何实现元素随滚动平滑上升

#技术栈Vue3TypeScript# 相比大家没少见过这个的效果&#xff1a; 作为视觉效果是很不错的 同时实现也很简单&#xff0c;本质是封装一个Vue指令 1&#xff0c;创建指令文件 src / directives / vSlidenIn.ts import type { Directive } from vueconst vSlideIn: Directive …...

Nginx部署spa单页面的小bug

没部署过&#xff0c;都是给后端干的&#xff0c;自己尝试部署了一个下午终于成功了 我遇到的最大的bug是进入后只有首页正常显示 其他页面全是404&#xff0c;于是问问问才知道&#xff0c;需要这个 location / { try_files $uri $uri/ /index.html; } 让…...

关于全球化大规模混合云 Kubernetes Prometheus 监控体系标准化及 GitOps 自动化改进方案

背景 现状 某司概况&#xff1a; PaaS/SaaS 公司&#xff0c;业务面向全球&#xff0c;包括 东南亚/南亚/中东/欧洲/非洲/美洲/东亚…生产 k8s 集群数十套&#xff0c;生产非生产 >100 套(多种集群类型&#xff0c;各种公有云/专有云/私有云/数据中心…)疫情以来&#xff…...

力扣DAY51 | 热100 | 岛屿数量

前言 中等 √ 做得我元气大伤&#xff0c;超级naive方法&#xff0c;新开辟一个数组存岛屿编号&#xff0c;一个数组存岛屿上的点。 题目 给你一个由 1&#xff08;陆地&#xff09;和 0&#xff08;水&#xff09;组成的的二维网格&#xff0c;请你计算网格中岛屿的数量。 …...

二叉树的最近公共祖先二叉搜索树的最近公共祖先

1 二叉树的最近公共祖先 学习&#xff1a; 代码 class Solution:def lowestCommonAncestor(self, root: TreeNode, p: TreeNode, q: TreeNode) -> TreeNode:if root is None or root is p or root is q:return rootleft self.lowestCommonAncestor(root.left,p,q)right …...

关于 LLB 的问题

This error occurs when you’re trying to run a program or library that was compiled with GLIBC (GNU C Library) version 2.29, but your system has an older version of GLIBC installed. Solutions: 1. Upgrade your system’s GLIBC (Recommended if possible) Fo…...

kafka4.0浅尝辄止

最近工作中接触消息队列比较多&#xff0c;前几周又看到kafka4.0发布&#xff0c;故写一篇博客对消息队列做一个复盘。 目录 消息队列对比1. Apache Kafka 4.02. RabbitMQ3. RocketMQ4. ActiveMQ5. Apache Pulsar6. NSQ kafka4.0鲜明的新特性Java 版本要求升级API 更新与精简移…...

nmcli创建wpa-psk2 wifi热点

1. 创建新的WiFi连接&#xff1a; sudo nmcli connection add type wifi ifname wlan0 con-name WiFi名称 autoconnect yes ssid WiFi名称 2. 配置接入点模式和IP共享&#xff1a; sudo nmcli connection modify WiFi名称 802-11-wireless.mode ap 802-11-wireless.band …...

分布式日志治理:Log4j2自定义Appender写日志到RocketMQ

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;精通Java编…...

【STM32单片机】#8 定时器编码器接口ADC模数转换器

主要参考学习资料&#xff1a; B站江协科技 STM32入门教程-2023版 细致讲解 中文字幕 开发资料下载链接&#xff1a;https://pan.baidu.com/s/1h_UjuQKDX9IpP-U1Effbsw?pwddspb 单片机套装&#xff1a;STM32F103C8T6开发板单片机C6T6核心板 实验板最小系统板套件科协 实验&…...

dify部署,ollama部署,拉取模型,创建ai聊天应用

dify下载安装 dify1.0.1 windos安装包百度云盘地址 通过网盘分享的文件&#xff1a;dify-1.0.1.zip 链接: 百度网盘 请输入提取码 提取码: 1234 dify安装包 linux安装包百度云盘地址 通过网盘分享的文件&#xff1a;dify-1.0.1.tar.gz 链接: 百度网盘 请输入提取码 提取码…...

213、【图论】有向图的完全联通(Python)

题目描述 原题链接&#xff1a;105. 有向图的完全联通 代码实现 import collectionsn, k list(map(int, input().split())) adjacency collections.defaultdict(list) for _ in range(k):head, tail list(map(int, input().split()))adjacency[head].append(tail)visited_…...

Node.js中util模块详解

Node.js 中 util 模块全部 API 详解 一、类型检查函数 const util require(util);// 1. util.types // 检查对象类型 console.log(util.types.isDate(new Date())); // true console.log(util.types.isRegExp(/abc/)); // true console.log(util.types.isArrayBuffer(new …...

BasicTS:全面基准测试与异质性分析

BasicTS&#xff1a;全面基准测试与异质性分析 在当今数字化时代&#xff0c;多元时间序列&#xff08;Multivariate Time Series, MTS&#xff09;分析在众多领域发挥着关键作用&#xff0c;从交通管理到能源系统优化&#xff0c;都离不开对MTS的精准预测。然而&#xff0c;当…...

认识python全栈框架reflex:快速打造工具类网站、模型调用web应用

以下是对reflex的简单介绍&#xff1a; 纯Python编写的&#xff0c;高性能、可自定义的 Web 应用开发框架 网页开发内置组件生态完整&#xff0c;灵活使用、快速接入、快速部署支持路由页面&#xff0c;可以开发复杂系统、企业级系统&#xff0c;这方面优于gradio、streamlit…...

课题申报的立项依据方位指南:使用DeepSeek提高课题立项的关键

在竞争日益激烈的学术研究和科研项目申报环境中&#xff0c;立项依据作为课题申报书的灵魂部分&#xff0c;往往决定着一项研究能否获得评审专家的青睐和资助。 然而&#xff0c;许多研究者尽管学术能力突出&#xff0c;却在立项依据的撰写上显得力不从心&#xff0c;导致优质…...

蓝桥杯电子赛_E2PROM(AT24C02)

目录 一 前言 二 E2PROM的相关讲解 AT24C02的地址 PCF8591的地址 三 根据提供的iic写代码 相关可能会有疑问的地方&#xff1a; 1 三个入口参数&#xff0c;都有什么用&#xff1f; 2 为什么在写中&#xff0c;要用IIC_SendByte&#xff0c;在读中&#xff0c;要用IIC_R…...

Kubernetes服务注册到consul流程实践

文章目录 前言架构图示意一、环境准备二、consul部署1.yaml示例2.consul部署验证 三、consulctl工具实现1.核心功能2.注册到consul的标签及元数据3.consulctl工具使用示例 四、通过Dockerfile构建consulctl工具镜像五、Kubernetes集成方案六、 结果验证1.注册验证2.销毁验证 总…...

供应链业务-供应链全局观(三)- 供应链三流的集成

概述 供应链的全局观的全两篇文章主要描述了供应链的基础概念和供应链的协作和集成问题。 供应链业务-供应链全局观&#xff08;一&#xff09;定义了什么是供应链和供应链管理。 所谓供应链就是把采购进来的东西&#xff0c;通过自身的生成加工&#xff0c;进行增值服务&am…...

Docker 提示Docker Engine stopped

做AI开发的时候&#xff0c;安装Docker提示Docker Engine stopped&#xff0c;以下是解决步骤&#xff1a; 一般都是成功的&#xff0c;不成功很可能是电脑兼容问题&#xff0c;通过采用4.4.4版本解决的&#xff1a; docker desktop 4.4.4 旧版本下载&#xff1a;在这里找到了4…...

对自己的优缺点评价

在面试中回答优缺点时&#xff0c;需要既体现自我认知的客观性&#xff0c;又能将优缺点与岗位需求结合&#xff0c;避免暴露可能影响工作的硬伤。以下是一个符合Java开发者角色的回答框架&#xff0c;供参考&#xff1a; 回答思路&#xff1a; 优点&#xff1a;选择与岗位直接…...

解决eNSP在24H2版本下AR_40启动失败问题

前言 1.网络学习中缺少不了模拟&#xff0c;自从Windows版本更新24H2以后&#xff0c;eNSP就出现各种问题&#xff0c;最常见的就是AR报错40【启动失败】&#xff0c;之前我也去网站搜了&#xff0c;也问了Microsoft社区&#xff0c;发现他们在底层逻辑上进行了修改(开启了虚拟…...

计算机组成原理-指令系统

1. 指令系统的定义与作用 指令系统&#xff08;Instruction Set Architecture, ISA&#xff09;是计算机硬件与软件之间的接口规范&#xff0c;定义了CPU能够识别和执行的所有指令的集合&#xff0c;是计算机体系结构的核心组成部分。 核心作用&#xff1a; 为程序员提供操作…...

Oracle数据库中 LEVEL start with prior connect by

在Oracle数据库中&#xff0c;处理层次结构数据是一项常见且重要的任务。无论是组织结构、分类目录还是其他具有层级关系的数据&#xff0c;Oracle都提供了强大的工具来简化和优化这些操作。其中&#xff0c;LEVEL伪列结合CONNECT BY和START WITH关键字&#xff0c;成为了处理层…...

HTTP 1.1 比 HTTP1.0 多了什么?(详尽版)

相较于HTTP 1.0&#xff0c;1.1 版本增加了以上特性&#xff1a; 1. 新增了连接管理即 keepalive&#xff0c;允许持久连接。 定义&#xff1a; Keepalive允许客户端和服务器在完成一次请求-响应后&#xff0c;保持连接处于打开状态&#xff0c;以便后续请求复用同一连接&am…...

Java学习手册:Java I/O与NIO

Java I/O&#xff08;Input/Output&#xff09;和NIO&#xff08;New Input/Output&#xff09;是Java语言中用于处理输入输出操作的重要部分。它们提供了丰富的API来处理文件和网络通信。I/O是Java早期版本中引入的&#xff0c;而NIO是在Java 1.4中引入的&#xff0c;旨在提供…...

linux下的目录文件管理和基本文件管理的基本操作

目录 1.目录创建&#xff0c;文件创建和文件编辑的案例 2.文件编辑进阶 --vim 3. 命令的别名 4. 查看文件内容和文件编辑(重定向)的案例 5. 重定向之追加 6. 查看目录和文件编辑的案例 7. 查看目录和文件编辑(覆盖)的案例 为了加深对linux命令的熟悉程度&#xff0c;这…...

magnet库Hello,world!

1.c文件 #include<iostream> #include"Control.hpp" class O1:public mag::Control{bool b; public:O1(){b1;}bool decide(){return b&&islifing();}void action(){std::cout<<"Hello,world!\n";b0;destroy();} }; int main(){O1 o1;…...

应急响应靶机-Linux(1)

挑战内容 账户密码&#xff1a;defend/defend Root/defend 黑客的IP地址遗留下的三个flag 1、按正常思路来走&#xff0c;先登录一手因已经给出root账户密码&#xff0c;先查看一手执行过的命令&#xff0c;发现一个flag值并且看到他往期编辑了一个文件&#xff0c;咱们顺便进去…...

k8s 部署spring项目+动态启动pod

在 Kubernetes 中部署 Spring Boot 项目并实现 动态管理 Pod&#xff08;自动扩缩容、滚动更新等&#xff09;&#xff0c;需要结合 Docker 镜像构建、Deployment 配置、Service 暴露和 HPA&#xff08;Horizontal Pod Autoscaler&#xff09; 等组件。以下是完整操作步骤&…...

【DINO】

detr 简化了检测流水线,消除了许多手工设置的组件 单阶段目标检测 需要前置的backbone抽取特征 faster_rcnn和yolo都是基于anchor,anchor当作候选框,NMS非极大值抑制 重叠的框只保存一个,效率低 所以detr来了,transformer,既有encoder又有decoder,套一个transforme…...

Nature重磅:后晶体管时代光子芯片革新AI计算!光子处理器运行《吃豆人》性能比肩电子,能效提升超500倍

随着人工智能&#xff08;AI&#xff09;模型规模以及应用范围的不断拓展&#xff0c;性能上限和能耗瓶颈正逐渐显现出来。大语言模型&#xff08;LLM&#xff09;、强化学习和卷积神经网络等 AI 模型的复杂性不断增长&#xff0c;正在将传统电子计算推向极限&#xff0c;能源需…...

Excel表格文件分组归并——通过sql

将 Excel 表转换为 SQL 数据库并直接执行 SQL 查询以获得所需的输出。以下是使用 SQL 实现此目的的步骤&#xff1a; 第 1 步&#xff1a;将 Excel 数据导入 MySQL 假设您设置了 MySQL 数据库&#xff0c;则需要先将 Excel 数据导入到表中。您可以使用语句或工具&#xff08;…...

2.微服务拆分流程

文章目录 交易服务1.1.创建项目1.2.引入依赖1.3.创建交易服务启动类1.4.创建并编写配置文件1.5.代码连接池4.2.1.引入依赖4.2.2.开启连接池抽取Feign客户端 1.6.抽取ItemClient接口1.7.抽取CartClient接口改造OrderServiceImpl扫描包 1.8.数据库1.9.配置启动项1.10.测试 以拆分…...

vue入门:计算属性computer监听器watch

文章目录 计算属性computer定义计算属性在模板中使用计算属性计算属性的使用场景 监听器watch基本语法深度监听立即执行监听数组异步操作数据校验副作用处理清理监听器 watch 与 computed 的区别 计算属性computer 在 Vue 中&#xff0c;计算属性&#xff08;computed&#xf…...

Jenkins 发送钉钉消息

这里不介绍 Jenkins 的安装&#xff0c;可以网上找到很多安装教程&#xff0c;重点介绍如何集成钉钉消息。 需要提前准备钉钉机器人的 webhook 地址。&#xff08;网上找下&#xff0c;很多教程&#xff09; 下面开始配置钉钉机器人&#xff0c;登录 Jenkins&#xff0c;下载 …...

numpy练习

生成一个2行3列随机整数二维数组a使用Numpy方法对&#xff08;1&#xff09;中数组a进行整体求积使用Numpy方法对&#xff08;1&#xff09;中数组a进行求每列最大值索引定义一个NumPy一维数组 b&#xff0c;元素为 1 到 10 的整数获取&#xff08;4&#xff09;数组b中最后五个…...

Ethers.js 开发入门:核心功能、最佳实践与避坑指南

引言 Ethers.js 是当前 Web3 开发领域增长最快、备受开发者青睐的以太坊 JavaScript 库之一。在本篇文章中&#xff0c;我们将介绍 Ethers.js 的核心功能和用法&#xff0c;包括如何连接区块链节点、与钱包交互、读取智能合约数据、发送交易等。同时&#xff0c;我们还将分享使…...

SQL查询语句的​​书写顺序​​

一、标准SQL书写顺序&#xff08;逻辑顺序&#xff09; 书写顺序是开发者编写SQL时遵循的语法规则&#xff0c;逻辑上更贴近“声明式”需求描述。以下是​​从前往后​​的书写顺序&#xff1a; SELECT[DISTINCT] 列名或表达式 FROM表名或子查询 [JOIN ... ON ...] WHERE行级…...

探索加密期权波动率交易的系统化实践——动态对冲工具使用

Trading Volatility – What Are My Options? 在本文中&#xff0c;我们将介绍一些如何交易资产波动性&#xff08;而非资产价格&#xff09;的示例。为了帮助理解&#xff0c;我们将使用 Deribit 上提供的几种不同产品&#xff0c;包括但不限于期权。我们将尽可能消除对标的价…...

文件操作和 IO - 3

目录 文件内容的读写 —— 数据流 InputStream 概述 方法&#xff1a; 说明&#xff1a; FileInputStream 概述 read 方法&#xff1a; OutputStream 概述 方法 说明 FileOutputStream 概述 write 方法&#xff1a; Reader 字符流 Writer 字符流 总结&#xff1a…...