Linux是通过link
的数量来控制文件删除的,只有当一个文件不存在任何link
的时候,这个文件才会被物理的删除。那么这个link
是什么呢?就需要了解软连接和硬链接。
Linux具有为一个文件起多个名字的功能,称为链接。被链接的文件可以存放在相同的目录下,但是必须有不同的文件名,而不用在硬盘上为同样的数据重复备份。被链接的文件如果拥有相同的文件名,那么必须存放在不同的目录下。
Linux中每个文件存在两个计数器:
i_count
和i_nlink
,即引用计数和硬链接计数。通过命令ls -l
可以看到文件的硬链接数i_nlink
。
通过下面的原理图,我们先来大体了解下。
上图中的inode
叫做索引节点号,这是Linux文件系统管理文件的方式,相当于文件的地址。每个文件都与一个inode
相关联,该inode
由整数标识。inode
存储有关文件和目录的信息,例如:文件所有权、访问模式(读取、写入,执行)和文件类型。在许多类型的文件系统实现中,最大数量的inode
在创建文件系统时是固定的,这限制了文件系统可以容纳的最大文件数。你可以通过命令$ls -i
来查看文件的inode
编号。从图中可以看出:不同的硬链接文件,拥有相同的inode值。而不同软链接文件,拥有不同的inode
值。
block
叫做文件数据块,不同的链接文件,里面存放的内容不同。软链接的block
中存放的内容是对源文件的路径名的指向,而硬链接中存放的是源文件的内容。
硬链接
创建方式
ln
命令,默认的连接类型是硬链接。$ ln 源文件 硬链接文件
。
作用
如果删除硬链接对应的源文件,则硬链接文件仍然存在,而且保存了原有的内容,这样可以起到防止因为误操作而删除文件的作用。
划重点
- 删除硬链接文件或者删除源文件任意之一,文件实体并未被删除;
- 只有删除了源文件及所有对应的硬链接文件,文件实体才会被删除;
- 对于目录,不可以创建硬链接,但可以创建软链接;
- 不同的文件系统之间不能做硬链接,也就是说链接文件和被链接文件必须位于同一个文件系统中;
rm
会删除链接数。
软链接
创建方式
和硬链接创建时的命令相同,只是多了一个参数-s
,例如:$ ln -s 源文件 硬链接文件
。
作用
- 方便管理,可以把一个复杂路径下的文件链接到一个简单路径下方便用户访问;
- 解决文件系统磁盘空间不足的情况。
划重点
- 删除源文件,只是删除了数据,不会删除链接。一旦以同样的文件名创建源文件,链接将继续指向该文件的新数据;
- 在目录长列表中,符号链接作为一种特殊的文件类型显示出来,其第一个字母时
l
; - 符号链接文件的大小是其来凝结文件的路径名中的字节数;
rm
会删除链接数。
示例
[benben@localhost test]$ ll
total 8
-rw-rw-r--. 2 benben benben 13 Sep 22 18:02 b.txt
-rw-rw-r--. 2 benben benben 13 Sep 22 18:02 c.txt
lrwxrwxrwx. 1 benben benben 5 Sep 22 18:17 d.txt -> b.txt
lrwxrwxrwx. 1 benben benben 5 Sep 22 18:18 e.txt -> b.txt
[benben@localhost test]$ ls -i
17510082 b.txt 17510082 c.txt 17510081 d.txt 17510083 e.txt
参考文章: