Erste Ausgabe:
Ich zitiere Sie:
Kreationen und Löschungen funktionieren gut. Aber Updates funktionieren nicht. Nach dem Ausführen dieses Befehls wird der Symlink ungültig.
Das Problem mit der angegebenen Verzeichnisstruktur:
~ / scripts / test / ~ / scripts / test / remote_loc / ~ / scripts / test / remote_loc / site1 / ~ / scripts / test / remote_loc / site1 / stuff1.txt ~ / scripts / test / remote_loc / site2 / ~ / scripts /test/remote_loc/site2/stuff2.txt ~ / scripts / test / remote_loc / site2 / ~ / scripts / test / remote_loc / site3 / stuff3.txt
und mit dem Befehl:
ln -s /remote_loc/site1 test_link
Ist dies der Fall, dass eine symbolische Verknüpfung in Ihrem $ PWD oder Ihrem aktuellen Arbeitsverzeichnis erstellt wird, die auf eine nicht vorhandene Datei außerhalb von / oder root unter / remote_loc / site1 verweist
Wenn sich Ihre PWD in ~ / scripts / befindet, sollten Sie dies verwendet haben:
ln -s remote_loc/site1 test_link
Ansonsten hätten Sie den vollständigen absoluten Pfad wie folgt verwenden können:
ln -s /home/yourusername/remote_loc/site1 test_link
Zweite Ausgabe:
Ich zitiere Sie:
Ich habe hier und da gelesen, dass es nicht möglich ist, einen Symlink zu aktualisieren / zu überschreiben. Es gibt also widersprüchliche Informationen im Netz. Wer hat Recht? Wie kann ich dies erreichen, wenn ein Symlink aktualisiert / überschrieben werden kann?
Bei der Beantwortung Ihrer Frage "Wer hat Recht?" Bin ich mir nicht sicher, was Sie genau gelesen haben oder wie es verstanden wurde. Aber das Folgende sollte helfen aufzuklären:
- Was kann aktualisiert werden und
- Was kann nicht aktualisiert werden, ohne entsprechende Schalter zu verwenden.
Aktualisieren von symbolischen Links mit Zielen, die keine Verzeichnisse sind.
ln -sf:
Mit der Option -f oder --force werden vorhandene Zieldateien entfernt. Diese Option wird zum Aktualisieren des Ziels oder Ziels eines Links verwendet.
Beispiel:
ln -sf /tmp/test /tmp/test.link; ls -go /tmp |grep test
-rw-r--r-- 1 0 Jun 8 17:19 test
lrwxrwxrwx 1 9 Jun 8 17:27 test.link -> /tmp/test
Wie Sie jedoch sehen können, wird der absolute Pfad angegeben, wenn absolute Pfade in ln
den Argumenten enthalten sind. Die Angabe eines vollständigen Pfads ist erforderlich, wenn sich das aktuelle Arbeitsverzeichnis vom übergeordneten Verzeichnis des Links unterscheidet.
Relative Pfade:
ln -sfr:
Mit -r oder --relative werden symbolische Links relativ zur Position des Links erstellt.
Beispiel:
ln -sfr /tmp/test /tmp/test.link ; ls -go /tmp| grep test
-rw-r--r-- 1 0 Jun 8 17:19 test
lrwxrwxrwx 1 4 Jun 8 17:27 test.link -> test
Das Aktualisieren eines Links zu einem Verzeichnis funktioniert jedoch nicht, wenn das Ziel ein Verzeichnis ist.
Beispiel:
ln -sf /tmp/testdir /tmp/testdir.link ; ls -go /tmp |grep testdir
drwxr-xr-x 2 4096 Jun 8 17:48 testdir
lrwxrwxrwx 1 7 Jun 8 17:47 testdir.link -> testdir
Wie Sie sehen, ln
ist der symbolische Link trotz der Verwendung der im obigen Argument angegebenen absoluten Pfadnamen ohne die Option -r immer noch relativ zum Link.
Aktualisieren Sie Links zu Verzeichnissen:
ln -sfrn:
Die Option -n oder --no-dereference behandelt LINK_NAME als normale Datei, wenn es sich um eine symbolische Verknüpfung zu einem Verzeichnis handelt.
Beispiel:
ln -sfn /tmp/testdir /tmp/testdir.link; ls -go /tmp| grep testdir
drwxr-xr-x 2 4096 Jun 8 17:48 testdir
lrwxrwxrwx 1 12 Jun 8 17:48 testdir.link -> /tmp/testdir
Im Gegensatz zu:
ln -sfnr /tmp/testdir /tmp/testdir.link; ls -go /tmp| grep testdir
drwxr-xr-x 2 4096 Jun 8 17:48 testdir
lrwxrwxrwx 1 7 Jun 8 17:48 testdir.link -> testdir
unlink
stattrm
. Mitunlink
riskieren Sie nie versehentlich mit falschen Schalter alle Dateien in einem Quellverzeichnis zu verlieren.