Як створити символьне посилання на корінь


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

Справедливо. Дякую за відповідь на моє запитання. =)
Терранс

Відповіді:


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 Підкреслена частина, щоб викласти текст, оскільки це стосується питання.


моє єдине сумнів, що залишається - чому команда повинна ln -s /etcпрацювати, але не ця? Дякую за відповідь,
Ankur S

Він створений тому, що він має ім'я каталогу, /може бути root або він може бути компонентом шляху, тому програма не може знати, що зараз мається на увазі. /etcце лише явний відмітний шлях.
Videonauth

7
@AnkurSonawane тому ./, що завжди буде існувати - ./etcне так вже ймовірно. Спробуйте mkdir etcспочатку, а потім ln -s /etc- ви також отримаєтеFile exists
steeldriver

8
Кінцевий параметр, ім'я посилання, встановлюється за замовчуванням для останньої частини цілі, якщо вона опущена. Тож коли ціль - /some/dirце ім'я посилання за замовчуванням, dirякщо не вказане. /Однак, коли ціль просто , це не спрацює.
thomasrutter

Я не вважаю, що це надзвичайно вагоме, але пояснення @steeldriver звучить більш розумно, враховуючи File Existsрезультати. Не те, що все одно має значення, бо це вироджений випадок
Ankur S
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.