Ваш вопрос немного запутанный.
Вы спросили: «Могу ли я сделать символическую ссылку на него из
~/dir1
[...]?» Я полагаю, вы имели в виду "от~/dir2
", основываясь на остальной части вашего поста?Ваша первая команда
$ ln -s ./dir1/file.txt ./dir2/file.txt
не делает то, что вы думаете, что делает. Предполагая, что вы все еще находитесь в своем домашнем каталоге, приведенная выше команда создает символическую ссылку, чей собственный путь
~/dir2/file.txt
, и эта символическая ссылка указывает буквально на путь./dir1/file.txt
. Поскольку указанная символическая ссылка находится в каталоге~/dir2
, такой целевой путь разрешается в~/dir2/./dir1/file.txt
, который в дальнейшем разрешается~/dir2/dir1/file.txt
(вероятно, не существует, а не то, что вам нужно). Поэтому я сомневаюсь, почему вы сказали, что это решает~/dir1/dir2/file.txt
.Ваша вторая команда не выполняется, потому что нет директории
../dir2
для вставки символической ссылки, и именно это означало сообщение об ошибке.Чтобы ответить на ваш вопрос, да. ОС не заботится о том, указывает ли ваша символическая ссылка на путь без действительного объекта файловой системы.
Вероятно, то, что вы действительно хотите, это что-то вроде
ln -s ../dir1/file.txt ./dir2/file.txt
Похоже? Эта команда создает символическую ссылку, чей собственный путь ./dir2/file.txt
и ее цель - буквальный относительный путь ../dir1/file.txt
. Последний, абсолютный путь, на который указывает символическая ссылка, - это ~/dir2/../dir1/file.txt
, который разрешает в ~/dir1/file.txt
.
Обратите внимание, что этот ~
символ является расширяемым символом оболочки, который расширяется до абсолютного пути вашего домашнего каталога. ~
-expansion не является частью разрешения пути ОС.
Предлагаемое чтение
Linux страницы руководства по path_resolution(7)
, symlink(7)
, ln(1)
и ln(1p)
.
редактировать
Разъяснения и рекомендуемое чтение.