Linux——文件系统

📘北尘_个人主页
🌎个人专栏 :《Linux操作系统》《经典算法试题 》《C++》 《数据结构与算法》

☀️走在路上,不忘来时的初心

文章目录


一、理解文件系统

1、ls与stat

我们使用ls -l的时候看到的除了看到文件名,还看到了文件元数据。

每行包含7列:

  1. 模式
  2. 硬链接数
  3. 文件所有者
  4. 大小
  5. 最后修改时间
  6. 文件名

ls -l读取存储在磁盘上的文件信息,然后显示出来

其实这个信息除了通过这种方式来读取,还有一个stat命令能够看到更多信息

2、inode

为了能解释清楚inode我们先简单了解一下文件系统

Linux ext2文件系统,上图为磁盘文件系统图(内核内存映像肯定有所不同),磁盘是典型的块设备,硬盘分区被

划分为一个个的block。一个block的大小是由格式化的时候确定的,并且不可以更改。例如mke2fs的-b选项可以设定block大小为1024、2048或4096字节。而上图中启动块(Boot Block)的大小是确定的。

  1. 超级块(Super Block):存放文件系统本身的结构信息。记录的信息主要有:bolck 和 inode的总量,
    未使用的block和inode的数量,一个block和inode的大小,最近一次挂载的时间,最近一次写入数据的
    时间,最近一次检验磁盘的时间等其他文件系统的相关信息。Super Block的信息被破坏,可以说整个
    文件系统结构就被破坏了
  2. GDT,Group Descriptor Table:块组描述符,描述块组属性信息
  3. 块位图(Block Bitmap):Block Bitmap中记录着Data Block中哪个数据块已经被占用,哪个数据块没
    有被占用
  4. inode位图(inode Bitmap):每个bit表示一个inode是否空闲可用。
  5. i节点表:存放文件属性 如 文件大小,所有者,最近修改时间等
  6. 数据区:存放文件内容

二、创建文件的步骤

  1. 存储属性
    内核先找到一个空闲的i节点(这里是263466)。内核把文件信息记录到其中。
  2. 存储数据
    该文件需要存储在三个磁盘块,内核找到了三个空闲块:300,500,800。将内核缓冲区的第一块数据复制到300,下一块复制到500,以此类推。
  3. 记录分配情况
    文件内容按顺序300,500,800存放。内核在inode上的磁盘分布区记录了上述块列表。
  4. 添加文件名到目录
    新的文件名abc。linux如何在当前的目录中记录这个文件?内核将入口(263466,abc)添加到目录文件。文件名和inode之间的对应关系将文件名和文件的内容及属性连接起来。

三、理解软硬链接

1、硬链接

我们看到,真正找到磁盘上文件的并不是文件名,而是inode。 其实在linux中可以让多个文件名对应于同一个

inode。

abc和def的链接状态完全相同,他们被称为指向文件的硬链接。内核记录了这个连接数,inode

263466 的硬连接数为2。

我们在删除文件时干了两件事情:1.在目录中将对应的记录删除,2.将硬连接数-1,如果为0,则将对应

的磁盘释放。

2、软链接

3、软硬链接的区别

  1. 软链接相当于快捷方式,硬链接则是文件名和Inode的映射。
  2. 软链接形成的是一个独立的文件,文件的内容是对应文件的路径,硬链接则是同一个文件,文件名和Inode的映射。
  3. 软链接的引用计数不会改变,硬链接则会改变。

相关推荐
小吴编程之路7 分钟前
MySQL 索引核心特性深度解析:从底层原理到实操应用
数据库·mysql
hy____12312 分钟前
Linux_网络编程套接字
linux·运维·网络
~莫子17 分钟前
MySQL集群技术
数据库·mysql
凤山老林27 分钟前
SpringBoot 使用 H2 文本数据库构建轻量级应用
java·数据库·spring boot·后端
若风的雨35 分钟前
【deepseek】 Linux 调度延时分析
linux
就不掉头发36 分钟前
Linux与数据库进阶
数据库
与衫38 分钟前
Gudu SQL Omni 技术深度解析
数据库·sql
咖啡の猫1 小时前
Redis桌面客户端
数据库·redis·缓存
oradh1 小时前
Oracle 11g数据库软件和数据库静默安装
数据库·oracle
2301_803554521 小时前
linux 以及 c++编程里对于进程,线程的操作
linux·运维·c++