• 【Linux】文件系统


    磁盘及文件系统

    在这里插入图片描述

    文件的增删查改

    重新认识目录

    目录是文件嘛? 是的。
    目录有iNode嘛? 有
    目录有内容嘛? 有

    任何一个文件,一定在一个目录内部,所以一个目录的内容是什么?
    需要数据块,目录的数据库里面保存的是该目录下 文件名和文件inode编号对应的映射关系

    文件查找

    当我们访问一个文件的时候,在某个特定的目录下 要访问的文件 例:log.txt
    ① 先在当前目录下,找到log.txt的inode编号
    ② 一个目录也是一个文件,也属于一个特定的分区。在该分区中找到分组,在分组的inode table中,找到文件的inode
    ③通过inode和对应datablock的映射关系,找到该文件的数据块,并加载到OS,并完成显示到显示器。

    文件删除

    删除一个文件 例:log.txt
    ①先找到该文件的inode。
    ②通过inode映射关系,将block bitmap对应的比特位,置0。
    ③通过inode映射关系,将inode bitmap对应的比特位,置0。
    在进行文件删除的时候,只需修改位图中对应的比特位,不需要对数据块进行操作。

    创建文件

    创建一个文件 例:log.txt
    ①创建一个文件时,一定处于一个特定的目录下,通过目录所属分区,找到对应分组。
    ②在inode bitmap中找到可以使用的位置,定义新的inode。
    ③计算出这个文件所要占用的数据块,在block bitmap中找到能够使用的数据块。
    ④将找到可以使用的数据块填入inode中blocks_arr数组中(映射关系)。

    软硬连接

    Linux 链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link)。默认情况下,ln 命令产生硬链接。

    硬连接
    硬连接指通过索引节点来进行连接。在 Linux 的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(Inode Index)。在 Linux 中,多个文件名指向同一索引节点是存在的。比如:A 是 B 的硬链接(A 和 B 都是文件名),则 A 的目录项中的 inode 节点号与 B 的目录项中的 inode 节点号相同,即一个 inode 节点对应两个不同的文件名,两个文件名指向同一个文件,A 和 B 对文件系统来说是完全平等的。删除其中任何一个都不会影响另外一个的访问。
    硬连接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬连接到重要文件,以防止“误删”的功能。 其原因如上所述,因为对应该目录的索引节点有一个以上的连接。只删除一个连接并不影响索引节点本身和其它的连接,只有当最后一个连接被删除后,文件的数据块及目录的连接才会被释放。也就是说,文件真正删除的条件是与之相关的所有硬连接文件均被删除。
    在这里插入图片描述
    硬连接出来新文件使用原文件相同的inode number 说明他们公用一个inode结构体。

    struct inode
    {
      //…
      int ref; //ref表示有几个硬连接
      //…
    }

    共用一个inode结构体说明他们的属性和内容是共享的,改变其中一个另一个也会改变,验证一下。
    在这里插入图片描述

    文件的硬连接数
    在这里插入图片描述

    思考为什么刚创建出来的普通问价硬连接是1,而目录文件是2?为什么目录文件不是1?
    在这里插入图片描述
    在这里插入图片描述
    原因:因为新创建的目录文件中会有隐藏的两个文件,一个 . 文件,表示当前目录。一个 … 文件,表示上一级目录,我们可以看到, .文件和该目录文件inode number相同,说明 .文件也是该目录文件的硬连接。
    结论,我们在创建目录文件的时候,会在目录文件中创建两个隐藏文件,一个.文件,一个. .文件。.文件为当前目录文件的硬连接,供用户使用。
    用户自己不可以创建目录文件的硬连接,操作系统不允许!!!

    软连接
    另外一种连接称之为符号连接(Symbolic Link),也叫软连接。软链接文件有类似于 Windows 的快捷方式。 它实际上是一个特殊的文件。在符号连接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息。比如:A 是 B 的软链接(A 和 B 都是文件名),A 的目录项中的 inode 节点号与 B 的目录项中的 inode 节点号不相同,A 和 B 指向的是两个不同的 inode,继而指向两块不同的数据块。但是 A 的数据块中存放的只是 B 的路径名(可以根据这个找到 B 的目录项)。A 和 B 之间是“主从”关系,如果 B 被删除了,A 仍然存在(因为两个是不同的文件),但指向的是一个无效的链接。
    在这里插入图片描述
    可以看到软连接出来的文件拥有一个新的inode number,说明他们不是公用一个indode 结构体。也会有自己的inode tables、inode bitmap、block bitmap等。
    不过文件的内容中存储的是原来文件的路径名,和windows的快捷方式同理。

    如果删除原来的文件,那么创建出来的软连接文件不可被继续使用
    在这里插入图片描述

  • 相关阅读:
    【语音识别】动态时间规整算法(RTW)语音识别系统【含GUI Matlab源码 341期】
    Web3 | DID赛道之 Galxe(原 Project Galaxy)
    使用scala语言编写代码,一键把hive中的DDLsql转化成MySql中的DDLsql
    objList=strList为什么报错
    C++map容器
    Spring Cache使用Redis自定义缓存key
    罗克韦尔AB PLC 通过KEPServer实现与西门子1200PLC的以太网通信
    【java】Spring 自己模拟 Spring 实现 IOC依赖注入 并且 解决 循环依赖
    基于51单片机的音乐盒播放器proteus仿真
    利用可视化结果,点击出现对应的句子
  • 原文地址:https://blog.csdn.net/Tianzhenchuan/article/details/132620831