Ich versuche symbolische Links zu verwenden. Ich habe ein bisschen 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 gut. Aber Updates funktionieren nicht. Nach dem Ausführen 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?
Aktualisieren
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
Ab ~/scripts/test/
wann ich aufführe:
ln -s /remote_loc/site1 test_link
a test_link
ist erschaffen und ich kann ls -l
es, aber es scheint kaputt zu sein (entgegen dem, was ich oben in meiner Frage gesagt habe).
Wie kann ich eine Verknüpfung auf mehreren Verzeichnisebenen durchführen?
quelle
unlink
stattrm
. Mitunlink
riskieren Sie nie versehentlich mit falschen Schalter alle Dateien in einem Quellverzeichnis zu verlieren.-n
? (Kann das Problem sein). Auch wenn Ihr ln unterstützt-t
verwendet es dann, für diese Fälle, und-T
oderdestination/
für andere Fälle.Antworten:
Die Verwendung von
-f
withln
überschreibt jeden Link, der bereits vorhanden war. Solange Sie die richtigen Berechtigungen haben, sollte dies funktionieren. Es hat immer bei mir funktioniert. Welches Betriebssystem verwenden Sie?quelle
ln
Parameter ändern, wie ich es gerne tue, zerstört der-f
Schalter dann Ihre vorhandenen Dateien (Verknüpfungsziele)? In beiden Fällen haben wir auch den-i
Parameter (der den Benutzer zum Überschreiben auffordert), wenn Sie etwas Sicherheit wünschen.-f
nur Anrufeunlink()
undlink()
unter der Haube: stackoverflow.com/a/1466570/157385 . Ich wünschte, ich würde mich nur an die richtige Reihenfolge erinnern!-n
. Siehe akzeptierte Antwort.Ok, ich habe festgestellt, wo mein Fehler liegt: man sollte nicht den ersten
/
in Pfad setzen.Mit anderen Worten, die Befehle in meinen Fragen sollten sein:
Anstatt von
wenn ich meinen Fall betrachte.
quelle
relative
Pfad (ohne das führende /) und der andere ist einabsolute
Pfad (mit dem führenden /). Wenn Sie ein Linux-System verwalten, ist es entscheidend, dass Sie die Unterschiede verstehen. Zum Beispiel entscheidet der Unterschied zwischenrm -rf ./*
undrm -rf /.*
, ob Sie Ihren Job behalten oder nicht :)-n
Parameter zum Ersetzen der Symbolverknüpfung sein.Erste Ausgabe:
Ich zitiere Sie:
Das Problem mit der angegebenen Verzeichnisstruktur:
und mit dem Befehl:
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:
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:
Aktualisieren von symbolischen Links mit Zielen, die keine Verzeichnisse sind.
Beispiel:
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:
Beispiel:
Das Aktualisieren eines Links zu einem Verzeichnis funktioniert jedoch nicht, wenn das Ziel ein Verzeichnis ist.
Beispiel:
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:
Beispiel:
Im Gegensatz zu:
quelle
quelle