Если вы создадите символическую ссылку на относительный путь, она сохранит ее как относительную символическую ссылку, а не как абсолютную, как показывает ваш пример. Это вообще хорошая вещь. Абсолютные символические ссылки не работают, когда файловая система смонтирована в другом месте.
Причина, по которой ваш пример не работает, заключается в том, что он относится к родительскому каталогу символической ссылки, а не к тому, где ln
выполняется.
Ты можешь сделать:
$ pwd
/home/beau
$ ln -s foo/bar.txt bar.txt
$ readlink -f /home/beau/bar.txt
/home/beau/foo/bar.txt
Или для этого имеет значение:
$ cd foo
$ ln -s foo/bar.txt ../bar.txt
Важно понимать, что первый аргумент после ln -s
сохраняется как цель символической ссылки. Это может быть любая произвольная строка (с единственными ограничениями, что она не может быть пустой и не может содержать символ NUL), но в то время, когда символическая ссылка используется и разрешается, эта строка понимается как относительный путь к родительский каталог символической ссылки (когда он не начинается с /
).