符号链接在子目录中不起作用?

符号链接在子目录中不起作用?

我是新手。我正在学习ln命令。所以我创建了一个指向另一个目录 bar 中的文件 foo.txt 的符号链接。

ln -s foo.txt bar

当我尝试访问时bar/foo.txt,出现错误“符号链接层数过多“。有人可以再详细解释一下符号链接吗?我尝试做的是不可能的,还是有其他方法可以实现?基本上,我想要一个指向目录 bar 中的 foo 的链接,该目录与 foo 位于同一目录中。

directory
|__foo.txt
|__bar
   |__(link to foo.txt)?

答案1

符号链接目标存储为原始路径(因此称为“符号”链接)。默认情况下,当您使用ln -s目标路径时,会存储字面上地– 它不是相对的,而是按照您指定的方式存储的。

因此,必须指定相对路径,就好像它们是相对于链接的位置一样,不是相对于您当前的位置:

ln -s ../foo.txt bar/foo.txt

因为链接在bar/,所以链接将指向bar/../foo.txt

如果您首先知道链接的位置,创建相对链接将变得容易得多cd(因为链接的位置和您当前的位置将是相同的)。

在最新的 Linux 上,该ln命令有一个附加-r选项来简化此操作并按照您期望的方式创建相对链接:

ln -r -s foo.txt bar/foo.txt

(请注意,执行此操作后,链接的目标将自动../foo.txt再次变为。)

在 Linux 上,您可以尝试使用namei命令来直观地了解某个路径(包括符号链接)是如何被遵循的。

相关内容