• Linux篇12文件系统inode和软硬链接


    1.理解文件系统&&inode

    image-20220704182758688

    当我们使用ls-i指令查看文件信息时,会发现文件名前面有一个数字,这个数字是inode。我们也可以使用stat指令查看文件的详细信息,如下

    image-20220704183735430

    为了讲清楚inode,我们从磁盘开始说起

    image-20220704190904261

    文件 = 属性+内容。属性和内容在磁盘上是分开保存的。如上图所示,我们在创建一个文件的时候,过程是这样的:

    • 遍历inode bitmap,找到一个空的位置。比如第三位是空的,那么我们就将文件属性保存到inode table 中的第三个inode里面。
    • struct inode里面有一个数组,记录了文件内容需要存储到几个数据块。比如该文件内容需要存储到3个数据块,那么遍历Block bitmap,找到3个空的数据块比如1,5,7。那么就将文件内容存到这三个磁盘块上面。并且将1,5,7放进数组int block[]里面
    • 添加文件名到目录

    删除一个文件的时候,只要根据inode将对应的inode bitmap和Block Bitmap置为0,不需要管数据块上面的内容,所以删除很快,写入较慢

    我们知道,Linux下一切皆文件,目录也可以看做一个文件。那么我们再来理解一下创建目录的过程。既然目录也是文件,那么他就一定也有属性和内容。创建方式同上

    • 目录的内容放的是文件名和对应文件的inode号。由此我们知道文件名不在inode里面,而是放在所处目录的文件内容里面。

    2.软硬链接

    image-20220704193952645

    上图中的数字就是硬链接数。当我们创建一个空目录发现硬链接数是2,创建一个文件硬链接数是1。这是由于当我们进入dir1,会有一个“.”指的是当前目录。可以说这个".“是dir1的别名,而如果我们在dir1里面再创建一个dir2之后我们发现dir1的硬链接数变为2,这是因为我们进入dir2,之后有一个”…",他也是dir1的别名。并且他们三个的inode号是相同的,本质上没有创建新文件。所有当我们看到一个目录的硬链接数n,就可以知道该目录里面有(n-2)个子目录。所以我们在删除硬链接文件的时候,硬链接数–,当硬链接数为0时才删除数据块中保存的内容

    创建软连接方法如下

    image-20220704195449708

    image-20220704195501682

    创建之后我们发现他们两个的inode号不一样,所以软链接出来的文件与原文件是不同的文件,是一个独立的文件。该文件的内容是test.c的路径,这就像我们Windows下的快捷方式

    创建硬链接方法如下

    st.c的路径,这就像我们Windows下的快捷方式

    创建硬链接方法如下

    image-20220704200010899

  • 相关阅读:
    基于微信小程序的图书馆选座系统源码
    redis的启动方式
    IDEA使用技巧(常用设置、快捷键等)
    京东滑块验证逆向分析与算法还原
    夏季预防声带息肉的方法有哪些?
    在ABP VNext框架中处理和用户相关的多对多的关系
    这个锂电池保护方案来自TIDA-010030
    【TypeScript】函数类型:返回值类型和参数类型到底如何定义?
    Pytest如何执行txt格式的文本测试
    优优嗨聚集团:餐饮发展与房地产的关联:一种强效应的探索
  • 原文地址:https://blog.csdn.net/btzxlin/article/details/125607741