![符号链接的行为](https://linux22.com/image/1084062/%E7%AC%A6%E5%8F%B7%E9%93%BE%E6%8E%A5%E7%9A%84%E8%A1%8C%E4%B8%BA.png)
我成功但未成功创建符号链接:
我有两个目录
~/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
在第二个例子中,我使用了相对路径,但相对于链接的目标。