Ich benötige einen Symlink, der sich relativ zu dem Verzeichnis auflöst, in dem er abgelegt ist. Mit welchem Befehl wird so etwas erstellt?
Ich benötige einen Symlink, der sich relativ zu dem Verzeichnis auflöst, in dem er abgelegt ist. Mit welchem Befehl wird so etwas erstellt?
Antworten:
ln -s ../some/other/file linkname
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.
ln -s ../some/other/file /some/dir/linkname
ln -s ./file linkname
da .
auf das aktuelle Verzeichnis verwiesen wird.
ln -s somedir/original-dir link-name
funktioniert nicht. Es wird ein Verzeichnis mit Namen erstellt link-name
, das einen ungültigen Link enthält. Der Befehl, der funktioniert, istln -sr somedir/original-dir link-name
Neuere Versionen von GNU coreutils 'ln (> = 8.16) unterstützen die Option --relative
(oder -r
), dh Sie können ln -s
2 absolute oder relative (in Bezug auf Ihr Arbeitsverzeichnis) Pfade aufrufen, und es wird der korrekte relative Pfad ermittelt, der sein muss geschrieben an den symlink.
-r
Option ist hilfreich , wenn Sie sind Quer Compilieren und brauchen absolute Pfade auf der Build - Host , aber relative Pfade auf dem Ziel.
ln -r -s targetfile myalias
kann Ihnen helfen, es zu beheben
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 vorhanden, es ist nur ein Text, 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 Probleme verursachen, da Sie einen Dateinamen relativ zu Ihrem aktuellen Arbeitsverzeichnis vervollständigen können, auch wenn Sie diesen dann als Ziel eines Symlinks in einem vollständig anderen Verzeichnis verwenden.
<
zu ändern, wie das System Speicher zuweist. Natürlich gibt es <
in diesem Verzeichnis keine benannten Dateien. Es ist nur eine kostengünstige Möglichkeit, eine sehr kleine Datei zu erstellen, die gegenüber einer normalen Textdatei auf dieser bestimmten Plattform einige attraktive Eigenschaften aufweist.
Relative Links waren für mich unter OS X schwierig, z
~/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
ln -s Dropbox/git/codyhess/bin ~/bin
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