【linux仓库】硬链接 vs 软链接:程序员必须掌握的文件系统核心知识!

🌟 各位看官好,我是

🌍 Linux == Linux is not Unix !

🚀 今天来学习Linux的软硬链接相关知识。

👍 如果觉得这篇文章有帮助,欢迎您一键三连,分享给更多人哦!

目录

书接上文

软链接和硬链接

区别与原理

应用场景


书接上文

理解了文件系统的基础架构后,我们注意到inode作为文件实体的唯一标识,在Linux中扮演着核心角色。正是基于inode的机制,Linux实现了两种特殊的文件关联方式——软链接与硬链接。这两种链接虽然都能实现'一个文件多个入口'的效果,但其底层实现却有着本质差异:硬链接直接共享inode实现文件分身,而软链接则是通过独立的inode指向目标路径。接下来,让我们深入剖析这两种链接在文件系统中的具体行为...

软链接和硬链接

如何建立软连接呢?

ln [-s] target link

软链接是通过名字引用另外⼀个文件,相当于Windows上的快捷方式。

那么软链接的文件和被链接的文件的inode是否一样呢?软链接的意义是什么?留在下面对比

如何建立硬链接你?

ln target link 

可以看见硬链接的文件redir-hard和test的文件大小是一样的,相当于test的备份..那么二者的区别是什么呢?

区别与原理

可以看见软链接的文件redir-soft和test的inode是不一样的,且文件大小很小.而硬链接文件redir-hard和test的inode是一样的,但是文件大小是一样的.

软连接是一个独立的文件,因为它有独立的inode.既然是一个独立的文件,文件 = 属性 + 内容,属性有独立的inode,那么内容存的是什么呢?软连接指向的文件的路径字符串.

硬连接不是一个独立的文件,因为它没有独立的inode.那么是什么呢?

本质是在指定目录下,建立新的文件名和目标inode的映射关系,并没有在系统层面创建新的文件.我们可以发现test会由1变为2,什么意思呢?并且硬链接是链接文件的备份,那和cp有什么区别呢?我直接用cp不香吗?

一个inode可以被几个文件名(目录项)引用,那么数字就是几.那么,这是否意味着文件实际上在底层用了引用计数的方法.实际上底层就是这样使用的,每增加一个硬链接,链接数+1;删除一个,链接数-1。只有当链接数变为0时,inode才会被真正释放,文件数据才会被删除。而对于cp是拷贝其内容,是一个独立的文件,即有自己的inode,有自己的文件大小,并不会影响被拷贝文件的硬链接数.

那么,硬链接一个文件是否会多占空间呢?并不会,硬链接只是改变硬链接数,都指向同一个inode,底层的数据块只有一份,文件内容只存储一份。

在这里,我们也可以回答之前存在的问题:

为什么新建目录的硬链接是为2呢?

为什么新建目录后的上级目录会由2变为3呢?

注意:可以给目录/普通文件设置软连接.但硬连接,用户层面不允许对目录设置硬连接!为什么呢?

假设find查找note29目录的某个文件,而note29硬链接home目录,当打开note29时,又通过note29回到home目录,从而导致无限循环下去,无法终止,形成路径回环问题.

那为什么OS允许 . .. 两个文件 硬链接 目录 啊?这两个是做了特殊处理的,当find查找时,会对. 和 .. 进行特殊处理.

应用场景

软链接的使用非常广泛,比较常见的便是充当快捷方式,能让用户无感知地进行软件升级.

硬链接充当的就是备份作用,并且不占大小.

评论 72
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值