我有 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
供我自己使用。