Der Befehl funktioniert normalerweise einwandfrei, dieser hier ln -si GIT/Settings/session ./.mozilla/firefox/foo.default/
erstellt jedoch nur eine Art defekten Link, der als Datei angezeigt wird.
Warum das?
sudo ln -fs
Funktioniert nicht einmal .
Irgendwelche Vorschläge, wie das geht?
Dank im Voraus.
Antwort1
So seltsam es auch klingen mag,
ln -si ../../../GIT/Settings/session ./.mozilla/firefox/foo.default/
wird tun, was Sie wollen. Als Faustregel gilt, dass Sie Ihre Linkziele relativ zu dem Ort angeben sollten, an dem Sie den Link platzieren.
Unter Unix und Unix-ähnlichen Dateisystemen ist ein symbolischer Link eigentlich eine spezielle Datei, deren Inhalt ein Pfad ist. Die Eingabe von erstellt einen symbolischen Link anln path filename
Dateinamederen Inhalt istWegWenn Sie also beispielsweise
ln foo bar/baz
dann wird Ihr System einen Link namens bar/baz erstellen, der den Pfad "foo" enthält. Dieser Link wird jedoch unterbrochen – wenn Sie versuchen, den Link zu dereferenzieren, dereferenziert Ihr Kernel ihn relativ zumLinkverzeichnis– in diesem Fall bar. Ihr Kernel sucht nach bar/foo, das nicht existiert.
Wenn Sie dagegen
ln ../foo bar/baz
dann erstellt Ihr System einen Link mit dem Namen bar/baz, der den Pfad „../foo“ enthält. Durch Dereferenzierung dieses Links sucht Ihr Kernel nach bar/../foo, das tatsächlich existiert (und tatsächlich das ist, was Sie wollen).
Antwort2
Sie können den vollständigen Pfad der Quell- und Zieldatei verwenden
ln -s (full path to /foo) (full path to bar/baz)