Pierwsza sprawa:
Cytując cię:
Kreacje i usunięcia działają dobrze. Ale aktualizacje nie działają. Po wykonaniu tego polecenia dowiązanie symboliczne traci ważność.
Problem z podaną strukturą katalogów:
~ / scripts / test / ~ / scripts / test / remote_loc / ~ / scripts / test / remote_loc / site1 / ~ / scripts / test / remote_loc / site1 / stuff1.txt ~ / scripts / test / remote_loc / site2 / ~ / scripts /test/remote_loc/site2/stuff2.txt ~ / scripts / test / remote_loc / site2 / ~ / scripts / test / remote_loc / site3 / stuff3.txt
i za pomocą polecenia:
ln -s /remote_loc/site1 test_link
Czy tworzy symboliczne łącze w twoim $ PWD lub obecnym katalogu roboczym, który wskazuje na nieistniejący plik poza / lub rootem w / remote_loc / site1
Jeśli twoje PWD jest w ~ / scripts /, powinieneś był użyć tego:
ln -s remote_loc/site1 test_link
w przeciwnym razie mógłbyś użyć pełnej ścieżki bezwzględnej, takiej jak:
ln -s /home/yourusername/remote_loc/site1 test_link
Drugi numer:
Cytując cię:
Przeczytałem tu i tam, że nie można zaktualizować / zastąpić dowiązania symbolicznego. W sieci są więc sprzeczne informacje. Kto ma rację? Jeśli dowiązanie symboliczne może zostać zaktualizowane / zastąpione, jak mogę to osiągnąć?
Odpowiadając na pytanie „Kto ma rację”, nie jestem pewien, co dokładnie przeczytałeś ani jak to zrozumiano. Ale następujące powinny pomóc wyjaśnić:
- Co można zaktualizować, i
- Czego nie można zaktualizować bez użycia odpowiednich przełączników.
Aktualizowanie dowiązań symbolicznych do celów, które nie są katalogami.
ln -sf:
-f lub --force usuwa istniejące pliki docelowe, służy do aktualizacji celu lub miejsca docelowego łącza.
Przykład:
ln -sf /tmp/test /tmp/test.link; ls -go /tmp |grep test
-rw-r--r-- 1 0 Jun 8 17:19 test
lrwxrwxrwx 1 9 Jun 8 17:27 test.link -> /tmp/test
Ale, jak widać, poda ścieżkę bezwzględną, jeśli ln
argumentami są ścieżki bezwzględne . Podanie pełnej ścieżki jest konieczne, gdy obecny katalog roboczy jest inny niż katalog macierzysty łącza.
Ścieżki względne:
ln -sfr:
-r lub --relative tworzy dowiązania symboliczne względem lokalizacji łącza.
Przykład:
ln -sfr /tmp/test /tmp/test.link ; ls -go /tmp| grep test
-rw-r--r-- 1 0 Jun 8 17:19 test
lrwxrwxrwx 1 4 Jun 8 17:27 test.link -> test
Jednak aktualizacja łącza do katalogu nie będzie działać, jeśli celem jest katalog.
Przykład:
ln -sf /tmp/testdir /tmp/testdir.link ; ls -go /tmp |grep testdir
drwxr-xr-x 2 4096 Jun 8 17:48 testdir
lrwxrwxrwx 1 7 Jun 8 17:47 testdir.link -> testdir
Jak widać, pomimo użycia bezwzględnych nazw ścieżek podanych w ln
powyższym argumencie bez opcji -r, dowiązanie symboliczne jest nadal względne względem dowiązania.
Zaktualizuj łącza do katalogów:
ln -sfrn:
-n lub --no-dereference traktuje LINK_NAME jako normalny plik, jeśli jest dowiązaniem symbolicznym do katalogu.
Przykład:
ln -sfn /tmp/testdir /tmp/testdir.link; ls -go /tmp| grep testdir
drwxr-xr-x 2 4096 Jun 8 17:48 testdir
lrwxrwxrwx 1 12 Jun 8 17:48 testdir.link -> /tmp/testdir
W przeciwieństwie do:
ln -sfnr /tmp/testdir /tmp/testdir.link; ls -go /tmp| grep testdir
drwxr-xr-x 2 4096 Jun 8 17:48 testdir
lrwxrwxrwx 1 7 Jun 8 17:48 testdir.link -> testdir
unlink
zamiastrm
. Dzięki temuunlink
nigdy nie ryzykujesz utraty plików w katalogu źródłowym przez przypadkowe użycie niewłaściwych przełączników.