Как ни странно,
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, который существует (и фактически является тем, что вы хотите).