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


1

我有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

Answers:


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创建第二个链接时,无论你是哪个目录目前英寸

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

对于旧版本,您可能会破解某些内容realpath --strip --relative-to...
sym为自己使用而编写。


大。这就是问题......如果你问我,真的很奇怪。我可能最终会在第一个符号链接中使用readlink,并使用readlink作为目标创建第二个。
乔治·卡斯特里尼斯

@GeorgeKastrinis:也许这个脚本会很有用。
grawity
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.