Symlinks neigen dazu, vollständige Pfade oder relativ zum Link zu mögen, ansonsten suchen sie oft nach file-1.txt
lokal (seltsamerweise).
Navigieren Sie zu proper
und führen Sie ls -l
aus und Sie können sehen, dass der Symlink nach actual/file-1.txt
sucht , obwohl es ../actual/file-1.txt
sein sollte .
Sie haben also zwei Möglichkeiten:
-
Geben Sie den vollständigen Pfad an
ln -s ~/actual/file-1.txt ~/actual/file-2.txt ~/proper
-
Navigieren Sie zu dem Ordner, in dem sich der Link befinden soll, und verlinken Sie von dort
cd proper ln -s ../actual/file-1.txt ../actual/file-2.txt ./
Bearbeiten :Ein Hinweis um Tipparbeit zu sparen.
Sie könnten einfach ln -s ~/actual/file-{1,2}.txt ~/proper
machen
Die Elemente in den geschweiften Klammern werden ersetzt und hintereinander platziert, wodurch der Befehl
erstellt wird
ln -s ~/actual/file-1.txt ~/actual/file-2.txt ~/proper
die beide Dateien mit dem Zielverzeichnis verknüpft. Spart einiges an Tipparbeit, wenn Sie in der Shell weiterkommen.
Das Problem ist die Verwendung relativer Pfade. Wenn Sie Ihre Linkerstellung mit dem vollständigen expliziten Pfad angeben, funktioniert es.
$ ln -s ~/aktuell/Datei1.txt ~/aktuell/Datei2.txt ~/richtig/
$ cat eigentlich/file1.txt
Datei 1
$
Ihr Beispiel erstellt Links in proper
die nach einem Unterverzeichnis namens actual unter dem aktuellen Verzeichnis suchen, und nicht nach Ihrem beabsichtigten übergeordneten Verzeichnis.
Symbolische Links können schwierig sein. Im Wesentlichen ist ein symbolischer Link eine Datei, die einen Dateinamen/Pfadnamen für eine andere Datei enthält (und die für eine Sonderbehandlung gekennzeichnet ist). Beginnt der Pfadname in der Linkdatei mit „/
“, dann wird es als absoluter Pfadname behandelt, und die Dinge sind ziemlich einfach. Wenn er nicht mit einem Schrägstrich beginnt, wird er 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 also proper/file–1.txt
erstellt als Link zu „actual/file–1.txt
“, und als Sie versuchten, darauf zuzugreifen, versuchte das System, auf proper/actual/file–1.txt
zuzugreifen . Du hättest sagen sollen
ln –s ../actual/file–1.txt ../actual/file–2.txt proper
Die touch
brauchten Sie übrigens nicht Befehle. echo "file 1" > actual/file–1.txt
reicht aus, um actual/file–1.txt
zu erstellen .