GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Zu viele Ebenen symbolischer Links

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

Linux
  1. Beheben des MySQL-Fehlers:Zu viele offene Dateien

  2. Zu viele Verbindungsfehler in MySQL

  3. Umgebungsvariablen in symbolischen Links

  4. Verhalten von cd/bash bei symbolischen Links

  5. Rekursive Stapelaktualisierung symbolischer Links

Eine einfache Möglichkeit, symbolische Links in Linux aufzulisten

So entfernen Sie symbolische Links unter Linux

So erstellen Sie symbolische Links unter Linux

Fehlerbehebung:Zu viele Weiterleitungen

So erhalten Sie eine Liste symbolischer Links unter Linux

rsync und symbolische Links