目录
- `🎈软硬链接`
- `🐧软链接`
- `🐬硬链接`
- `🐸总结软硬链接的原理
- `🐍软硬链接的应用场景`
- `🐉软链接应用场景`
- `🦎硬链接应用场景`
🎈软硬链接
观察软硬链接现象以及指令
命令:ln
作用:给指定文件建立软链接
🐧软链接
指令:ln -s 指定文件 软链接名称
根据下图的例子,我们可以直观上发现:
- 软链接本质上是一个
独立的文件
,有独立的inode,该文件的数据区里面存储的是指定文件所在的路径
。
示例:
🐬硬链接
指令:ln 指定文件 硬链接名称
根据下面示例的的现象可以发现:
- 硬链接本质
不是一个独立的文件
,因为它的inode编号与目标文件
一样。本质是新的文件名,和目标文件的inode编号的映射关系
!将映射关系写入到指定的目录的数据块中,并将该目录的inode属性中的引用计数++
。
我们在删除文件时干了两件事情:
- 在目录中将对应的记录删除。
- 将硬链接数-1,如果为0,则将对应的磁盘释放。
示例:
删除软硬链接文件,可以使用rm指令
删除,也可以使用指令:unlink 软硬链接文件名
。其中unlink也可删除普通文件
。二者整体区别不大。
`🐸总结软硬链接的原理
硬链接本质
:是新的文件名,和目标文件的inode编号的映射关系!将映射关系写入到指定的目录的数据块中,并将该目录的inode属性中的引用计数++。
软链接本质
:上是一个独立的文件,有独立的inode,该文件的数据区里面存储的是指定文件所在的路径。 类似windows下的快捷方式。
当我们右键点击软件图标,查看属性,我们可以发现其中的目标就是软链接文件的内容(目标文件的所在路径):
🐍软硬链接的应用场景
🐉软链接应用场景
软链接的应用场景:快捷方式
。
- 当我们的可执行程序的位置距离当前位置较深的时候,每次执行的时候都需要 ./路径 都需要加很长的路径,较麻烦,可以直接在当前位置给可执文件建立软链接,就可以直接在当前位置使用 ./软链接名 即可。
示例:
🦎硬链接应用场景
当我们新建立一个文件,文件的硬链接数为1,因为当前目录的数据块中,对应文件和文件inode的映射关系只有一个,这个很好理解,但是当我们新建立一个目录
时,硬链接数却为2
,为什么呢?
- 因为新建立的目录中,有两个隐藏的目录,分为别为
.
与..
如图:其中的.目录
的inode与empty目录的inode编号一样,对于一个inode编号,有两个文件名与之对应,所以硬链接数为2。
这里就很好解释..文件
的硬链接数为什么为3了,这里不赘诉。
所以这里可以得出结论
:一个目录下有多少个子目录,等于该目录的 硬链接数-2 得到
。
- 解释:一个空目录,默认硬链接数为2,上面已经解释了,当我们在这个目录里面每新建立一个目录,新建的目录里面都会有一个隐藏的…文件,该…文件是上级目录的一个链接硬,所以硬链接数会+1,每新建立一个都会+1,所以可以得出结论。
注意
:用户对一个文件
可以建立软硬连接
,但是目录只能建立软链接
,不能建立硬链接
(系统可以建立,其中.与…就是例子)。
- 解释:因为如果用户可以建立硬链接的话,当我们如果给/目录建立硬链接的话,当我们在查找文件的时候,会根据文件路径
前缀进行路径解析,当从/目录开始向下进行查找的时候,会发生环路问题
。如果是系统建立的硬链接,系统会避免环路问题。