So aktualisieren Sie ein symbolisches Link-Ziel (ln -f -s funktioniert nicht)
45
Ich benutze
ln -f -s / var / www / html / releases / build1390 app-current
um den symbolischen Link "app-current" mit einem neuen Ziel zu aktualisieren. Dies funktioniert jedoch nicht, der Link "app-current" behält das ursprüngliche Ziel bei, es werden jedoch keine Fehler angezeigt ...
Ich möchte den Link lieber nicht entfernen und neu erstellen, sondern nur das Ziel eines vorhandenen Links aktualisieren. Ist das möglich?
Das funktioniert für mich, was ist die Ausgabe von strace ln -f -s /var/www/html/releases/build1390 app-current?
Oh, da es sich um ein Verzeichnis handelt, das Sie -nohne Dereferenzierung hinzufügen müssen, sollte dies das Problem lösen. -fist wirklich bequemer, da das Hinzufügen von -f die Verknüpfung sowieso aufhebt. Obwohl ich denke, dass es auf einem normal geladenen System wahrscheinlich einige hundert ms schneller passieren würde.
Also, ohne dass der -nArf dereferenziert wird, wird er als Arf behandelt, als ob er tatsächlich wäre /. Wenn in Ihrem speziellen Beispiel kein Fehler vorliegt, haben Sie wahrscheinlich einen neuen symbolischen Link innerhalb von erstellt /var/www/html/releases/build1390 app-currentund möchten diesen bereinigen.
toll, es ist das -n, das es geschafft hat. Danke vielmals!
Solsol
12
Sie können mit -noder --no-dereferenceverhindern, dass das Ziel dereferenziert wird, wenn es sich um einen Symlink handelt. Sie können auch -Toder verwenden, --no-target-directoryum sicherzustellen, dass die Zieldatei immer als reguläre Datei behandelt wird.
Diese erzeugen ein etwas anderes Verhalten, wie das folgende Beispiel zeigt. Angenommen, es srchandelt sich um eine Datei, dirlinkeinen Symlink zu einem Verzeichnis und direin tatsächliches Verzeichnis.
Verwenden von -n:
ln -sfn src dirlinküberschreibt dirlinkund verknüpft es mitsrc
ln -sfn src dir schafft Verbindung dir/src -> src
Verwenden von -T:
ln -sfT src dirlinküberschreibt dirlinkund verknüpft es mitsrc
ln -sfT src dir erzeugt eine Fehlermeldung: ln: ‘dir’: cannot overwrite directory
hat die richtige und prägnante Antwort für Linux-Benutzer.
Ross
Gibt es eine Möglichkeit, das Überschreiben des Zielverzeichnisses zu erzwingen, sodass die Fehlermeldung nicht angezeigt wird cannot overwrite directory?
Gitaarik
@rednaw Sie können dies tun, indem Sie einige Befehle verketten, aber lnselbst keine Verzeichnisse entfernen - dies wäre wahrscheinlich eine schlechte Idee, da es rekursiv erforderlich wäre, eine möglicherweise große Anzahl von Dateien zu entfernen.
Sie können mit
-n
oder--no-dereference
verhindern, dass das Ziel dereferenziert wird, wenn es sich um einen Symlink handelt. Sie können auch-T
oder verwenden,--no-target-directory
um sicherzustellen, dass die Zieldatei immer als reguläre Datei behandelt wird.Diese erzeugen ein etwas anderes Verhalten, wie das folgende Beispiel zeigt. Angenommen, es
src
handelt sich um eine Datei,dirlink
einen Symlink zu einem Verzeichnis unddir
ein tatsächliches Verzeichnis.Verwenden von
-n
:ln -sfn src dirlink
überschreibtdirlink
und verknüpft es mitsrc
ln -sfn src dir
schafft Verbindungdir/src -> src
Verwenden von
-T
:ln -sfT src dirlink
überschreibtdirlink
und verknüpft es mitsrc
ln -sfT src dir
erzeugt eine Fehlermeldung:ln: ‘dir’: cannot overwrite directory
quelle
cannot overwrite directory
?ln
selbst keine Verzeichnisse entfernen - dies wäre wahrscheinlich eine schlechte Idee, da es rekursiv erforderlich wäre, eine möglicherweise große Anzahl von Dateien zu entfernen.