Potrzebuję dowiązania symbolicznego, które rozpoznaje w stosunku do katalogu, w którym się znajduje. Jakie polecenie służy do stworzenia takiej rzeczy?
Potrzebuję dowiązania symbolicznego, które rozpoznaje w stosunku do katalogu, w którym się znajduje. Jakie polecenie służy do stworzenia takiej rzeczy?
Odpowiedzi:
ln -s ../some/other/file linkname
Podana ścieżka jest przechowywana w pliku. Podczas uzyskiwania dostępu do pliku zapisana ścieżka jest wyszukiwana i rozwijana względem pliku. Nie wie, w jakim katalogu byłeś podczas tworzenia linku.
ln -s ../some/other/file /some/dir/linkname
ln -s ./file linkname
ponieważ .
odnosi się do bieżącego katalogu.
ln -s somedir/original-dir link-name
nie działa. Tworzy katalog o nazwie link-name
zawierającej niepoprawny link. Polecenie, które działa, toln -sr somedir/original-dir link-name
Najnowsze wersje GNU coreutils 'ln (> = 8.16) obsługują opcję --relative
(lub -r
), co oznacza, że możesz wywoływać ln -s
2 ścieżkami bezwzględnymi lub względnymi (w odniesieniu do katalogu roboczego) i obliczy poprawną ścieżkę względną, która musi być napisane do dowiązania symbolicznego.
-r
opcja jest przydatna, gdy kompilujesz się między sobą i potrzebujesz bezwzględnych ścieżek na hoście kompilacji, ale ścieżek względnych na celu.
ln -r -s targetfile myalias
może pomóc to naprawić
To, co musisz zrozumieć, to w zasadzie to, że dowiązanie symboliczne bardziej przypomina plik tekstowy niż pozycję katalogu, która zawiera plik. Więc jeśli ty
echo ../poo >/file/name
to jest całkiem podobne do
ln -s ../poo /file/name
System nie dba o to, czy /file/../poo
w ogóle istnieje, to tylko fragment tekstu, który zostaje umieszczony w dowiązaniu symbolicznym. Kiedy coś próbuje otworzyć dowiązanie symboliczne, wtedy system próbuje to rozwiązać.
Jeśli używasz powłoki z uzupełnianiem nazw plików, ta funkcja może wprowadzać w błąd, umożliwiając uzupełnienie nazwy pliku względem bieżącego katalogu roboczego, nawet jeśli ostatecznie użyjesz go jako celu dowiązania symbolicznego w zupełnie innym katalogu.
<
zmiany jak system przydzielona pamięć. Oczywiście <
w tym katalogu nie ma nazwy pliku , jest to po prostu tani sposób na stworzenie bardzo małej, podobnej do pliku rzeczy, która ma pewne atrakcyjne właściwości w stosunku do zwykłego pliku tekstowego na tej konkretnej platformie.
Względne linki były dla mnie trudne w OS X, tj
~/Dropbox/git/dave-bot $ ln -s ../codyhess/bin ~/bin
~/Dropbox/git/dave-bot $ ln -s ../codyhess/bin/ ~/bin
oba nie działały (coś zostało utworzone, ale to nie był katalog). Utworzyłem pożądany link za pomocą ścieżek bezwzględnych .
~/Dropbox/git/dave-bot $ ln -s ~/Dropbox/git/codyhess/bin/ ~/bin
ln -s Dropbox/git/codyhess/bin ~/bin
Chciałem tylko wyjaśnić, jak utworzyć dowiązanie symboliczne przy użyciu ścieżek względnych (ze szczegółowym przykładem).
Jak wspomniano w komentarzach Ignacio Vazquez-Abrams, musisz określić lokalizację pliku / folderu w odniesieniu do miejsca, w którym zostanie utworzone dowiązanie symboliczne, a nie w stosunku do bieżącego katalogu.
PRZYKŁAD
Jesteś w /usr/share/nginx/html/_src/learn
Utworzysz dowiązanie symboliczne coding
w/usr/share/nginx/html
Utwórz względne dowiązanie symboliczne (teorię):
sudo ln -s /path/to/source/file-or-folder/relative/from/symlink /path/to/symlink/relative/to/current/location
Utwórz rzeczywiste względne dowiązanie symboliczne:
sudo ln -s ./_src/learn/coding ../../coding
Więcej informacji (ten sam przykład)
current path: /usr/share/nginx/html/_src/learn
symlink(to be) relative to current path: ../../coding
symlink location (absolute): /usr/share/nginx/html/coding
folder/file relative to symlink location: ./_src/learn/coding
folder/file absolute path: /usr/share/nginx/html/_src/learn/coding