0%

硬链接与软链接

一、读取文件流程

第7章:Linux磁盘与文件系统管理(1):“目录”
每个文件都会占用一个 inode ,文件内容(block)由 inode 的记录来指向;
想要读取该文件,必须要经过目录记录的文件名来指向到正确的 inode 号码才能读取。
也就是说,其实文件名只与目录有关,但是文件内容则与 inode 有关(所以新增/删除/更改文件名与目录的w权限有关)

二、硬链接

在Linux系统中,多个文件名指向同一索引节点(Inode)是正常且允许的。一般这种链接就称为硬链接。

1582639030(1)

文件名和inode是放在目录的block中的。当创建一个文件时,就会创建一个硬链接指向inode。
硬链接只是在某个目录下的block多写一个关联数据而已,并没有增加inode也不会耗用block数量(文件的inode始终不变)。【可以理解为目录下的一个特殊文件】
硬链接只能在同一文件系统中的文件之间进行链接,不能对目录进行创建。

硬链接的作用之一
允许一个文件拥有多个有效路径名,这样用户就可以建立硬链接到重要的文件,以防止“误删”源数据(很多硬件,如netapp存储中的快照功能就应用了这个原理,增加一个快照就多了一个硬链接》。不过

文件建立了硬链接就会防止数据误删原理?
文件系统的原理是,只要文件的索引节点还有一个以上的链接(仅删除了该文件的指向),只删除其中一个链接并不影响索引节点本身和其他的链接(数据的实体并未删除),只有当最后一个链接被删除后,此时如果有新数据要存储到磁盘上,被删除的文件的数据块及目录的链接才会被释放,空间被新数据暂用覆盖。(简单来讲,inode中存在连接计数器,删除一个硬链接相当于计数器减一,反之加一。直到为0,删除inode)

三、软连接

软链接(也叫符号链接),类似于windows系统中的快捷方式,与硬链接不同,软链接就是一个普通文件,只是数据块内容有点特殊,文件用户数据块中存放的内容是另一文件的路径名的指向,通过这个方式可以快速定位到软连接所指向的源文件实体。软链接可对文件或目录创建。
1582639109(1)
为什么上表中链接档大小为12byte?
为箭头(–>)右边的档名『/etc/crontab』总共有 12 个英文,每个英文占用 1 个 byes ,所以文件大小就是 12bytes了!

链接档读取文件过程
由 1 号 inode 读取到连结档的内容仅有档名,根据档名链接到正确的目录去取得目标文件的 inode , 最终就能够读取到正确的数据了。你可以发现的是,如果目标文件(/etc/crontab)被删除了,那么整个环节就会无法继续进行下去, 所以就会发生无法透过连结档读取的问题了!

这里还是得特别留意,这个 Symbolic Link 与 Windows 的快捷方式可以给他划上等号,由 Symbolic link 所创建的文件为一个独立的新的文件,所以会占用掉 inode 与 block 喔!

软链接和硬链接区别

软链接,以路径的形式存在。类似于Windows操作系统中的快捷方式
软链接可以 跨文件系统 ,硬链接不可以
软链接可以对一个不存在的文件名进行链接,硬链接不可以
软链接可以对目录进行链接