您的位置:

Linux软连接和硬链接详解

一、软链接和硬链接的概念

在Linux文件系统中,链接是一种文件系统中的指向另一个文件或目录的引用。软链接(Symbolic Link或者叫做Symlink)和硬链接(Hard Link)是Linux中两种不同的链接类型。

软链接,也称为符号链接,它是一种特殊的文件,它包含有另一文件或目录的路径信息。软链接以“ln -s”命令建立,软链接可以创建指向目录或文件的链接,软链接也可以创建指向不存在的文件或目录的链接。

硬链接是将一个文件存在的目录项指向同一个索引节点,也就是说,硬链接是指多个文件句柄指向同一个文件数据块。硬链接可以理解为对同一文件的多个名字,通过“ln”命令建立。

二、软链接和硬链接的区别

软链接和硬链接的不同点1:文件类型

软链接和硬链接的文件类型不同。软链接是一个单独的文件,它的文件类型是“伪文件”,文件大小只有原文件的几个字节;而硬链接并不单独占用空间,它是一个与原文件完全相同的文件,文件类型是“普通文件”,也就是说,在硬链接创建之后,无论是原文件还是硬链接之间做的改动都会同时反映出来。

软链接和硬链接的不同点2:路径解析

软链接和硬链接在解析路径时的方式不同,硬链接通过文件的i节点来解析,软链接通过文件路径名来解析。

$ ls -li file1
2582235 -rw-r--r--. 2 user1 user1 6 Jul  9 11:31 file1
$ ln file1 file2
$ ln -s file1 file3
$ ls -li file{1,2,3}
2582235 -rw-r--r--. 3 user1 user1 6 Jul  9 11:31 file1
2582235 -rw-r--r--. 3 user1 user1 6 Jul  9 11:31 file2
2582236 lrwxrwxrwx. 1 user1 user1 5 Jul  9 11:32 file3 -> file1

从上述的代码可知,file2是硬链接,file3是软链接。在创建硬链接时,新增的硬链接文件file2,实际只是在文件系统中新增了一个目录项,但是所有的目录项都是与原文件file1关联的。而软链接则是在文件系统中新增了一个“伪文件”,这个“伪文件”指向了原文件file1。

软链接和硬链接的不同点3:符号链接的作用范围

因为软链接是通过文件路径名来解析的,所以软链接对文件名的长度没有限制,可以跨越文件系统,解析任意路径上的文件;而硬链接只能建立在同一个文件系统中。

三、软链接和硬链接的示例

下面我们来演示一下软链接和硬链接的使用方法。

建立软链接

使用“ln -s”命令来建立软链接,例如:

$ touch file1 file2
$ ln -s file1 file3
$ ls -li file{1,2,3}
8197166 -rw-r--r-- 1 user1 user1 0 Jul  9 13:15 file1
8197167 -rw-r--r-- 1 user1 user1 0 Jul  9 13:15 file2
8197851 lrwxrwxrwx 1 user1 user1 5 Jul  9 13:15 file3 -> file1

从上面的例子中可知:建立软链接时,file3指向的是file1的路径。

建立硬链接

使用“ln”命令来建立硬链接,例如:

$ ln file1 file4
$ ls -li file{1,2,3,4}
8197166 -rw-r--r-- 2 user1 user1 0 Jul  9 13:15 file1
8197167 -rw-r--r-- 1 user1 user1 0 Jul  9 13:15 file2
8197851 lrwxrwxrwx 1 user1 user1 5 Jul  9 13:15 file3 -> file1
8197852 -rw-r--r-- 2 user1 user1 0 Jul  9 13:20 file4

从上面的例子中可知:因为file4是对file1的硬链接,所以修改其中任意一个文件都会同时反映出来;而且,通过“ls -li”命令也可以看出来,硬链接的索引节点编号是相同的。

删除软链接和硬链接

删除软链接和硬链接仅仅是删除链接本身,而不是文件本身。

$ rm file3
$ rm file4

四、链接的使用场景

软链接和硬链接在Linux系统中的应用非常广泛,尤其是在文件共享、备份、存档等方面有很好的效果。

软链接可以方便地在文件间共享数据,并且不会造成不必要的文件复制。同时,在升级更新时,只需要改变软链接的指向即可实现文件的更新。

硬链接通常用于类Unix系统的软件管理中。例如,当我们安装一个新软件时,新软件的所有文件都很可能会放在“/usr/local/bin”等目录下,在软件管理中,如果创建软链接,那么当我们卸载软件后仍然会有一些残留文件存在,造成垃圾文件的出现。而使用硬链接,这些文件都指向同一个索引节点,如果某个硬链接被删除,只要文件本身还被其他硬链接文件占用,那么实际上该文件并不会被删除。

总结

软链接和硬链接是Linux系统中非常常用的两种链接方式,通过本文的介绍,我们可以知道软链接和硬链接的不同点,并且知道了软链接和硬链接的使用方法。