Erstellen eines symbolischen Links außerhalb des Arbeitsverzeichnisses

Erstellen eines symbolischen Links außerhalb des Arbeitsverzeichnisses

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 -fsFunktioniert 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 filenameDateinamederen 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)

verwandte Informationen