2013-07-19 31 views
18

Pobrałem pakiet linux Tor Browser, który jest samodzielnym folderem. Tworzyłem dowiązanie symboliczne do skryptu uruchamiania:Symlink zepsute zaraz po utworzeniu

$ ln -s torbrowser/start-tor-browser ~/bin/torbrowser 

Jednak połączenie zostało przerwane po utworzeniu. Wszystko, co zrobiłem, to polecenie, nic więcej, i zostało złamane. Zrobiłem ls i otrzymała:

lrwxrwxrwx 1 synful synful 28 Jul 18 21:52 torbrowser -> torbrowser/start-tor-browser 

... co jest dziwne, bo torbrowser/start-torbrowser miał 755 uprawnień. Ponadto, wpadłem file:

$ file ~/bin/torbrowser 
bin/torbrowser: broken symbolic link to `torbrowser/start-tor-browser' 

Zrobiłem nowy skrypt bash i dowiązania do niego, aby przetestować ten, a nie miał takich problemów. Nie wiem, dlaczego tak się dzieje tylko z przeglądarką startową. Ma normalne uprawnienia i jest zwykłym skryptem bash (nawet zgodnie z poleceniem file).

... jakieś pomysły?

Odpowiedz

34

Ważne jest, aby wiedzieć, że

ln -s SOURCE TARGET 

utworzyć dowiązanie symboliczne o nazwie docelowej, która jest symbolicznie związana z ciągiemSOURCE. Jeśli SOURCE jest ścieżką względną (to znaczy, że nie rozpoczyna się od /), to jest interpretowane względem katalogu, w którym znajduje się TARGET. Jeśli jest to ścieżka bezwzględna, to jest to ścieżka bezwzględna. Jeśli jest to ciąg znaków, który nie może być ścieżką lub zawiera nieistniejącą ścieżkę lub plik lub w inny sposób nie jest prawidłowym ciągiem znaków, nie ma znaczenia. ln -s nie sprawdza, czy SOURCE istnieje, czy nawet jest poprawną ścieżką. Możesz przechowywać prawie każdy krótki ciąg, który chciałeś mieć w sobie.

Więc kiedy to zrobić:

$ ln -s torbrowser/start-tor-browser ~/bin/torbrowser 

co robisz jest, z grubsza:

  1. utworzyć wpis do katalogu wewnątrz podkatalogu bin z nazwą torbrowser.
  2. sprawi że nowy wpis katalogu dowiązanie symboliczne (symlink) do (względnej) Ścieżka torbrowser/start-tor-browser

Nowe dowiązanie jest okrągła. ~/bin/torbrowser jest połączony z ~/bin/torbrowser/start-tor-browser, co oznacza, że ​​musisz użyć dowiązania symbolicznego, aby rozwiązać dowiązanie symboliczne. Jeśli spróbujesz go używać, zobaczysz:

$ cat ~/bin/torbrowser 
cat: /home/joshlf13/bin/torbrowser: Too many levels of symbolic links 
$ 

Czasami - często nawet - zdolność do linku do ścieżki względnej jest bardzo poręczny. Typowym zastosowaniem jest pozbycie się numerami wersji:

$ ln -s apps/my_fancy_app_v2.63.1 apps/my_fancy_app 

Teraz nie tylko mogę zadzwonić my_fancy_app bez pamiętając to wersja ciąg, mogę również przenieść cały folder gdzie indziej, bez rozbijania dowiązania:

$ mv apps /usr/local/apps 

Ale innym razem - jak na twoim przykładzie, myślę - potrzebujesz symbolicznego połączenia z absolutną ścieżką.

Jeśli chodzi o uprawnienia, dowiązania symboliczne zawsze mają uprawnienia lrwxrwxrwx, ponieważ rzeczywiste uprawnienia używane przez operacje na plikach są uprawnieniami do prawdziwego pliku. (Można to rozumieć w ten sposób, że każdy może podążać za dowiązaniem symbolicznym, ale to nie jest do końca prawda: oni również potrzebowaliby uprawnień do odczytu dla każdego katalogu, który muszą przestrzegać. Dokładniej, każdy, kto może zobaczyć dowiązanie symboliczne, może zobaczyć nazwę, punkty, nawet jeśli nie mają one dostępu do pliku o tej nazwie

+0

To doskonały; dzięki! – joshlf

+0

Ważne jest, aby umieścić pełną ścieżkę, aby nie uzyskać uszkodzonego linku. –

0

wyżej użytkowania danego dla ln.

ln -s źródle

jest poprawna, ale mylące gdy mowa strona man:

ln [OPTIO N] ... [-T] TARGET LINK_NAME (1st forma)

jako 'TARGET' ma inne znaczenie

+0

Konsekwentnie z cp: 'cp existing new'. Podobnie: 'ln -s existing new' – Hrobky

Powiązane problemy