LINUX.ORG.RU

Ламерский вопрос по символьным ссылкам

 ,


0

1

Объясните мне, почему вот так работает нормально и создаёт нормальный линк на нужную директорию:

ln -s /sdb-mnt/fehhner/git /home/fehhner/
А если я делаю так:
cd /sdb-mnt/fehhner
ln -s git ~/
То при попытке cd /home/fehhner/git, вываливается это:
cd:cd:6: too many levels of symbolic links: git
Не могу понять, почему так происходит?

★★★★★

У тебя во второй команде cd ничего не делает для следующего ln, а ln создаёт циклическую ссылку git -> git в хомяке.

anonymous ()
Ответ на: комментарий от anonymous

Кстати странно что на такое не вставили проверку.

anonymous ()
Ответ на: комментарий от anonymous

хмм, просто я думал, что по логике перешёл в директорию, где находится папка git, а затем создаю на неё символьную ссылку в хомяк, не указывая полный путь, раз она находится в этой же директории.

fehhner ★★★★★ ()
Ответ на: комментарий от fehhner

Можно сделать ln -s ZhOpA ~ и оно отработает создав битую ссылку вникуда. Ссылка создаются как как указано, а не как оно есть.

anonymous ()
Ответ на: комментарий от fehhner

ln глубоко фиолетов текущий путь. Суть в том, что симлинки бывают на путь, а пусть бывает абсолютный и относительный. В случае симлинка относительный путь отсчитывается от местоположения симлинка. Так ты например можешь создать симлинк на ../lib в каталоге bin. Он будет указывать на каталог либ, находящийся на уровень выше, чем лежит симлинк. Ты можешь этот симлинк переместить — он начнёт указывать на новое место (на новый каталог уровнем выше и каталог lib уже в нём), упаковать в его в tar и т.д., симлинк не перестанет быть относительным. В нём тупо записан путь. Такой, как ты задал в команде — абсолютный (начинающийся со слеша) или относительный (начинающийся с чего угодно ещё. Если ты хочешь, чтобы текущий путь учитывался, у ln есть ключ -r (то есть вызывать ln -rs вместо ln -s).

Psych218 ★★★★★ ()
Ответ на: комментарий от anonymous

Понятно. Только обратил на это внимание почему-то, раньше всегда полный путь указывал, да и не часто необходимость. Мне это кажется совсем нелогичным в общем-то (например, находясь в какой-то директории, я могу открыть файл в nano, не указывая полный путь к нему, либо же выполнить команду cd, не указывая полный путь и вообще множество команд над каким-нибудь файлом/папкой). Но за разъяснения в общем-то спасибо.

fehhner ★★★★★ ()
Ответ на: комментарий от fehhner

Ну что странного? Команда ln принимает в качестве первого аргумента «значение ссылки, куда она ведёт», а в качестве второго — путь к создаваемой ссылке. Вот представь, ты делаешь echo "tmp/git" > $HOME/git-link. В $HOME/git-link будет записана строка «tmp/git», без слеша в начале, независимо от того, куда ты там до этого сделал cd. С симлинком примерно так же, его значение — строка. Ты можешь сделать симлинк на файл, которого вообще не существует, можешь находясь в корне сделать симлинк на ../../../../.., причём сам симлинк в корне же. Конечно он будет некорректным, но если ты его перенесёшь в глубокий каталог, он станет корректным. И это (относительные пути) нередко имеет смысл (особенно если паковать симлинки в tar). Симлинк это своего рода файл, пусть и необычный, со строкой. Что писать в эту строку, команде ln (в случае симлинка) в принципе всё равно.

Psych218 ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.