it-swarm.com.de

Wie überschreibe / aktualisiere ich einen Symlink?

Ich versuche symbolische Links zu verwenden. Ich habe etwas gelesen und die folgenden Befehle gefunden:

Creation -> ln -s {/path/to/file-name} {link-name}
Update -> ln -sfn {/path/to/file-name} {link-name}
Deletion -> rm {link-name}

Kreationen und Löschungen funktionieren einwandfrei. Updates funktionieren jedoch nicht. Nach Ausführung dieses Befehls wird der Symlink ungültig.

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?

pdate

Hier ist meine 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

Von ~/scripts/test/, wenn ich spiele:

ln -s /remote_loc/site1 test_link

ein test_link wird erstellt und ich kann ls -l es, aber es scheint kaputt zu sein (im Gegensatz zu dem, was ich oben in meiner Frage gesagt habe).

Wie kann ich eine Verknüpfung auf mehreren Verzeichnisebenen durchführen?

200

Ok, ich habe herausgefunden, wo mein Fehler ist: Man sollte nicht den ersten / In den Pfad setzen.

Mit anderen Worten, die Befehle in meinen Fragen sollten sein:

Creation -> ln -s {path/to/file-name} {link-name}
Update -> ln -sfn {path/to/file-name} {link-name}

anstatt

Creation -> ln -s {/path/to/file-name} {link-name}
Update -> ln -sfn {/path/to/file-name} {link-name}

unter Berücksichtigung meines Falles.

130

Verwenden von -f with ln überschreibt jeden Link, der bereits vorhanden war. Solange Sie die richtigen Berechtigungen haben, sollte es funktionieren ... Es hat immer für mich funktioniert. Welches Betriebssystem verwenden Sie?

163
Sirch

Erste Ausgabe :

Zitiere dich:

Kreationen und Löschungen funktionieren einwandfrei. Updates funktionieren jedoch nicht. Nach Ausführung 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, dass es einen symbolischen Link in Ihrem $ PWD oder aktuellen Arbeitsverzeichnis erstellt, der auf eine nicht vorhandene Datei aus dem/oder root unter/remote_loc/site1 verweist

Wenn sich Ihre PWD in ~/scripts/befindet, sollten Sie Folgendes verwenden:

ln -s remote_loc/site1 test_link

andernfalls hätten Sie den vollständigen absoluten Pfad wie folgt verwenden können:

ln -s /home/yourusername/remote_loc/site1 test_link

Zweite Ausgabe :

Zitiere dich:

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. Folgendes sollte jedoch zur Aufklärung beitragen:

  1. Was kann aktualisiert werden, und
  2. Was kann nicht ohne entsprechende Schalter aktualisiert werden.


Aktualisieren symbolischer Links mit Zielen, die keine Verzeichnisse sind.

ln -sf :
Mit -f oder --force werden vorhandene Zieldateien entfernt. Hiermit wird das Ziel oder Ziel eines Links aktualisiert.

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 sehen können, wird der absolute Pfad angegeben, wenn sich absolute Pfade in den Argumenten von ln befinden. Die Angabe eines vollständigen Pfads ist erforderlich, wenn sich das aktuelle Arbeitsverzeichnis vom übergeordneten Verzeichnis des Links unterscheidet.


Relative Pfade :

ln -sfr :
Das -r oder --relative erstellt symbolische Links relativ zur Position des Links.

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 können, ist der symbolische Link trotz der Verwendung der im obigen Argument von ln angegebenen absoluten Pfadnamen ohne die Option -r immer noch relativ zum Link.


Links zu Verzeichnissen aktualisieren :

ln -sfrn :
Die -n- oder --no-Dereferenzierung 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
13
Keith Reynolds
$ touch test1 test2
$ ln -sf test2 test1
$ ls -l test[12]
lrwxrwxrwx 1 user01 user01 5 2012-05-17 14:41 test1 -> test2
-rw-r--r-- 1 user01 user01 0 2012-05-17 14:41 test2
7
jirib