符号链接的行为

符号链接的行为

我成功但未成功创建符号链接:

我有两个目录

~/foo

~/bar

baz.txt现在我在这个路径中有一个名为的文件~/foo。我的目标是创建一个符号链接,~/bar这样我也可以从那里访问它。

使用我在目录中执行的以下命令~/foo

ln -s baz.txt ~/bar

我有一个坏的符号链接被标记为红色。结果并不像我预期的那样,我尝试了其他方法,最终成功了。

我在路径中执行了这个命令~/bar

ln -s ~/foo/baz.txt .

我现在想知道为什么我的第一种方法不起作用,因为我将文件引用到了我想要放置符号链接的目录。在我看来,我在两个命令中都做了同样的事情,只是在不同的目录中。

答案1

这里的问题是绝对路径与相对路径。绝对路径是/bar/foo/file.txt,相对路径是./file.txt。当你运行 时ln -s foo.txt /home/ubuntu/central_addcontent/program/,这相当于运行

ln -s ./foo.txt /home/ubuntu/central_addcontent/program/

这将创建一个名为的文件foo.txt,指向./foo.txt 在目标目录中。通过给出不同链接名称的示例可以更简单地说明这一点:

$ ln -s foo.txt /home/terdon/central_addcontent/program/bar.txt
$ ls -l /home/terdon/central_addcontent/program/
total 0
lrwxrwxrwx 1 terdon terdon 7 Nov 25 11:25 bar.txt -> foo.txt

如上所示,bar.txt指向/home/terdon/central_addcontent/program/foo.txt的文件不存在。要正确执行此操作,您可以使用完整路径foo.txt,也可以使用相对路径,但要相对于目标目录。这两种方法都可以:

$ ln -s ~/central_app/program/foo.txt ~/central_addcontent/program/
$ l /home/terdon/central_addcontent/program/
total 0
lrwxrwxrwx 1 terdon terdon 40 Nov 25 11:28 foo.txt -> /home/terdon/central_app/program/foo.txt

或者

$ ln -s ../../central_app/program/foo.txt ~/central_addcontent/program/
$ ls -l /home/terdon/central_addcontent/program/
total 0
lrwxrwxrwx 1 terdon terdon 33 Nov 25 11:29 foo.txt -> ../../central_app/program/foo.txt

在第二个例子中,我使用了相对路径,但相对于链接的目标。

相关内容