Ich versuche, symbolische Verknüpfungen besser zu verstehen ... und habe nicht viel Glück. Dies ist meine aktuelle Shell-Ausgabe mit geändertem Benutzernamen / Host:
username@host:~$ mkdir actual
username@host:~$ mkdir proper
username@host:~$ touch actual/file-1.txt
username@host:~$ echo "file 1" > actual/file-1.txt
username@host:~$ touch actual/file-2.txt
username@host:~$ echo "file 2" > actual/file-2.txt
username@host:~$ ln -s actual/file-1.txt actual/file-2.txt proper
username@host:~$ # Now, try to use the files through their links
username@host:~$ cat proper/file-1.txt
cat: proper/file-1.txt: No such file or directory
username@host:~$ cat proper/file-2.txt
cat: proper/file-2.txt: No such file or directory
username@host:~$ # Check that actual files do in fact exist
username@host:~$ cat actual/file-1.txt
file 1
username@host:~$ cat actual/file-2.txt
file 2
username@host:~$ # Remove the links and go home :(
username@host:~$ rm proper/file-1.txt
username@host:~$ rm proper/file-2.txt
Ich dachte, dass ein symbolischer Link transparent funktionieren sollte, in dem Sinne, dass Sie die Datei bearbeiten könnten, auf die er verweist, als würden Sie direkt auf die Datei zugreifen (außer natürlich, wenn rm
der Link einfach entfernt wird ).
linux
ubuntu
bash
symbolic-link
orokusaki
quelle
quelle
df -T
) - ist das obige Ergebnis dann auch für Sie seltsam?Antworten:
Symlinks mögen in der Regel vollständige Pfade oder beziehen sich auf den Link, andernfalls suchen sie häufig
file-1.txt
lokal (seltsamerweise).Navigiere zu
proper
und führe es ausls -l
und du kannst sehen, dass der Symlink danach suchtactual/file-1.txt
, wann er sein sollte../actual/file-1.txt
.Sie haben also zwei Möglichkeiten:
Geben Sie den vollständigen Pfad an
Navigieren Sie zu dem Ordner, in dem sich der Link befinden soll, und verknüpfen Sie ihn von dort aus
Bearbeiten : Ein Hinweis zum Speichern der Eingabe.
Du könntest es einfach tun
ln -s ~/actual/file-{1,2}.txt ~/proper
Die Elemente in geschweiften Klammern werden ersetzt und nacheinander platziert, wodurch der Befehl erstellt wird
quelle
rm -rf *
Vermeiden Sie es auch, auf einen symbolisch verknüpften Ordner zuzugreifen. Sie können den Ordner , auf den er verweist, löschen. Einfach rm symlinkname machen. Nur ein paar Dinge, bei denen ich Fehler gemacht habe: DDas Problem ist die Verwendung relativer Pfade. Wenn Sie Ihre Linkerstellung mit dem vollständigen expliziten Pfad angeben, funktioniert dies.
In Ihrem Beispiel werden Links erstellt
proper
, die nach einem Unterverzeichnis mit dem Namen actual im aktuellen Verzeichnis suchen, und nicht nach dem gewünschten übergeordneten Verzeichnis.quelle
Symbolische Verknüpfungen können schwierig sein. Im Wesentlichen ist eine symbolische Verknüpfung eine Datei, die einen Dateinamen / Pfadnamen für eine andere Datei enthält (und die für eine Sonderbehandlung markiert ist). Wenn der Pfadname in der Linkdatei mit '
/
' beginnt , wird er als absoluter Pfadname behandelt und die Dinge sind ziemlich einfach. Beginnt es nicht mit einem Schrägstrich, wird es als relativer Pfadname behandelt - relativ zu dem Verzeichnis, in dem sich der Link befindet. (Dies gilt unabhängig davon, ob der Name Schrägstriche enthält oder nicht.) Sie haben alsoproper/file–1.txt
einen Link zu „actual/file–1.txt
“ erstellt, und als Sie versuchten, darauf zuzugreifen, hat das System versucht, darauf zuzugreifenproper/actual/file–1.txt
. Du hättest sagen sollenDie
touch
Befehle haben Sie übrigens nicht gebraucht.echo "file 1" > actual/file–1.txt
ist ausreichend zu schaffenactual/file–1.txt
.quelle
Ein verwandtes Problem, das für viele offensichtlich sein mag, das mich jedoch einige Minuten lang überrascht hat: Wenn Sie einen Symlink in einem Verzeichnis erstellen, das selbst als Symlink fungiert, oder wenn sich im Pfad des aktuellen Arbeitsverzeichnisses ein Symlink befindet, ist dies möglicherweise der Fall starte bei problemen mit nicht funktionierenden symlinks.
Verwenden Sie
cd ..
undls -l
wiederholt, um festzustellen, ob Ihre übergeordneten Verzeichnisse selbst miteinander verknüpft sind.Wenn Sie einen Symlink
cd
zum ursprünglichen Zielverzeichnis erstellen und dort neue Symlinks erstellen müssen, sind die relativen Pfade korrekt.Oder anders ausgedrückt: Der relative Pfad führt vom Ursprung zum Ziel. Wenn der Ursprung anschließend symbolisch verknüpft wird, ist das in Ordnung. Es kann jedoch vorkommen, dass Sie Probleme beim Einrichten eines neuen Origin-Linknamens in einem Verzeichnis haben, das selbst irgendwie mit einem Link verbunden ist.
quelle
cd ..
undls -l
wiederholt" könnten Sie verwendennamei -mox $PWD
. Eine weitere nützliche Methode, um herauszufinden , ob es Symlinks auf dem Weg zum Einsatz istpwd -P
, mit dem Ihnen einen Pfad zum aktuellen Verzeichnis gibt , die keine symbolischen Links enthalten (also wennpwd
undpwd -P
geben unterschiedlichen Ausgang, wissen Sie , es ist ein symbolischer Link irgendwo auf dem Weg ).Wenn Sie versuchen, einen Link zu einer Datei zu erstellen, die nicht existiert (oder den Pfad falsch angegeben hat), gibt ln -s keinen Fehler aus. Es wird ein Link erstellt, aber wenn Sie versuchen, "cat" für diesen Link zu verwenden, wird angezeigt, dass keine Datei gefunden wurde. Auch wenn Sie es mit ls sehen können. Überprüfen Sie in solchen Fällen immer Ihren Dateipfad.
Weil die Datei etc / ufw / ufw.conf nicht existiert. Der richtige Pfad lautet /etc/ufw/ufw.conf
quelle
ln -s
"manchmal" nicht auf die Existenz des Ziels geprüft wird, ist einfach falsch.