使用符号链接创建新的符号链接

使用符号链接创建新的符号链接

我有 2 个目录 (FOO、LALA)。我在其中一个目录中创建了一个符号链接,如下所示

ln -s /etc/apache2 FOO/apache2

之后我想创建另一个符号链接,指向同一个目录,但不使用初始目录,而是使用创建的符号链接。所以我尝试

ln -s FOO/apache2 LALA/apache2

问题是第二个链接无效。

ls FOO/apache2

上述工作并列出 /etc/apache2 中的文件

ls LALA/apache2

但这个没有。它只列出了链接本身。如果我在每个 ls 的末尾添加一个斜线

ls FOO/apache2/

也有效。

ls LALA/apache2/

我明白了ls:无法访问 LALA/apache2/:没有此文件或目录/


如果

ln -s FOO/apache2 LALA/apache2

我愿意

cd LALA ; ln -s ../FOO/apache2 apache2

那么符号链接有效

知道有什么区别吗?


最初的问题来自这里 https://stackoverflow.com/questions/10656666/use-a-symbolic-link-to-create-a-new-symbolic-link

答案1

不同之处在于相对符号链接在访问时间,而不是创作时间。


在您的第一个示例中,如果链接的名称是/somedir/LALA/apache2并且其目标是,则在访问它时FOO/apache2它将被解析为。/somedir/LALA/FOO/apache2

链接名称: 链接目标: 绝对目标:/somedir/LALA/apache2” + “FOO/apache2” = “/somedir/LALA/FOO/apache2”

在第二个示例中,链接的名称相同 – /somedir/LALA/apache2– 但其目标,../FOO/apache2现在解析为:

链接名称: 链接目标: 绝对目标:/somedir/LALA/Apache2” + “../FOO/Apache2” = “/somedir/LALA/../FOO/apache2”
                                           → “/somedir/FOO/apache2”

这意味着你必须始终以“ ../FOO/apache2”作为目标ln -s创建第二个链接时,不管您当前位于哪个目录中。

注意:在最新版本中核心工具,该ln命令有一个新的选项-r/ --relative,可以为您完成工作。例如,ln -r -s FOO/apache2 LALA/apache2可以正常工作。

对于旧版本,你可以使用realpath --strip --relative-to...进行破解,
我写道sym供我自己使用。

相关内容