# ln -sv /path/to/target /path/to/link
‘/path/to/link’ -> ‘/path/to/target’
Jetzt möchte ich dieses Ziel durch target2 ersetzen:
# ln -sfv /path/to/target2 /path/to/link
‘/path/to/link/target2’ -> ‘/path/to/target2’
Whoa! Was ist dort passiert? Nachgestellte Schrägstriche haben keinerlei Auswirkung:
ln -sfv /path/to/target2/ /path/to/link
‘/path/to/link/target2’ -> ‘/path/to/target2/’
# ln -sfv /path/to/target2/ /path/to/link/
‘/path/to/link/target2’ -> ‘/path/to/target2/’
# ln -sfv /path/to/target2 /path/to/link/
‘/path/to/link/target2’ -> ‘/path/to/target2’
Wie zu erreichen ’/path/to/link’ -> ’/path/to/target2’
?
quelle
Die Antwort von l0b0 ist gut. Es ist einfach und daher meistens die beste Option für die Verwendung in der Befehlszeile. In einigen Fällen ist es Ihnen jedoch wichtig, dass es nicht atomar ist.
ln -sf
Löscht zuerst den alten Symlink und erstellt dann den neuen. Es gibt also einen kurzen Zeitraum, in dem kein Symlink vorhanden ist.Wenn Sie vorsichtig sein müssen, sollten Sie den neuen Symlink an einem temporären Speicherort erstellen
mv
es an Ort und Stelle.Hier gibt es eine rubinrote Implementierung davon: http://blog.moertel.com/posts/2005-08-22-how-to-change-symlinks-atomically.html . Es wäre jedoch einfach in jeder Sprache zu implementieren. Überlegen Sie, warum es nicht das Standardverhalten von ln ist.
quelle