一、软链接和硬链接的概念
在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系统中非常常用的两种链接方式,通过本文的介绍,我们可以知道软链接和硬链接的不同点,并且知道了软链接和硬链接的使用方法。