Ich habe diese Dateistruktur erstellt:
test/src
test/firefox
Wenn ich diesen Befehl ausführe:
ln -s test/src test/firefox
Es wird erwartet, dass ein symbolischer Link test/firefox/src
erstellt wird, auf den test/src
verwiesen wird. Stattdessen wird der folgende Fehler angezeigt:
-bash: cd: src: Too many levels of symbolic links
- Was mache ich falsch?
- Können Sie keine symbolische Verknüpfung zu einem Ordner erstellen, der in einem gleichrangigen Ordner dieses Ordners gespeichert ist?
- Was ist der Sinn davon?
linux
filesystems
ln
David Zorychta
quelle
quelle
ls -ld test test/*
oder die genaue Folge von Befehlen, die Sie zum Erstellen dieser Dateien ausgeführt haben.cd test/firefox/src
würde der Fehler angezeigtcd: no such file or directory: test/firefox/src
, datest/firefox/src
ein symbolischer Link baumelt. Laufen Siecd
auf einem anderen symbolischen Link namenssrc
?ln -s
und dem getan, wascd
Sie uns nicht sagen. Unter der Annahme, dass sichtest
in Ihrem aktuellen Verzeichnis nur ein Unterverzeichnis befindet, sollte eincd src
(oder was auch immer Sie ausgeführt haben) einen Fehler auslösen. Hast du etwas hineingesteckttest/firefox
?/some/path
,ln -s test/src test/firefox
wird ein Symlink erstellt, der von/some/path/test/firefox/src
nach/some/path/test/firefox/test/src
und nicht nach zeigt/some/path/test/src
.Antworten:
An der Oberfläche funktioniert das, was Sie vorgeschlagen haben, für mich.
Beispiel
Stellen Sie den symbolischen Link her:
Wenn Sie es ein zweites Mal ausführen, wird in der Regel Folgendes erzeugt:
Wahrscheinlich ist hier noch etwas los. Ich würde vermuten, dass Sie einen Zirkelverweis haben, bei dem ein Link zurück auf sich selbst zeigt.
Sie können
find
dies ein wenig ausspähen:quelle
find -L ./ -mindepth 15
hat den Täter aufgedecktWie Dubu in einem Kommentar betont, liegt das Problem in Ihren relativen Pfaden. Ich hatte ein ähnliches Problem beim Verknüpfen meiner Nginx-Konfiguration von
/usr/local/etc/nginx
nach/etc/nginx
. Wenn du deinen Symlink so erstellst: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:
quelle
cygwin
. Vielen Dank!cd
wenn Sie von dem Verzeichnis, in dem sich die Datei des symbolischen Links befindet, in das Zielverzeichnis wechseln möchten.Symlinks beziehen sich auf das übergeordnete Verzeichnis des Links und nicht auf das aktuelle Verzeichnis des
ln
Prozesses.Wenn Sie das tun:
(Wo
test/firefox
ist ein Verzeichnis), Sie machen einentest/firefox/src
Symlink, dessen Ziel isttest/src
.Das
test/src
ist relativ zumtest/firefox
Verzeichnis, das ist also ein Symlink zu/top/dir/test/firefox/test/src
.Wenn Sie möchten, dass dieser Symlink ein Link zu ist
/top/dir/test/src
, müssen Sie Folgendes schreiben:Oder
Im Allgemeinen ist es jedoch eine schlechte Idee, Symlinks zu absoluten Pfaden zu erstellen, da diese leicht beschädigt werden, wenn Verzeichnisse umbenannt oder Dateisysteme an anderer Stelle angehängt werden.
Mit GNU
ln
können Sie seine-r
Option verwenden, um die Berechnung selbst durchführen zu lassen:quelle
Verwenden Sie den absoluten Pfad anstelle des relativen Pfads, dann funktioniert es.
Z.B:
quelle
Die Antwort ist, den absoluten Pfad zu verwenden. Es kann jedoch ärgerlich sein, den vollständigen Pfad für etwas einzugeben, das sich im aktuellen Verzeichnis befindet. Sie können die Befehlsersetzung von pwd verwenden, um dies zu vermeiden. Wenn sich Ihr Ziel im aktuellen Verzeichnis befindet:
Wenn sich Ihr Link im aktuellen Verzeichnis befinden soll:
quelle