美文网首页
软连接和硬连接引出的linux目录系统的猜想

软连接和硬连接引出的linux目录系统的猜想

作者: 踏歌行_161c | 来源:发表于2018-12-08 13:51 被阅读0次

    说到这个链接,就需要从整个linux文件系统来说了

    everything is file

    这个是linux的一个重要理念

    也就是说所有的东西都是文件,包括键盘,显示器,硬盘,等等,都被抽象为一个文件

    文件一共分为这几类

    - 普通文件-

    - 目录文件d

    - 软连接l

    - 快文件b

    - 字符文件c

    文件是怎么存储的?操作系统的设计者应该怎么设计文件存储呢?

    试想一下,一个文件需要有很多信息来表示,文件名,文件信息,文件作者,文件内容

    如果都放到一起,可以吗?

    可以是可以,但是效率很低,查找的话,会很麻烦

    这就有点像图书馆,其实我只需要知道isbn号码就可以确定书籍了,同样道理

    操作系统将文件分为两块

    用户数据(user data,用户数据)和元数据(meta data,存放inode,修改时间,大小等信息,但是没有文件名)

    元数据和用户数据不是放到一起的,分开存放

    meta data需要注意,里面有一个重要的字段 inode,是文件的唯一编号,就相当于身份证,是确定文件的唯一标识,

    但是meta data里面没有存放文件名,为什么?文件名放到哪里了?

    因为文件名是给人类看的,不是给计算机看的,用户只需要操作的就是文件名

    所以,我只需要新建一个文件,将所有的文件名集中在一起,就可以实现快速搜索,快速定位等功能了,效率最高

    这个文件就是目录,在linux中,一切都是文件,而目录也是文件

    目录文件里面存放的就是一张表,每一项就是文件名和inode的对应关系

    这样,`ls`命令就只需要在这个文件中搜索就可以了,效率最高

    如果需要其他而外的信息,那么只需要按照inode找到对应的meta data文件就可以了

    如果要修改文件,按照inode找到对应的user data区块即可

    综上,linux系统,文件系统是分为三个层次的

    - 1、目录文件

    - 2、meta data

    - 3、user data

    频率使用最高的就是第一层,越往下约低,很完美

    我们试着分析一下常见的命令的执行流程

    ```

    ls test

    ```

    打开test这个目录文件,直接输出所有的文件名即可

    ```

    ll test

    ```

    ll是要列出文件的详细信息,所以只查找目录文件是不够的,还需要查看对应的文件的meta data文件

    ```

    vim test/a.txt;//假设该文件存在

    ```

    这个就比较麻烦

    - 1、找到对应的目录文件

    - 2、在该文件中找到文件名对应的inode

    - 3、跟据inode找到对应的user data块

    再说链接

    链接其实就是按照上面所说的文件系统的规则上建立起来的

    硬连接到底有什么用处?为什么要有链接,直接使用源文件不好吗?

    不好,如果直接给源文件,有这样几个问题

    - 存储空间极大浪费

    - 权限无法控制

    为了解决这几个问题,linux使用了链接,分为两种:

    软连接

    软连接本质就是创建一个新的文件,这里说的新的文件的定义是创建了一个新的inode号,因为在linux中,inode是文件的唯一标示,meta data里面随意写,user data部分仅仅是一个源文件的指向而已,所以存储空间问题得到解决,并且权限问题也好限制

    好处:

    - 占用空间小

    - 可以指向其他硬盘的文件,这个功能原来的系统无法提供

    缺点:

    - 如果源文件被删除了,那么软连接也就没用了,有风险

    硬连接

    硬连接的玩法就和软连接不同了

    硬连接的本质其实就是在对应的目录文件下面添加了一项,对应的inode就是源文件了,并且将inode引用数量加上一个即可

    好处:

    - 安全

    - 省空间

    缺点

    - 不能指向其他的硬盘

    说到安全,就需要说一下删除了

    ```

    rm -rf a.txt

    ```

    执行这个命令的时候,需要

    - 修改目录文件,将对应项删除掉

    - 更新meta data中的inode引用次数,如果是0 的话,就删除掉meta data文件

    没有meta data文件,也就相当于没有了文件

    这样可以看到 新建一个硬连接好处其实很多

    使用很小的代价,就可以创建出一个备份,因为只有是引用数是0才会删除文件

    windows系统中为什么要舍弃硬连接呢?

    很简单,硬连接虽好,但是用途太单一了,备份一个数据,直接拷贝一份放到其他地方这更符合人们的习惯

    并且,如果用户不想要一个文件了,删除掉了,但是后来发现还有一个硬连接,这个就不符合用户的意愿了

    并且 因为是inode是一个硬盘分的,不能指向其他硬盘,有局限,所以使用也就很少了

    # 参考链接

    - [https://my.oschina.net/michaelyuanyuan/blog/109147](https://my.oschina.net/michaelyuanyuan/blog/109147)

    - [http://www.ruanyifeng.com/blog/2011/12/inode.html](http://www.ruanyifeng.com/blog/2011/12/inode.html)

    - [https://www.ibm.com/developerworks/cn/linux/l-cn-hardandsymb-links/index.html](https://www.ibm.com/developerworks/cn/linux/l-cn-hardandsymb-links/index.html)

    相关文章

      网友评论

          本文标题:软连接和硬连接引出的linux目录系统的猜想

          本文链接:https://www.haomeiwen.com/subject/hiqymxtx.html