如何创建到根的符号链接


13

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

~$ ln -s /
ln: failed to create symbolic link './': File exists

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

如何使用终端?


虽然这是一个很好的问题,但我想知道您为什么要这样做的原因?输入太难了cd /吗?还是您想创建一个链接,该链接将不断地反复进行?例如: cd root/home/terrance/root/home/terrance/root/home/terrance/root。。。等
-Terrance

并非如此。您可以执行此操作而无需链接到root。实际上,我只是很好奇你为什么不能这样做
Ankur S

很公平。谢谢你回答我的问题。=)
Terrance

Answers:


17

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

cd ~
ln -s / root

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

ln -s <target> <link-name>

您看到的错误消息是,该错误消息./始终存在,并且无法使用该名称创建链接,最好是同时使用带有两个参数的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...  

描述

在第一种形式中,创建一个TARGET名为的链接LINK_NAME。在第二种形式中,TARGET在当前目录中创建一个链接。在第三和第四的形式,创建链接到每个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 -> /

1 感谢@thomasrutter指出这一点。
2 另请参见man linkman symlink
3 感谢@steeldriver提供了注释示例。
4 强调要指出的地方,因为它与问题有关。


我唯一剩下的疑问是,为什么一个命令应该ln -s /etc起作用而不是这样?感谢您的回答,
Ankur S

之所以创建它,是因为它具有目录名称,/可以是root或可以是路径组件,因此程序无法知道现在的含义。/etc只是一条明确的可区分路径。
Videonauth

7
@AnkurSonawane因为./一直存在- ./etc不太可能。mkdir etc先尝试,然后ln -s /etc-您也将获得File exists
steeldriver '17

8
如果省略,则最后一个参数link-name默认为目标的最后一部分。因此,当目标是/some/dir链接名称时,dir如果未指定,则默认为。/但是,当目标只是时,这将行不通。
thomasrutter

我不认为这非常重要,但是鉴于File Exists输出,@ steeldriver的解释听起来更合理。但这并不重要,因为这是简陋的案例
Ankur S
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.