详解Linux系统中软连接和硬链接的区别与联系
Linux 系统中有软连接和硬链接两种特殊的“文件”。
其中软连接实际上可以看作是Windows中的快捷方式,而硬链接则可以看作类似于一个文件的 “指针”(也不完全相同) 。
创建方法都很简单:
- 软连接(符号链接) ln -s source target
- 硬链接 ln source target
原理:
要解释清楚两者的区别和联系需要先说清楚 linux 文件系统中的 inode 这个东西。
简单的说这个inode即使文件在一个文件系统中的唯一标识,需要访问这个文件的时候必须先找到并读取这个文件的 inode。 Inode 里面存储了文件的很多重要参数,其中唯一标识称作 inumber, 其他信息还有创建时间(ctime)、修改时间(mtime) 、文件大小、属主、归属的用户组、读写权限等信息。
当划分磁盘分区并格式化的时候,整个分区会被划分为两个部分,即inode区和数据区域
通常会根据分区的用途来安排inode的数量(这是另外一个话题了),比如文件数量很多而文件都很小,则需要调增inode较大,以便能索引全部文件。否则将会出现这个分区并没有写满而无法写入任何文件的情况。
查看 inodes 使用情况的命令 df -i :
知道了inode的作用就不难理解软硬链接的区别了。
- 软连接相当于快捷方式,如果打开并修改软连接,相应的文件也会随之改变。但是如果删除软连接,源文件并不会受到影响。
- 硬链接有点像引用和指针的结合,当打开和修改它时,相应的文件随之改变,但是所有这个文件的硬链接的内容也随之改变,这是因为所有的硬链接都拥有唯一的一个 inode 号,他们指向的是同一文件。
- 软连接可以跨文件系统创建,也就是可以在某个分区中创建到另外一个分区的软连接
- 硬链接则只能在本文件系统中使用(想想为什么?),其实原理很简单,因为 inode 是这个文件在当前分区中的索引值,是相对于这个分区的,当然不能跨越文件系统了。
- 最后一个区别是软连接可以连接任何文件或者文件夹,而硬链接则只能在文件之间创建