
🌟 各位看官好,我是!
🌍 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查找时,会对. 和 .. 进行特殊处理.

应用场景
软链接的使用非常广泛,比较常见的便是充当快捷方式,能让用户无感知地进行软件升级.
硬链接充当的就是备份作用,并且不占大小.







