Как создать символическую ссылку на root

13

Я хочу создать символическую ссылку на /папку root ( ) в моем домашнем каталоге. Однако если я попробую это, я получу

~$ 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. , , и т. д.
Терренс
не совсем. Вы могли бы сделать это без необходимости ссылки на root. на самом деле, мне просто любопытно, почему ты не можешь это сделать
Ankur S
Справедливо. Спасибо за ответ на мой вопрос. =)
Terrance

Ответы:

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...  

ОПИСАНИЕ

В 1-й форме создайте ссылку TARGETна имя LINK_NAME. Во 2-й форме создайте ссылку на TARGETв текущем каталоге. В 3-й и 4-й формах создайте ссылки для каждого TARGETв DIRECTORY. Создавать жесткие ссылки по умолчанию, символические ссылки с --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 linkи man symlink
3 Спасибо @steeldriver за предоставленный пример в комментариях.
4 Подчеркнул часть, чтобы выделить текст, так как он имеет отношение к вопросу.

Videonauth
источник
Мое единственное оставшееся сомнение - почему команда должна ln -s /etcработать, а не эта? Спасибо за ответ,
Ankur S
Он создан потому, что у него есть имя каталога, он /может быть корневым или компонентом пути, поэтому программа не может знать, что имеется в виду. /etcэто просто явный различимый путь.
Видеонавт
7
@AnkurSonawane, потому ./что всегда будет существовать - ./etcне так уж и вероятно. Попробуйте mkdir etcсначала, а затем ln -s /etc- вы также получитеFile exists
SteelDriver
8
Последний параметр, link-name, по умолчанию равен последней части цели, если не указан. Поэтому, когда целью является /some/dirимя ссылки, по умолчанию используется значение, dirесли оно не указано. Однако, когда цель просто /, это не сработает.
Томасруттер
Я не чувствую, что это чрезвычайно важно, но объяснение @steeldriver звучит более разумно, учитывая File Existsрезультаты. Не то чтобы это все равно имело значение, так как это вырожденный случай
Ankur S