Jak mogę utworzyć dowiązanie symboliczne w Terminalu?

351

Jakiego polecenia używa się do utworzenia dowiązania symbolicznego / dowiązania miękkiego?

Patrick
źródło

Odpowiedzi:

542
┌── ln(1) link, ln -- make links
   ┌── Create a symbolic link.
                            ┌── the optional path to the intended symlink
                               if omitted, symlink is in . named as destination
                               can use . or ~ or other relative paths
                      ┌─────┴────────┐
ln -s /path/to/original /path/to/symlink
      └───────┬───────┘
              └── the path to the original file/folder
                  can use . or ~ or other relative paths
$ echo content > original
$ ln -s original symlink
$ ls -la original symlink
-rw-r--r--  1 grgarside  staff    8 28 Jan 18:44 original
lrwxr-xr-x  1 grgarside  staff    8 28 Jan 18:44 symlink -> original
$ cat symlink
content

Więcej informacji na temat ln (1) znajduje się na stronie man .

Ścieżka do dowiązania symbolicznego jest opcjonalna; jeśli pominięty, lndomyślnie czyni związek z tą samą nazwą co do miejsca przeznaczenia, w aktualnym katalogu:

$ cd ~/Documents
$ ln -s ../Pictures
$ ls -l Pictures
lrwxr-xr-x  1 user  staff  11 Feb  1 17:05 Pictures -> ../Pictures

Aby utworzyć dowiązanie symboliczne w celu zastąpienia katalogu systemowego (np. Jeśli chcesz /Userswskazywać inny dysk), musisz wyłączyć ochronę integralności systemu . Możesz go ponownie włączyć po skonfigurowaniu dowiązania symbolicznego.

grg
źródło
63
Gdyby tylko strony podręcznika były tak jasne, jak twoja odpowiedź!
Adrian Lynch
pozwolenie odrzucone: S czy możesz dać mi wskazówkę? próbuje utworzyć dowiązanie symboliczne dla użytkowników, aby móc go używać na innym dysku twardym, a ssd ma właśnie dowiązanie symboliczne. dzięki
Ewoks
2
@patrix Zredagowałem moją odpowiedź, aby wyjaśnić; edytuj dalej.
grg
4
Ciekawostka: oryginał nie musi istnieć. Polecenie ln -s "This directory is no longer in use" READMEbyłoby całkowicie uzasadnione, a wtedy każdy wykonujący ls -lzobaczyłby wiadomość.
Edward Falk
1
Do wykorzystania w przyszłości: Nie musisz się przenosić / Użytkownicy na macOS, aby zaoszczędzić miejsce. Możesz zmienić ścieżki katalogu domowego użytkowników indywidualnie w Preferencjach systemowych w części Użytkownicy i grupy, klikając prawym przyciskiem myszy wpisy listy użytkowników.
Peter W.
73

Komenda nazywa się ln. Jeśli zostanie użyty z opcją -s, utworzy dowiązanie symboliczne w bieżącym katalogu:

ln -s /any/file/on/the/disk linked-file
nohillside
źródło
1
Czy plik połączony musi istnieć jako pierwszy? Otrzymuję błąd nie znaleziono pliku docelowego.
AlxVallejo
2
Plik nie (pojawia się komunikat o błędzie, jeśli tak się dzieje), ale wszystkie katalogi w dowolnej ścieżce. Jeśli utkniesz, możesz zadać nowe pytanie za pomocą przycisku Zadaj pytanie w prawym górnym rogu. Dodaj link do tego pytania, aby podać kontekst.
nohillside
Łącze symboliczne nie powinno istnieć przed uruchomieniem tego polecenia. Ale o ile wiem, wymagana jest ważna ścieżka. Jeśli folder pliku wyjściowego nie istnieje przed uruchomieniem tego polecenia, również pojawi się No such file or directorybłąd.
Deniz Kaplan,
34

Wiem, że to pytanie wyraźnie dotyczy terminalu, ale jeśli jesteś w GUI Land i nie chcesz wchodzić do Terminal Land, możesz użyć SymbolicLinker . Spowoduje to umieszczenie opcji „Utwórz symboliczne łącze” w menu Usługi w Finderze.

Menu kontekstowe folderu, pokazujące podmenu „Usługi” z podświetlonym „Make Symbolic Link”

Menu kontekstowe dla dowiązania symbolicznego z podświetlonym „Make Symbolic Link”

Ben Leggiero
źródło
3
Chciałbym wiedzieć, dlaczego zostało to zanegowane, więc mogę teraz udzielać odpowiedzi wyższej jakości :)
Ben Leggiero
10
prawdopodobnie dlatego, że pytanie brzmiało: „Jak mogę utworzyć łącze symboliczne w terminalu?” Ale nie oddaję cię na głos :)
vedrano
1
@EdwardFalk Myślę, że w El Capitan możesz przytrzymać Command+ Optionpodczas przeciągania pliku ... zaktualizuje odpowiedź później
Ben Leggiero
1
@BenLeggiero To tworzy alias.
Andy Stewart
2
@BenLeggerio, różnica została wyjaśniona tutaj: apple.stackexchange.com/questions/2991/…
MiB
28

To jest po prostu ln -s <source> <destination>.

TheSqrtMinus1
źródło
5

ln -s /some/dir/ ~/Desktop/dir

Możesz także utworzyć dowiązanie symboliczne do katalogu za pomocą tego samego polecenia

ln -s "$(pwd)" ~/Desktop/dir

Aby utworzyć dowiązanie symboliczne do bieżącego katalogu, w którym jesteś.

Gerald
źródło
2
Prosta .(kropka) da pwd. Nie potrzeba żadnych wymyślnych argumentów :)
mylogon,
@mylogon hahaha czasami lubię się zastanawiać. uprościła moją odpowiedź!
Gerald
@mylogon Właśnie zdałem sobie sprawę, że .nie działa na macOS. nie próbowałem jeszcze na Linuksie. użycie ./skutkowało tym, foo -> ./fooco wskazuje na siebie.
Gerald
Jakie jest pełne polecenie, które wpisałeś?
mylogon,