2

команда обычно работает как талисман, но это ln -si GIT/Settings/session ./.mozilla/firefox/foo.default/ просто создает неработающую ссылку, отображаемую в виде файла.

Это почему?

Даже sudo ln -fs не работает.

Любые предложения, как это сделать?

Заранее спасибо.

2 ответа2

4

Как ни странно,

ln -si ../../../GIT/Settings/session ./.mozilla/firefox/foo.default/

будет делать то, что вы хотите. Основное правило заключается в том, что вы должны указывать целевые ссылки относительно места, где вы размещаете ссылку.

В Unix и Unix-подобных файловых системах символическая ссылка на самом деле является специальным файлом, содержимое которого представляет собой путь. Ввод ln path filename создает символическую ссылку на имя файла , содержимое которого является path. Так что, если, например, вы вводите

ln foo bar/baz

тогда ваша система создаст ссылку с именем bar/baz, содержащую путь "foo". Эта ссылка, однако, будет разорвана - когда вы пытаетесь разыменовать ссылку, ваше ядро разыменовывает ее относительно каталога ссылок - в данном случае, bar. Ваше ядро будет искать bar/foo, которого не существует.

Если, с другой стороны, вы вводите

ln ../foo bar/baz

тогда ваша система создаст ссылку с именем bar/baz, содержащую путь "../foo". Разыменовывая эту ссылку, ваше ядро будет искать bar/../foo, который существует (и фактически является тем, что вы хотите).

2

Вы можете использовать полный путь исходного и целевого файла

ln -s (full path to /foo) (full path to bar/baz)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .