硬链接主要有两个限制:
- 硬链接通常要求链接和文件位于同一文件系统中。
- 只有超级用户可以创建目录的硬链接。
因此,引入了符号链接来绕过硬链接的限制。那么,问题是,硬链接是否仍然需要?是否有它们更有用的情况?
答案1
硬链接帮助我们以更灵活的方式组织文件系统。基本上,硬链接允许我们将一个文件同时放在文件系统的多个位置。想象一下你是一名摄影师,有很多照片(这是我生活中的一个例子!)。你可能会根据照片中出现的人物来组织它们,因为有时人们会要求你提供他们的照片。但你可能还想按地点和日期来组织它们。没有真正的方法可以嵌套这三个东西,因为它们是完全独立的组织轴。因此,你可以为这三个不同的事物创建三个不同的层次结构,并让每张照片都出现在这三个层次结构中,没有每张照片必须存储三次。这就是硬链接的魔力。与符号链接不同,我们不需要担心“真实文件”在哪里,因为它们都是真实文件。我们可以随意删除和移动,因为文件将保留,直到不再有任何对它的引用,并在您删除最后一个硬链接时被删除。这很简单,不需要您跟踪太多事情。
答案2
直到所有硬链接(是的,所有文件名都是硬链接,甚至第一个)被删除并且文件关闭后,文件内容才会被清除。因此,当文件在多个地方都需要但可能随时从其中任何一个地方删除时,它很有用,例如在~/Downloads/coolsong.mp3
和之间~/Music/Cool Song.mp3
。
答案3
硬链接相对于符号链接的一个不太重要的优势是,当它到达硬链接的 inode 时,内核无需进行任何进一步的处理即可访问文件。当遇到符号链接时,内核必须读取链接值并继续遍历目录结构,然后才能到达文件的 inode。这需要更长的时间,尽管差异不一定容易衡量。当符号链接值上的一个元素本身就是符号链接时,事情会变得非常有趣。
答案4
一个有用的情况是,当你有一个程序(或脚本)需要下载一个大的临时 tarball 并且在解压之后你的程序会立即删除它。
如果你出于某种原因想要保留该 tarball 以供将来使用,最好的方法是ln /tmp/tarball.tgz ~
在 tarball 仍在下载时进行。然后你不需要做任何事情。
当下载完成时,即使您的程序删除了“原始”文件,精确的副本仍应位于您的主目录中。