美文网首页
软连接和硬连接引出的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目录系统的猜想

    说到这个链接,就需要从整个linux文件系统来说了 everything is file 这个是linux的一个重...

  • ln -s 软链接

    linux 创建连接命令 ln -s 软链接linux-ln -s(链接)、mount(挂载 软连接和硬连接 硬链...

  • 【LINUX】

    1. 硬链接和软连接区别 硬连接-------指通过索引节点来进行连接。在Linux的文件系统中,保存在磁盘分区...

  • 2018-03-20课后总结

    今天学习了Linux系统的直接路径、间接路径,软连接和硬连接,文件的创建、删除、压缩和解压等。

  • Linux-硬连接不能用于目录的原因

    上文介绍了Linux中的硬连接和软连接。留下了一个问题:硬连接为什么不能用于目录?今天来详细探讨一下。ln.png...

  • linux基础知识点

    硬链接和软连接 硬链接Inode相同的文件互为硬链接文件不能跨文件系统不能对目录创建hardlink.png 软连...

  • 实验二【2021OS】

    实验二:Linux文件管理及目录与权限控制 创建/复制/移动/删除/查看文件和目录命令。文件压缩,解压。软连接和硬...

  • linux下软连接和硬连接的区别

    这几天看操作系统的文件系统,看到关于文件连接的问题.文件连接分为两种,软连接和硬连接,其中软连接就是我们通常说的符...

  • Linux链接文件与查看或者合并文件内容

    04-建立链接文件:ln Linux链接文件类似于Windows下的快捷方式。链接文件分为软连接和硬链接。软连接:...

  • 硬连接和软连接

    硬链接:通过索引节点(inode)来进行链接(创建了一个新的Directory项,但是不占用空间);特点: 一个文...

网友评论

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

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