软链接目录是否会硬链接其子文件?

软链接目录是否会硬链接其子文件?

假设我有以下配置:

  • 文件夹A
    • 文件1
    • 文件2

然后我创建文件夹 A 的软链接,如下所示:ln -s A B这样我们现在就有了:

  • 文件夹A
    • 文件1
    • 文件2
  • 文件夹 B(文件夹 A 的符号链接(软链接))
    • 文件1
    • 文件2

现在,当我改变时B/file1,这种改变就会传播到A/file1。然而,看起来 - 当使用ls -lin时B- thatB/file1B/file2不是软链接到A/file1A/file2!到底是怎么回事?

问题:这是真的吗?B/file1硬链接到A/file1?另一种问法是:当您软链接一个目录时,它的子文件是否会成为原始目录子文件的硬链接?有没有办法让一切都成为软链接?

答案1

它们不是硬链接有两个原因:

  1. 通过 ls 显示的软链接目录中文件的硬链接计数为 1。如果文件是硬链接,则计数将为 2 或更多。
  2. 硬链接不能跨越文件系统,而软链接可以。如果要创建硬链接,则无法跨文件系统软链接目录。

您真正看到的只是从不同路径访问同一目录的另一种方式。一旦您进入目录或对其中的文件进行操作,它们就是完全相同的文件(想象一下为房间添加一扇门,内容不会改变,但有一种新的进入方式)。

如果您希望目录的内容是软链接,那么您需要为目录中的每个文件而不是目录本身创建软链接,但这会使目录列表有点混乱。除了源和目标有不同的名称之外,我不确定您能从中获得什么优势。

答案2

看来你把事情搞混了。

符号链接:符号链接只是指向系统中另一个路径的指针。该路径可以存在或不存在,这并不重要,它也可以是绝对的或相对的。符号链接与目标文件无关,它只是指向。它甚至可以位于另一个物理磁盘上。它可以比作一个超级链接在网站上。

硬链接:硬链接是对文件的名称分配(确切地说是文件的索引节点号)。这种关系称为满射的。每个文件至少有一个引用其索引节点号的硬链接。索引节点号是对文件的引用。因此,现代文件系统没有文件名和实际文件的固定分配。

如果一个文件有 2 个硬链接引用其 inode,并且其中一个被删除(通过系统unlink()调用),则仅删除该硬链接,文件和 inode 保持不变(这就是系统调用被命名为unlink()not 的原因delete())。一旦硬链接的数量减少到零,索引节点最终就会被删除,文件也会被删除。


这就是理论。

当你改变时B/file1A/file1它也会改变,因为它是相同的硬链接引用相同的索引节点号引用相同的文件。您只是浏览了A指向目录的符号链接B,而不是真正的目录B

相关内容