截屏我试图创建一个名为 的符号链接,位于 的文件目录lsfic6
中,因此我运行:test
fic6
test/rep1/rep4/
ln -s test/rep1/rep4/fic6 /home/user/test/lsfic6
我看到链接已创建,但链接颜色为红色,并且指向test/rep1/re4/fic6
,好像指向不存在的文件。这是为什么?
答案1
问题在于你使用了相对路径。你运行了以下命令:
ln -s test/rep1/rep4/fic6 /home/user/lsfic6
/home/user/lsfic6
这意味着“在 处创建一个指向 的链接test/rep1/rep4/fic6
”。由于目标以 开头test
,而不是/
,因此这是一个相对路径。换句话说,test/
意味着“名为 的目录test
是我当前目录的子目录”。
把绝对路径想象成房屋地址(例如“哥谭市蝙蝠街 14 号”),把相对路径想象成从这里到那里的路线(例如“沿着这条街走,在第二个路口左转,你就会到达那里”)。相对路径取决于您所在的位置,而绝对路径则不取决于您所在的位置。
因此,如果此test/
目录是/home/user/test
,那么您的命令就会起作用,但如果test/
不在/home/user/test
,则链接将会断开,正如您所看到的。
举个例子可能会更清楚。考虑一下:
$ pwd
/home/terdon/foo
$ ls -lA
total 4
drwxr-xr-x 2 terdon terdon 4096 Mar 28 13:42 test
我有一个名为 的目录/home/terdon/foo
,在该目录中,我有一个名为 的子目录test
。因此, 的完整路径test
是/home/terdon/foo/test
。当我在 时/home/terdon/foo
,相对的路径test
只是test
或者./test
因为它与我位于同一目录中。
现在,如果我创建一个符号链接test
,它就可以工作:
$ ln -s test link
$ ls -lA
total 4
lrwxrwxrwx 1 terdon terdon 4 Mar 28 13:46 link -> test
drwxr-xr-x 2 terdon terdon 4096 Mar 28 13:42 test
然而,如果我在另一个目录中尝试同样的事情,我会得到一个断开的链接:
$ cd /home/terdon
$ ln -s test link
$ ls -l link
lrwxrwxrwx 1 terdon terdon 4 Mar 28 13:47 link -> test
在第二个例子中,链接已损坏并显示为红色:
因此,要么使用绝对路径(例如ln -s /some/dir/test/rep1/rep4/fic6 /home/user/lsfic6
),要么确保从正确的目录运行命令ln
,以便相对路径有效(例如cd /some/dir
然后ln -s test/rep1/rep4/fic6 /home/user/lsfic6
)。