linux 链接分两种,一种是硬链接(hard link),另一种是符号链接(symbolic link)。
命令
- 硬链接:$ ln src-file dst-file
- 符号链接:$ ln -s src-file dist-file
硬链接
硬链接通过索引节点进行链接。在linux的文件系统,保存在磁盘分区的文件不管是什么类型都会给他分配一个编号,称为索引节点号。在linux中,多个文件名指向同一个索引节点是存在的。这种情况就是硬链接。即便删除源文件,如果这个文件的硬链接还存在,则这个文件不会被删除,除非所有的硬链接全部被删除(即当前文件的索引计数为0),这个文件才真正意义上的被删除(释放空间),也就是说,文件真正删除的条件是与之相关的所有硬链接文件均被删除。
硬链接只能链接文件,不能指向文件夹。
符号链接
类似于windows系统的快捷方式,它实际上是一个特殊的文件,其中保存的是另一个文件的位置信息。
符号链接可以指向文件夹和文件,当源文件删除时,符号链接失效。
从上面结果可以看出,硬链接文件
file-link-d
的inode和源文件file1
相同,但是符号链接不同
当删除源文件后,看到,硬链接文件依然有效,说明删除文件只是将文件的索引计数减一,而符号链接由于保存的是源文件的地址,当源文件被删除,符号连接找不到指向的文件,所以符号链接失效。
总结
- 软链接有自己的文件属性及权限等;
- 可对不存在的文件或目录创建软链接;
- 软链接可交叉文件系统;
- 软链接可对文件或目录创建;
- 创建软链接时,链接计数 i_nlink 不会增加;
- 删除软链接并不影响被指向的文件,但若被指向的原文件被删除,则相关软连接被称为死链接(即 dangling link,若被指向路径文件被重新创建,死链接可恢复为正常的软链接)。