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

Warum funktioniert mein symbolischer Link nicht?

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:

  1. Geben Sie den vollständigen Pfad an

    ln -s ~/actual/file-1.txt ~/actual/file-2.txt ~/proper
    
  2. 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 .


Linux
  1. Warum ist Nullglob kein Standard?

  2. Einen Hardlink in einen symbolischen Link umwandeln?

  3. Symbolischer Link funktioniert nicht wie erwartet, wenn der Benutzer wechselt?

  4. Warum funktioniert `exit &` nicht?

  5. Umgebungsvariablen in symbolischen Links

Wie komprimiert man einen symbolischen Link?

Warum funktioniert `\d` nicht in regulären Ausdrücken in sed?

Warum funktioniert Bash `(())` nicht innerhalb von `[[]]`?

Warum einen Link wie diesen erstellen:ln -nsf?

Warum funktioniert hostname --fqdn nicht auf meinem Ubuntu-Computer?

warum mag gdb keine aliase