it-swarm.com.de

Wie erstelle ich unter Linux einen relativen symbolischen Link?

Ich benötige einen Symlink, der relativ zu dem Verzeichnis auflöst, in dem er abgelegt ist. Mit welchem ​​Befehl wird so etwas erstellt?

60
Jeremiah Rose
  1. Wechseln Sie zu dem Verzeichnis, in dem sich der Link befinden soll
  2. Führen Sie den Befehl ln -s ../some/other/file linkname aus.

Der von Ihnen angegebene Pfad wird mit der Datei gespeichert. Beim Zugriff auf die Datei wird der gespeicherte Pfad nachgeschlagen und relativ zur Datei erweitert. Es weiß nicht, in welchem ​​Verzeichnis Sie sich befanden, als Sie den Link erstellt haben.

75
Jeremiah Rose

Neuere Versionen von GNU coreutils 'ln (> = 8.16) unterstützen die Option --relative (oder -r), dh Sie können ln -s mit 2 absoluten oder relativen Pfaden (in Bezug auf Ihr Arbeitsverzeichnis) aufrufen Geben Sie den korrekten relativen Pfad an, der zum Symlink geschrieben werden muss.

25
Bluewind

Grundsätzlich müssen Sie verstehen, dass ein Symlink eher einer Textdatei gleicht als einem Verzeichniseintrag, der eine Datei enthält. Also wenn du

echo ../poo >/file/name

dann ist das ganz ähnlich

ln -s ../poo /file/name

Dem System ist es egal, ob /file/../poo überhaupt existiert, es ist nur ein Textabschnitt, der in den Symlink eingefügt wird. Wenn etwas versucht, den Symlink zu öffnen , versucht das System, ihn aufzulösen.

Wenn Sie eine Shell mit Dateinamensvervollständigung verwenden, kann diese Funktion zu Problemen führen, da Sie einen Dateinamen relativ zu Ihrem aktuellen Arbeitsverzeichnis angeben können, auch wenn Sie diesen dann als Ziel eines Symlinks in einem vollständig anderen Verzeichnis verwenden.

2
tripleee

Relative Links waren für mich unter OS X schwierig, d. H.

~/Dropbox/git/dave-bot $ ln -s ../codyhess/bin ~/bin
~/Dropbox/git/dave-bot $ ln -s ../codyhess/bin/ ~/bin

beide funktionierten nicht (etwas wurde erstellt, aber es war kein Verzeichnis). Ich habe den gewünschten Link mit absoluten Pfaden erstellt.

~/Dropbox/git/dave-bot $ ln -s ~/Dropbox/git/codyhess/bin/ ~/bin
0
Cody Hess

Ich wollte nur erklären, wie man einen Symlink mit relativen Pfaden erstellt (mit einem detaillierten Beispiel).

Wie Ignacio Vazquez-Abrams in den Kommentaren erwähnt hat, müssen Sie den Speicherort der Datei/des Ordners relativ zu dem Ort angeben, an dem der Symlink erstellt wird, nicht relativ zu Ihrem aktuellen Verzeichnis.

BEISPIEL

Sie befinden sich in /usr/share/nginx/html/_src/learn Sie erstellen einen Symlink coding in /usr/share/nginx/html

Relativen Symlink erstellen (Theorie):

Sudo ln -s /path/to/source/file-or-folder/relative/from/symlink /path/to/symlink/relative/to/current/location

Erstelle einen tatsächlichen relativen Symlink:

Sudo ln -s ./_src/learn/coding ../../coding

Weitere Informationen (gleiches Beispiel)

current path:                                  /usr/share/nginx/html/_src/learn
symlink(to be) relative to current path:       ../../coding                 
symlink location (absolute):                   /usr/share/nginx/html/coding
folder/file relative to symlink location:      ./_src/learn/coding
folder/file absolute path:                     /usr/share/nginx/html/_src/learn/coding  
0
TryHarder