【问题标题】:Linux links with "ln" command [closed]Linux与“ln”命令链接[关闭]
【发布时间】:2013-07-08 21:49:36
【问题描述】:

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

换句话说:

为什么

ln -s ...

而不是

ln -P ...

【问题讨论】:

    标签: linux bash filesystems ext4


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      在我的头顶:

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

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

      【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:
        • 硬链接在文件系统中没有意义,因为它们基本上是指向本地 FS 上的 inode 的指针。符号链接不在乎;因为它们只是名字,所以它们可以住在任何地方。

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

        【讨论】:

        • 实际上,您可以从文件的链接计数(第 2 列 i ls -l)判断文件是否为硬链接。
        • @GordonDavisson:这仍然不能告诉您文件的其他名称可能是什么。使用符号链接尝试 ls -l。您不仅会知道它是指向另一个文件的链接,而且会知道它是指向哪个文件的链接。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-06-17
        • 2021-12-05
        • 2012-12-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多