Linux:文件系统(软硬链接)

devtools/2025/2/6 20:30:21/

目录

inode

ext2文件系统

Block Group

超级块(Super Block)

GDT(Group Descriptor Table)

块位图(Block Bitmap) 

inode位图(Inode Bitmap) 

i节点表(inode Table) 

数据区(Data Blocks)

软硬链接

硬链接

软链接

软硬链接的对比

软硬链接的用途


inode

文件 = 内容 + 属性

而这个属性是存储在inode结构中的

文件的数据都存储在“块”中,在Linux系统中还需要找一块地方来存储这个文件的信息(属性),这种存储文件信息的区域叫做inode,中文名为“索引节点”

inode是保存文件属性的集合,一个文件只有一个inode

ls -l命令可以看到文件的详细属性,这些属性就是从inode中获取的

inode内有一个唯一的标识符,叫做inode号,我们可以通过ls -i命令查看inode号

文件名属性并未被纳入inode中,而是存储在当前文件所在的文件夹的数据结构中

inode的大小一般是128字节或者256字节,文件内容大小可以不同,属性大小一定相同

ext2文件系统

我们想要在硬盘上存储文件,必须先把硬盘格式化为某种格式的文件系统,才能存储文件,文件系统的目的就是组织和管理硬盘上的文件

ext2文件系统将整个分区划分为若干个同样大小的块组(Block Group),只要能管理一个分区,就能管理所有的分区,也就能管理所有的磁盘文件

Block Group

ext2文件系统会根据分区的大小划分为若干个Block Group,而每个Block Group都有着相同的结构组成

超级块(Super Block)

存放着文件系统本身的结构信息,描述着整个分区文件系统的信息。主要有block和inode的总量,未使用block和inode的数量,一个block和inode的大小,最近一次挂载的时间,最近一次写入数据的时间,最近一次检验磁盘的时间等其他文件系统的相关信息

Super Block若是被破坏,可以说整个文件系统结构就被破坏了

GDT(Group Descriptor Table)

块组描述符表,描述块组属性信息,每个块组描述符存储一个块组的描述信息。如在这个块组中从哪里开始是inode Table,从哪里开始是Data Blocks,空闲的inode和数据块还有多少个等等。块组描述符在每个块组的开头都有一份拷贝

块位图(Block Bitmap) 

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

inode位图(Inode Bitmap) 

每个bit表示一个inode是否空闲可用

i节点表(inode Table) 

存放文件属性。如文件大小,所有者,最近修改时间等

是当前分组所有inode属性的集合 

inode编号以分区为单位整体划分,不可跨分区

数据区(Data Blocks)

存放文件的内容,也就是一个个的Block

对于普通文件,文件的数据存储在数据块中

对于目录,该目录下所有的文件名和目录名存储在所在目录的数据块中

Block号按照分区划分,不可跨分区

软硬链接

硬链接

ln 被链接的文件 新文件

真正找到磁盘上文件的并不是文件名,而是inode

Linux中可以让多个文件名对应于同一个inode

test1和test2的链接状态完全相同,他们被称为指向文件的硬链接,从上图可以看出它们的inode是相同的,2表示的是inode526302的链接数为2,若是删除其一,则链接数-1

软链接

ln -s 被链接的文件 新文件

软链接是通过名字引用另外一个文件

但实际上,新引用的文件和被引用的文件inode不同

软硬链接的对比

软链接是独立的文件

硬链接只是文件名和目标文件inode的映射关系

软硬链接的用途

硬链接:

  • 目录中的 . .. 就是硬链接
  • 文件备份

软链接:

  • 快捷方式


http://www.ppmy.cn/devtools/156611.html

相关文章

第五章 Linux网络编程基础API

在网络编程中,“网络字节序”(Network Byte Order)指的是一种统一的字节排列方式,即大端字节序(Big-Endian),用于在网络上传输数据。这样做的目的是确保不同主机之间(可能采用不同的…

剑指offer 字符串 持续更新中...

文章目录 1. 替换空格1.1 题目描述1.2 从前向后替换空格1.3 从后向前替换空格 持续更新中… 1. 替换空格 替换空格 1.1 题目描述 题目描述:将一个字符串s中的每个空格替换成“%20”。 示例: 输入:"We Are Happy" 返回&#xf…

STM32使用VScode开发

文章目录 Makefile形式创建项目新建stm项目下载stm32cubemx新建项目IED makefile保存到本地arm gcc是编译的工具链G++配置编译Cmake +vscode +MSYS2方式bilibiliMSYS2 统一环境配置mingw32-make -> makewindows环境变量Cmake CmakeListnijia 编译输出elfCMAKE_GENERATOR查询…

入行FPGA设计工程师需要提前学习哪些内容?

FPGA作为一种灵活可编程的硬件平台,广泛应用于嵌入式系统、通信、数据处理等领域。很多人选择转行FPGA设计工程师,但对于新手来说,可能在学习过程中会遇到一些迷茫和困惑。为了帮助大家更好地准备,本文将详细介绍入行FPGA设计工程…

生成式AI安全最佳实践 - 抵御OWASP Top 10攻击 (下)

今天小李哥将开启全新的技术分享系列,为大家介绍生成式AI的安全解决方案设计方法和最佳实践。近年来生成式 AI 安全市场正迅速发展。据IDC预测,到2025年全球 AI 安全解决方案市场规模将突破200亿美元,年复合增长率超过30%,而Gartn…

python 使用Whisper模型进行语音翻译

目录 一、Whisper 是什么? 二、Whisper 的基本命令行用法 三、代码实践 四、是否保留Token标记 五、翻译长度问题 六、性能分析 一、Whisper 是什么? Whisper 是由 OpenAI 开源的一个自动语音识别(Automatic Speech Recognition, ASR)系统。它的主要特点是: 多语言…

Resnet 改进:尝试在不同位置加入Transform模块

目录 1. TransformerBlock 2. resnet 3. 替换部分卷积层 4. 在特定位置插入Transformer模块 5. 使用Transformer全局特征提取器 6. 其他 Tips:融入模块后的网络经过测试,可以直接使用,设置好输入和输出的图片维度即可 1. TransformerBlock TransformerBlock是Transfo…

Mybatis之常用动态Sql语句

数据库结构、实体类 public class Youth {private Integer id;private String username;private Date birthday;private Character sex;private String address;private Integer age;public Youth(Integer id, String username, Date birthday, Character sex, String address)…