目录
软硬链接
ln指令
可以将一个文件或目录链接到另一个位置
ln + 要链接的文件 + 生成的链接(硬链接/软链接)
软链接
创建软链接
给ln指令加上 -s 选项,就可以生成一个软链接
示例
介绍
- 它创建了一个指向目标文件或目录的符号链接,在文件系统中以一个特殊的文件存在,生成的软链接有自己的inode -> 是一个独立的文件
- 可以使用软链接的名字来执行原程序(可以理解为 -- 它的内容是链接文件的路径)
- 软链接类似于Windows系统中的快捷方式
删除
删除源文件
- 当删除软链接所指向的原始文件时,软链接仍然存在,但指向的目标文件不再存在
- 此时,软链接被称为空链接或悬空链接(dangling link)
- 使用空链接将无法找到目标文件
删除软链接
rm
链接普通文件
对源文件无影响
链接目录
直接rm,删除的是软链接本身,对目录中的文件和目录无影响
若在文件名后加 / ,则会将指向的目录下的所有文件删掉
unlink
可以看到,unlink可以删除软链接,也可以删除源文件
- 它是用于删除文件的命令行工具
- 可以删除文件系统中的文件,包括常规文件、符号链接和设备文件等,但不能删除目录
- 所以unlink可以防止我们误删目录中的文件
硬链接
创建硬链接
介绍
ln指令不加-s选项,即可生成硬链接
只能链接普通文件
示例
可以看到,硬链接的inode和链接文件的inode一样
说明它没有独立的inode -> 所以,硬链接不是一个独立的文件
不能链接目录:
介绍
- 硬链接是指多个文件入口指向相同的数据块
创建硬链接的图示
可以将创建硬链接的过程,看成上图
- 它只是在当前的目录文件中,添加了自己的文件名和链接文件的inode的映射
删除
删除源文件
- 并不会影响硬链接的使用
- 说明这里删除文件的时候,仅仅是将code和对应inode编号的映射去掉了而已,并没有删掉inode
- 并且!!!
- 删前和删后,有一列数字,hard从2变为了1
- 那列数字代表的实际上是该文件的硬链接数
硬链接数
为了统计有多少个文件名与该数据块相关联,inode结构内会有一个变量来计数,也就是硬链接数
删除源文件后,硬链接还能用的原因
- 删除文件是将对应inode中的计数-1
- 当该值为0时,才会真正删除这个文件,释放相关的数据块和inode
- 因为没有文件名和它关联了,说明用户已经用不到它了
普通文件
被创建出来后,这个数字是1(原始文件本身即是一个链接)
为该文件创建硬链接后,该数字将根据创建的硬链接数量而增加
目录文件
引入
我们可以看到,创建的d1目录文件,硬链接数是2,为什么?
- 其中一个肯定是它自己
- 那另一个硬链接是谁?
隐藏文件
在每个目录内,都会有两个隐藏文件(实际上,他们都是文件名)
.
- . 代表该目录的文件名
- 可以看到 ,. 和 d1 的inode是一样的,所以 . 就是该目录文件的另一个硬链接
..
当我们在d1中再创建一个目录时,会发现d1的硬链接数变成了3?
- 是因为新目录下的..导致的
- 而..可以帮我们回到上级目录
- 原因就在于 : 它是上级目录文件的硬链接
软硬链接的区别
介绍
应用场景