跳到主要内容

Linux 软硬链接

在 Linux 系统中,硬链接(Hard Link)和软链接(Symbolic Link,也称符号链接)是两种不同类型的链接,用于创建文件之间的关联。

硬链接

硬链接是文件系统中同一个文件的多个名称,它们指向相同的 inode(文件索引节点)。具有相同 inode 节点号的多个文件互为硬链接文件,实际上,硬链接文件就是文件的另一个入口。

我们可以使用 ln 命令创建硬链接:

ln 源文件 硬链接文件

硬链接文件是普通文件,因此可以用 rm 删除。删除硬链接文件或者删除源文件任意之一,文件实体并未被删除;只有删除了源文件和所有对应的硬链接文件,文件实体才会被删除。

在实际应用中,我们可以通过给文件设置硬链接文件来防止重要文件被误删。对于静态文件(没有进程正在调用),当硬链接数为 0 时文件就被删除。注意,如果有进程正在调用,则无法删除或者即使文件名被删除但空间不会释放。

软链接

软链接是一个指向另一个文件的特殊文件,类似于 Windows 系统中的快捷方式。它包含一个路径引用,而非 inode。软链接文件本身有自己的 inode 和数据块,但它的内容是指向实际文件的路径。

软链接和源文件是不同的文件,文件类型也不同,inode 号也不同。当删除源文件时,软链接依然存在,但无法访问源文件内容。软链接失效时一般是白字红底闪烁。

创建软链接的命令:

ln -s 源文件 软链接文件

软链接的文件类型是 l,可以用 rm 删除。

硬链接和软链接的区别

原理上,硬链接和源文件的 inode 节点号相同,两者互为硬链接。软链接和源文件的 inode 节点号不同,进而指向的 block 也不同,软连接 block 中存放了源文件的路径名。实际上,硬链接和源文件是同一份文件,而软连接是独立的文件,类似于快捷方式,存储着源文件的位置信息便于指向。

使用限制上,不能对目录创建硬链接,不能对不同文件系统创建硬链接,不能对不存在的文件创建硬链接;可以对目录创建软连接,可以跨文件系统创建软连接,可以对不存在的文件创建软连接。