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?


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.


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,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.