Jak utworzyć dowiązanie symboliczne do rootowania

13

Chcę utworzyć dowiązanie symboliczne do /folderu root ( ) w moim katalogu domowym. Jeśli jednak spróbuję tego, dostanę

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

Oczywiście mogę to zrobić za pomocą Nautilus Ctrl+ D, więc wiem, że to możliwe.

Jak to zrobić za pomocą terminala?

Ankur S.
źródło
Chociaż to dobre pytanie, chcę poznać powód, dla którego chcesz to zrobić? Czy to zbyt trudne do wpisania cd /? A może chcesz utworzyć link, który będzie się powtarzał w kółko? Przykład: cd root/home/terrance/root/home/terrance/root/home/terrance/root. . . itp.
Terrance
nie bardzo. możesz to zrobić bez konieczności łączenia się z rootem. właściwie byłem po prostu ciekawy, dlaczego nie możesz tego zrobić
Ankur S
Słusznie. Dziękuję za odpowiedź na moje pytanie. =)
Terrance

Odpowiedzi:

17

Brakuje nazwy linku, powinna być:

cd ~
ln -s / root

Który następnie utworzyłby dowiązanie symboliczne o nazwie root w twoim katalogu domowym. Prawidłowe użycie to:

ln -s <target> <link-name>

Wyświetlany komunikat o błędzie jest taki, że ./zawsze istnieje i nie można utworzyć łącza o tej nazwie, najlepiej użyć lnpolecenia 2 z obydwoma parametrami, aby zapobiec błędnemu powiązaniu.

Od man ln:

STRESZCZENIE

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

OPIS

W 1. formularzu utwórz link TARGETz nazwą LINK_NAME. W drugim formularzu utwórz link do TARGETbieżącego katalogu. W 3. i 4. formularzu utwórz linki do każdego TARGETw DIRECTORY. Domyślnie twórz twarde linki, symboliczne linki --symbolic. Domyślnie każde miejsce docelowe (nazwa nowego łącza) nie powinno już istnieć 4 . Podczas tworzenia twardych linków każdy TARGETmusi istnieć. Dowiązania symboliczne mogą zawierać dowolny tekst; jeśli zostanie później rozwiązany, odnośnik względny jest interpretowany w odniesieniu do jego katalogu nadrzędnego.

Obowiązkowe argumenty dla długich opcji są obowiązkowe również dla krótkich opcji.

OPCJE

Ostatnim parametrem jest <link-name>domyślnie ostatnia część celu. Kiedy więc celem jest /path/dirnazwa łącza, domyślnie będzie to nazwa, dirjeśli nie zostanie podana. 1 A jeśli na przykład utworzysz za ~/etcpomocą, mkdir ~/etca następnie uruchomisz ln -s /etcw ~nim, nie możesz utworzyć łącza, ponieważ nazwa / katalog już istnieje. 3)

Możesz zobaczyć link utworzony w twoim katalogu domowym (tutaj jako przykład, oczywiście możesz nazwać go tak, jak chcesz):

$ ls -l ~/root
lrwxrwxrwx 1 videonauth videonauth 1 Dez 14 00:28 root -> /

1 Podziękowania dla @thomasrutter za zwrócenie na to uwagi.
2 Zobacz także man linki man symlink
3 Podziękowania dla @steeldriver za podanie przykładu w komentarzach.
4 Część podkreślona do podkreślenia w tekście, ponieważ jest istotna dla pytania.

Videonauth
źródło
pozostaje mi tylko ln -s /etcjedno pytanie: dlaczego polecenie powinno działać, ale nie to? Dzięki za odpowiedź,
Ankur S
Jest tworzony, ponieważ ma nazwę katalogu, /może być rootem lub może być składnikiem ścieżki, więc program nie może wiedzieć, co teraz oznacza. /etcjest po prostu wyraźną ścieżką do odróżnienia.
Videonauth,
7
@AnkurSonawane, ponieważ zawsze./ będzie istniał - mało prawdopodobne. Spróbuj najpierw, a potem - dostaniesz./etcmkdir etcln -s /etcFile exists
steeldriver
8
Ostatni parametr, nazwa-linku, domyślnie przyjmuje ostatnią część celu, jeśli zostanie pominięty. Kiedy więc celem jest /some/dirnazwa łącza, domyślnie będzie to nazwa, dirjeśli nie zostanie podana. Kiedy cel jest po prostu /, to nie zadziała.
thomasrutter
Nie wydaje mi się, aby to niezwykle znaczące, ale wyjaśnienie @steeldriver brzmiało bardziej rozsądnie, biorąc pod uwagę File Existswynik. Nie znaczy to, że i tak ma to znaczenie, ponieważ jest to przypadek zdegenerowany
Ankur S,