-
定义与概念
- 硬链接(Hard Link):硬链接是文件系统中的一个概念,它直接指向文件系统中的物理数据块。可以把硬链接看作是原始文件的一个别名,它们共享相同的inode(索引节点)编号。在Linux文件系统中,文件的inode存储了文件的元数据,如文件的所有者、权限、大小和数据块位置等信息。
- 软连接(Symbolic Link),也称为符号链接:软连接是一个特殊类型的文件,它包含了指向另一个文件或目录的路径。它类似于Windows系统中的快捷方式,只是一个指向实际文件或目录位置的指针。
-
创建方式
- 硬链接:使用
ln
命令创建硬链接。例如,要为文件/home/user/file.txt
创建一个硬链接/home/user/file_link.txt
,可以使用命令ln /home/user/file.txt /home/user/file_link.txt
。 - 软连接:同样使用
ln
命令,但需要添加-s
选项来创建软连接。例如,要为文件/home/user/file.txt
创建一个软连接/home/user/file_symlink.txt
,可以使用命令ln -s /home/user/file.txt /home/user/file_symlink.txt
。
- 硬链接:使用
-
inode编号
- 硬链接:硬链接和原始文件具有相同的inode编号。例如,使用
ls -i
命令查看文件和它的硬链接,可以发现它们的inode编号是一样的。这意味着它们在文件系统的存储层面是同一个实体,只是有不同的文件名。 - 软连接:软连接有自己独立的inode编号,它所指向的目标文件有另外的inode编号。当使用
ls -i
查看时,可以明显区分软连接和它指向的文件。
- 硬链接:硬链接和原始文件具有相同的inode编号。例如,使用
-
文件内容与大小
- 硬链接:硬链接的文件内容和大小与原始文件完全相同,因为它们实际上是同一个文件在文件系统中的不同引用。对硬链接文件的修改会直接反映在原始文件上,反之亦然。
- 软连接:软连接文件本身很小,它的大小通常是指向目标文件路径字符串的长度。软连接文件的内容就是目标文件的路径。例如,如果目标文件路径是
/home/user/file.txt
,软连接文件内容就是这个路径字符串,并且文件大小就是这个字符串的长度。
-
文件删除行为
- 硬链接:只要还有一个硬链接存在,文件的数据块就不会被删除。也就是说,即使删除了原始文件,只要有硬链接指向该文件的数据块,这些数据仍然可以通过硬链接访问。例如,有文件
A
和它的硬链接B
,删除A
后,B
仍然可以正常访问和使用。 - 软连接:如果删除了软连接指向的目标文件,软连接就会失效。当尝试访问失效的软连接时,会得到一个错误提示,如“文件不存在”。例如,软连接
C
指向文件D
,删除D
后,C
就无法正常访问D
的内容了。
- 硬链接:只要还有一个硬链接存在,文件的数据块就不会被删除。也就是说,即使删除了原始文件,只要有硬链接指向该文件的数据块,这些数据仍然可以通过硬链接访问。例如,有文件
-
跨文件系统支持
- 硬链接:硬链接通常只能在同一个文件系统中创建。因为不同的文件系统有不同的inode结构和管理方式,所以无法跨文件系统创建硬链接。
- 软连接:软连接可以跨文件系统创建,因为它只是存储了目标文件的路径,不受文件系统结构差异的限制。例如,可以在一个挂载的外部存储设备(如USB硬盘)上创建一个软连接,指向本地文件系统中的文件。