带有"ln"命令的 Linux 链接



我正在bash中编写一个shell脚本,在那里我在文件之间建立一些链接,但我不确定要使用哪种链接(物理或符号)。在做一些研究时,我注意到使用符号链接而不是物理链接更为常见。我的问题是,当符号链接需要间接访问时,为什么要使用符号链接(它会创建一个额外的I节点来保护文件的真实I节点信息),而不是使用直接指向文件的硬链接?

换句话说:

为什么选择

ln -s ...

而不是

ln -P ...

符号链接的主要原因是"软"符号链接可以跨越文件系统边界。表示符号链接的文件将包含一个字符串,该字符串是指向的文件的实际路径。只要该路径的最终用户表示保持不变,符号链接就会工作。如果您将文件移动到符号链接的末尾,符号链接现在将过时(也称为"悬空"),因为它指向的资源已不存在。

一个硬(又称物理)符号链接在inode层工作。由于inode仅在单个文件系统中是唯一的,因此不能硬链接ACROSS文件系统。如果允许的话,您可能很容易遇到重复的inode情况。好处是,无论你将硬链接的目标移动到哪里,指向资源的链接都会"跟随",因为它们指向的是inode本身,而不在乎实际的路径/资源名称是什么。

在我的脑海中:

  1. 符号链接跨文件系统工作。如果您不想跟踪源文件和目标链接所在的文件系统,或者有时在文件系统之间移动文件,那么使用符号链接就不那么麻烦了。

  2. $@&$&emacs备份文件。当您编辑时,比如file.txt,并在emacs中对其进行更改,emacs会将原始文件重命名为file.txt~,并将您的更改保存在原始文件名下。如果有一个到file.txt的硬链接,那么它现在链接到file.txt~,这可能不是您想要的。到file.txt的符号链接仍将指向更新的索引节点。

硬链接只能在同一个文件系统上工作,重命名inode。只有当指向文件索引节点的最后一个链接消失时,才能删除文件。硬链接通常用于文件而不是目录。

符号链接是一个包含另一个文件路径的实际文件。Symlink也可以跨文件系统工作。它们也可以指向不同的文件类型。符号链接也可以指向文件或目录。

  • 硬链接在文件系统之间没有意义,因为它们基本上是指向本地FS上inode的指针。Symlinks不在乎;因为他们只是名字,所以他们可以住在任何地方。

  • 如果你查看目录列表并看到一个符号链接,你就会知道它指向一个特定的其他位置。另一方面,硬链接没有提供这样的线索。你可能不知道你在某个重要的文件中玩,直到你stat的两个名字。

最新更新