Wie Dubu in einem Kommentar betont, liegt das Problem in Ihren relativen Pfaden. Ich hatte ein ähnliches Problem beim Symlinken meiner Nginx-Konfiguration von /usr/local/etc/nginx
bis /etc/nginx
. Wenn Sie Ihren Symlink wie folgt erstellen:
cd /usr/local/etc
ln -s nginx/ /etc/nginx
Sie werden tatsächlich den Link /etc/nginx -> /etc/nginx erstellen, da der Quellpfad relativ zum Pfad des Links ist. Die Lösung ist so einfach wie die Verwendung absoluter Pfade:
ln -s /usr/local/etc/nginx /etc/nginx
Wenn Sie relative Pfade verwenden möchten und sie sich so verhalten sollen, wie Sie es wahrscheinlich erwarten, können Sie pwd
verwenden um den Pfad des aktuellen Arbeitsverzeichnisses einzugeben, etwa so:
cd /usr/local/etc
ln -s "$(pwd)/nginx/" /etc/nginx
Sie möchten die Anführungszeichen um den Pfad herum haben, um sicherzustellen, dass Dinge wie Leerzeichen in Ihrem aktuellen Pfad maskiert werden. Beachten Sie, dass Sie dabei doppelte Anführungszeichen verwenden müssen, z. B. $(pwd)
wird nicht ersetzt, wenn Sie einfache Anführungszeichen verwenden.
Oberflächlich betrachtet funktioniert das, was Sie vorgeschlagen haben, für mich.
Beispiel
$ mkdir -p test/src test/firefox
$ tree --noreport -fp
.
`-- [drwxrwxr-x] ./test
|-- [drwxrwxr-x] ./test/firefox
`-- [drwxrwxr-x] ./test/src
Erstellen Sie den symbolischen Link:
$ ln -s test/src test/firefox
$ tree --noreport -fp
.
`-- [drwxrwxr-x] ./test
|-- [drwxrwxr-x] ./test/firefox
| `-- [lrwxrwxrwx] ./test/firefox/src -> test/src
`-- [drwxrwxr-x] ./test/src
Wenn Sie es ein zweites Mal ausführen, würde dies normalerweise Folgendes ergeben:
$ ln -s test/src test/firefox
ln: failed to create symbolic link ‘test/firefox/src’: File exists
Also hast du hier wahrscheinlich noch was vor. Ich würde vermuten, dass Sie einen Zirkelverweis haben, bei dem ein Link auf sich selbst zurückverweist.
Sie können find
verwenden um das ein bisschen auszuspionieren:
$ cd /suspected/directory
$ find -L ./ -mindepth 15
Symlinks sind relativ zum übergeordneten Verzeichnis des Links, nicht zum aktuellen Verzeichnis von ln
verarbeiten.
Wenn Sie dies tun:
cd /top/dir
ln -s test/src test/firefox
(wobei test/firefox
ein Verzeichnis ist), machen Sie eine test/firefox/src
Symlink, dessen Ziel test/src
ist .
Diese test/src
ist relativ zu test/firefox
Verzeichnis, das ist also ein symbolischer Link zu /top/dir/test/firefox/test/src
.
Wenn Sie möchten, dass dieser Symlink ein Link zu /top/dir/test/src
ist , müssten Sie schreiben:
ln -s ../src test/firefox/
Oder
ln -s /top/dir/test/src test/firefox/
obwohl es im Allgemeinen keine gute Idee ist, symbolische Links zu absoluten Pfaden zu erstellen, da sie leicht beschädigt werden, wenn Verzeichnisse umbenannt oder Dateisysteme an anderer Stelle gemountet werden.
Mit GNU ln
, können Sie dessen -r
verwenden Option, um es die Berechnung selbst durchführen zu lassen:
$ ln -rs test/src test/firefox/
$ ls -ld test/firefox/src
lrwxrwxrwx 1 chazelas chazelas 6 Nov 29 15:59 test/firefox/src -> ../src