从源目录创建链接时符号链接损坏

从源目录创建链接时符号链接损坏

我为名为的文件创建了一个名为的符号链接,zotero.desktop并将其放置在目录中~/.local/share/applications,如下所示:

<At source file's directory>$ ln -s zotero.desktop ~/.local/share/applications/

符号链接已创建,但已损坏,无法使用。此外,尝试双击文件 Ubuntu Desktop,但出现“链接失效”警报。

然后尝试了下面的命令,并且成功了:

<At ~/.local/share/applications/>$ ln -s <source-dir>/zotero.desktop .

对此有什么解释吗?

答案1

该命令创建指向其自身的ln -s zotero.desktop ~/.local/share/applications/软链接:~/.local/share/applications/zotero.desktop~/.local/share/applications/zotero.desktop

$ ls -l ~/.local/share/applications/zotero.desktop 
lrwxrwxrwx 1 terdon terdon 14 May 29 11:33 /home/terdon/.local/share/applications/zotero.desktop -> zotero.desktop

这是因为命令的格式ln是:

ln source target

由于您给出的源是文件名,没有路径,因此该文件名将被视为目标目录中的文件名。我不知道您的目标在哪里,但假设它位于您运行命令的目录中ln,您需要运行以下命令:

rm ~/.local/share/applications/zotero.desktop
ln -s "$PWD/zotero.desktop" ~/.local/share/applications/

一般来说,你需要记住软链接是相对的。例如,我可以这样做:

$ tree
.
├── file
└── foo

1 directory, 1 file
$ ln -s ../file foo/
terdon@tpad foo $ tree
.
├── file
└── foo
    └── file -> ../file

当我运行 时ln -s ../file foo,这意味着“在 foo 目录中创建一个指向 ../file 的符号链接”。但是 将会../file与符号链接相关。因此它将指向一个名为file 多于目錄foo

始终确保正确的最简单方法是先进入目标目录,然后ln在那里运行命令,这样您就可以正确获得相对路径。

相关内容