Обычно эта команда работает отлично, но эта ln -si GIT/Settings/session ./.mozilla/firefox/foo.default/
просто создает какую-то неработающую ссылку, отображаемую в виде файла.
Почему это?
Даже sudo ln -fs
не работает.
Есть предложения, как это сделать?
Заранее спасибо.
решение1
Как бы странно это ни звучало,
ln -si ../../../GIT/Settings/session ./.mozilla/firefox/foo.default/
сделает то, что вы хотите. Правило здесь заключается в том, что вы должны указывать цели ссылок относительно места, где вы размещаете ссылку.
В файловых системах Unix и Unix-подобных файловых системах символическая ссылка на самом деле является специальным файлом, содержимое которого является путем. Ввод создает символическую ссылку по адресуln path filename
имя файлачье содержимоепуть. Так что если, например, вы наберете
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)