创建符号链接

创建符号链接

截屏我试图创建一个名为 的符号链接,位于 的文件目录lsfic6中,因此我运行:testfic6test/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)。

相关内容