我正在bash中编写一个shell脚本,我在文件之间建立了一些链接,但我不确定使用什么类型的链接(物理或符号)。做一些研究,我注意到使用符号链接而不是物理链接更常见。我的问题是为什么在需要间接时使用符号链接(它创建一个额外的I节点来保护有关文件的真实I节点的信息)而不是使用直接指向文件的硬链接?
换句话说:
为什么
ln -s ...
而不是
ln -P ...
答案 0 :(得分:4)
符号链接的主要原因是“软”符号链接可以跨越文件系统边界。表示符号链接的文件将包含一个字符串,该字符串是指向的文件的实际路径。只要该路径的最终用户表示保持不变,符号链接就可以工作。如果你在符号链接的末尾移动文件,符号链接现在将是陈旧的(又名“悬空”),因为它指向的资源不再存在。
硬(又称物理)符号链接在inode层工作。由于inode在单个文件系统中仅是唯一的,因此您无法将ACROSS文件系统硬链接。如果允许,您可能很容易遇到重复的inode情况。好处是无论你在何处移动硬链接的目标,指向资源的链接都将“跟随”,因为它们指向inode本身,而不关心实际的路径/资源名称是什么。
答案 1 :(得分:2)
脱离我的头顶:
符号链接跨文件系统工作。如果您不想跟踪源文件和目标链接所在的文件系统,或者您有时在文件系统之间移动文件,那么使用符号链接就不那么麻烦了。
$ @&安培;# $&安培; emacs
个备份文件。在编辑时,说出file.txt
并在emacs中对其进行更改,emacs会将原始文件重命名为file.txt~
并将更改保存在原始文件名下。如果有file.txt
的硬链接,则它现在链接到file.txt~
,这可能不是您想要的。指向file.txt
的符号链接仍将指向更新的inode。
答案 2 :(得分:0)
硬链接只能在同一文件系统上工作,重命名inode。只有在其inode的最后一个链接消失时才能删除文件。硬链接通常用于文件而不是目录。
符号链接是包含另一个文件路径的实际文件。符号链接也可以跨文件系统工作。它们也可以指向不同的文件类型。符号链接也可以指向文件或目录。
答案 3 :(得分:0)
硬链接在文件系统之间没有意义,因为它们基本上是指向本地FS上的inode的指针。符号链接不关心;因为它们只是名字,所以它们可以在任何地方生活。
如果您查看目录列表并查看符号链接,您就知道它是指特定的其他位置。另一方面,硬链接没有提供这样的线索。您可能不知道自己在某个重要文件中玩耍,直到stat
这两个名字为止。