如何创建指向 root 的符号链接

Ank*_*r S 13 filesystem command-line symbolic-link

我想/在我的主目录中创建一个指向根 ( ) 文件夹的符号链接。但是,如果我尝试这个,我会得到

~$ ln -s /
ln: failed to create symbolic link './': File exists
Run Code Online (Sandbox Code Playgroud)

当然,我可以使用 Nautilus Ctrl+做到这一点D,所以我知道这是可能的。

如何使用终端执行此操作?

Vid*_*uth 17

您缺少链接的名称,它应该是:

cd ~
ln -s / root
Run Code Online (Sandbox Code Playgroud)

然后将在您的主目录中创建一个名为 root 的符号链接。所以正确的用法是:

ln -s <target> <link-name>
Run Code Online (Sandbox Code Playgroud)

您看到的错误消息是,./始终存在并且无法使用此名称创建链接,最好使用带有两个参数的ln命令2以防止错误链接。

来自man ln

概要

(1st form) ln [OPTION]... [-T] TARGET LINK_NAME  
(2nd form) ln [OPTION]... TARGET  
(3rd form) ln [OPTION]... TARGET... DIRECTORY  
(4th form) ln [OPTION]... -t DIRECTORY TARGET...  
Run Code Online (Sandbox Code Playgroud)

描述

在第一个表单中,创建一个TARGET名为的链接LINK_NAME。在第二种形式中,TARGET在当前目录中创建一个链接。在第 3 种和第 4 种形式中,TARGETDIRECTORY. 默认情况下创建硬链接,符号链接为--symbolic. 默认情况下,每个目的地(新链接的名称)不应该已经存在4。创建硬链接时,每个都TARGET必须存在。符号链接可以包含任意文本;如果稍后解析,则相对链接将相对于其父目录进行解释。

长选项的强制性参数对于短选项也是强制性的。

选项

最后一个参数 ,<link-name>默认为目标的最后一部分。所以当目标是/path/dir链接名称时,dir如果未指定,将默认为。1如果你比如创建~/etc具有mkdir ~/etc然后运行ln -s /etc~,因为该名称/目录已存在无法创建链接。3

你可以看到在你的主目录中创建的链接(这里作为例子,当然你可以随意命名它):

$ ls -l ~/root
lrwxrwxrwx 1 videonauth videonauth 1 Dez 14 00:28 root -> /
Run Code Online (Sandbox Code Playgroud)

1 感谢@thomasrutter指出这一点。
2 另见man linkman symlink
3 感谢@steeldriver在评论中提供示例。
4 强调部分使文本指出,因为它与问题相关。

  • 如果省略,最后一个参数 link-name 默认为目标的最后一部分。因此,当目标是 `/some/dir` 时,如果未指定,链接名称将默认为 `dir`。然而,当目标只是 `/` 时,这将不起作用。 (8认同)
  • @AnkurSonawane 因为`./` 将*总是* 存在-`./etc` 不太可能。先尝试 `mkdir etc`,然后尝试 `ln -s /etc` - 你也会得到 `File exists` (7认同)