Próbuję użyć dowiązań symbolicznych. Przeczytałem i znalazłem następujące polecenia:
Creation -> ln -s {/path/to/file-name} {link-name}
Update -> ln -sfn {/path/to/file-name} {link-name}
Deletion -> rm {link-name}
Kreacje i usunięcia działają dobrze. Ale aktualizacje nie działają. Po wykonaniu tego polecenia dowiązanie symboliczne traci ważność.
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ąć?
Aktualizacja
Oto moja struktura 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
Od ~/scripts/test/
kiedy wykonuję:
ln -s /remote_loc/site1 test_link
a test_link
jest tworzone i mogę ls -l
, ale wydaje się, że jest zepsute (w przeciwieństwie do tego, co powiedziałem powyżej w moim pytaniu).
Jak mogę wykonać łącze na poziomie wielu katalogów?
update
symbolic-link
Jérôme Verstrynge
źródło
źródło
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.-n
? (może być problem). Również jeśli Twój ln obsługuje,-t
użyj go, w tych przypadkach i-T
lubdestination/
w innych przypadkach.Odpowiedzi:
Używanie
-f
zln
spowoduje nadpisanie każdego linku, który już tam był, więc dopóki masz odpowiednie uprawnienia, powinno działać ... To zawsze działało dla mnie. Jakiego systemu operacyjnego używasz?źródło
ln
parametry, co mam skłonność, czy-f
przełącznik zniszczy twoje istniejące pliki (cele docelowe)? W obu przypadkach mamy również-i
parametr (który poprosi użytkownika o zastąpienie), jeśli chcesz trochę bezpieczeństwa.-f
tylko połączeniaunlink()
ilink()
pod maską: stackoverflow.com/a/1466570/157385 . Chciałbym tylko zapamiętać prawidłową kolejność!-n
. Zobacz zaakceptowaną odpowiedź.Ok, znalazłem, gdzie jest mój błąd: nie należy stawiać pierwszego
/
na ścieżce.Innymi słowy, polecenia w moich pytaniach powinny brzmieć:
zamiast
rozważając moją sprawę.
źródło
relative
ścieżka (bez wiodącego /), a druga toabsolute
ścieżka (z wiodącym /). Jeśli administrujesz systemem Linux, KRYTYCZNE jest zrozumienie różnic. Na przykład różnica międzyrm -rf ./*
irm -rf /.*
decyduje, czy pozostaniesz w pracy, czy nie :)-n
parametrem zastępującym łącze symboliczne.Pierwsza sprawa:
Cytując cię:
Problem z podaną strukturą katalogów:
i za pomocą polecenia:
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ę:
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ć:
Aktualizowanie dowiązań symbolicznych do celów, które nie są katalogami.
Przykład:
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:
Przykład:
Jednak aktualizacja łącza do katalogu nie będzie działać, jeśli celem jest katalog.
Przykład:
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:
Przykład:
W przeciwieństwie do:
źródło
źródło