目录
1. 硬链接(Hard Link)
定义:
硬链接是直接指向文件数据块(inode)的链接。创建硬链接时,系统会生成一个新的文件名,但该文件名与原文件共享相同的inode。因此,硬链接与原始文件本质上是同一个文件的多个别名。特点:
同一文件系统:硬链接必须在同一文件系统内创建,因为inode是文件系统内唯一的。
链接到文件:不能为目录创建硬链接(防止循环问题)。
独立性:删除原文件后,硬链接仍有效(数据未被删除)。
相同权限与属性:所有硬链接共享相同的inode,因此权限、大小等属性完全一致。
引用计数:每创建一个硬链接,inode的链接数加1。只有当链接数为0时,文件数据才会被删除。
ln 源文件 硬链接名
2. 软链接(Symbolic Link,符号链接)
定义:
软链接是一个独立的文件,其内容存储的是目标文件的路径(创建一个新的文件其内容是连接的文件或目录的路径)。它类似于Windows的快捷方式,通过路径指向目标文件。特点:
跨文件系统:可以链接到不同文件系统或远程路径。
链接到目录:支持为目录创建软链接。
依赖目标存在性:若目标文件被删除或移动,软链接将失效(称为“悬空链接”)。
独立权限:软链接自身权限通常为777(所有用户可访问),但实际权限由目标文件决定。
独立的inode:软链接拥有自己的inode,与目标文件不同。
ln -s 源文件/目录 软链接名
总结:
硬链接的话,它是直接指向文件的数据块。也就是说,创建一个硬链接时,实际上是创建了一个新的文件名,指向同一个inode。inode是文件系统中用来存储文件元数据的数据结构,比如权限、所有者、文件大小,以及数据块的位置等。所以,当创建硬链接时,两个文件名都指向同一个inode。这样,无论通过哪个文件名访问,都是访问同一个文件内容。而且,只有当所有硬链接都被删除后,文件的数据块才会被释放。
软链接则更像是一个快捷方式。它本身是一个单独的文件,里面存储的是目标文件的路径。所以,软链接有自己的inode,但这个inode指向的内容是另一个文件的路径。如果目标文件被删除或移动了,软链接就会失效,成为所谓的“悬空链接”(dangling link)。这时候访问软链接会报错,说找不到文件。而硬链接不会有这个问题,因为它们直接指向数据块,只要还有至少一个硬链接存在,数据就不会丢失。
比如,硬链接不能跨文件系统,因为inode是文件系统内的唯一标识,而不同的文件系统可能有相同的inode号,这样会导致冲突。所以硬链接只能在同一个文件系统中创建。而软链接可以跨文件系统,因为它只是保存路径,路径可以指向任何地方,包括不同的文件系统或者网络位置。
另外,硬链接只能链接到文件,不能链接到目录。这是为了防止在目录中创建硬链接导致文件系统出现循环,影响文件系统的完整性。而软链接可以链接到目录,这也是为什么在需要链接目录的时候只能用软链接。
还有,删除原文件对两者的影响不同。删除原文件后,硬链接仍然有效,因为inode的链接数减少,但只要还有链接存在,数据就不会被删除。而软链接则会失效,因为它指向的路径不存在了。
权限方面,硬链接和原文件的权限是相同的,因为它们共享同一个inode。而软链接的权限则可能不同,因为它本身是一个独立的文件,但通常软链接的权限是777(所有用户可读、写、执行),不过实际权限由目标文件决定,访问时会检查目标文件的权限。