Поведение символьных ссылок

Я успешно и не успешно созданный символьная ссылка:

У меня есть два каталога

~/foo

и

~/bar

Теперь мне назвали файл baz.txt в этом пути ~/foo. Моя цель состояла в том, чтобы создать символьную ссылку в ~/bar таким образом, я могу получить доступ к нему оттуда также.

Со следующей командой, которую я выполнил в каталоге ~/foo:

ln -s baz.txt ~/bar

Я получил плохую символьную ссылку, которая получила отмеченный красный. Результаты не состояли в том, как я ожидал, и я попробовал что-то еще, что в конечном счете удалось для меня.

Я выполнил эту команду в пути ~/bar

ln -s ~/foo/baz.txt .

Интересно теперь, почему мой первый подход не работал, так как я сослался на свой файл к каталогу, где я хочу иметь свою символьную ссылку. Это смотрит на меня как, я сделал то же самое в обеих командах только в различных каталогах.

2
задан 25 November 2014 в 07:19

1 ответ

Проблема здесь является абсолютной по сравнению с относительными путями. Полный путь /bar/foo/file.txt и относительный путь ./file.txt. Когда Вы работаете ln -s foo.txt /home/ubuntu/central_addcontent/program/, это эквивалентно выполнению

ln -s ./foo.txt /home/ubuntu/central_addcontent/program/

Это создаст названный файл foo.txt это указывает ./foo.txt в целевом каталоге. Это более просто проиллюстрировать с примером, дающим другое название ссылки:

$ ln -s foo.txt /home/terdon/central_addcontent/program/bar.txt
$ ls -l /home/terdon/central_addcontent/program/
total 0
lrwxrwxrwx 1 terdon terdon 7 Nov 25 11:25 bar.txt -> foo.txt

Поскольку Вы видите выше, bar.txt указывает /home/terdon/central_addcontent/program/foo.txt и тот файл не существует. Чтобы сделать это правильно, можно или использовать полный путь foo.txt или используйте относительный путь, но относительно целевого каталога. Оба из них будут работать:

$ ln -s ~/central_app/program/foo.txt ~/central_addcontent/program/
$ l /home/terdon/central_addcontent/program/
total 0
lrwxrwxrwx 1 terdon terdon 40 Nov 25 11:28 foo.txt -> /home/terdon/central_app/program/foo.txt

Или

$ ln -s ../../central_app/program/foo.txt ~/central_addcontent/program/
$ ls -l /home/terdon/central_addcontent/program/
total 0
lrwxrwxrwx 1 terdon terdon 33 Nov 25 11:29 foo.txt -> ../../central_app/program/foo.txt

Во втором примере я использовал относительный путь, но относительно цели ссылки.

3
ответ дан 2 December 2019 в 02:59

Другие вопросы по тегам:

Похожие вопросы: