Ich versuche einen symbolischen Link in meinem Home-Verzeichnis zu erstellen, der auf ein Verzeichnis auf meiner externen Festplatte verweist.
Es funktioniert gut, wenn ich es so spezifiziere:
cd ~
ln -s /run/media/name/exhdd/Data/ Data
Es wird jedoch ein fehlerhafter Link erstellt, wenn ich dies versuche:
cd /run/media/name/exhdd
ln -s Data/ ~/Data
Dies schafft eine Verbindung, in die ich nicht cd
hinein kann.
Wenn ich es versuche, beschwert sich bash:
bash: cd: Data: Too many levels of symbolic links
Die symbolische Datenverknüpfung in meinem Zuhause ist ebenfalls rot eingefärbt, wenn ls
die farbige Ausgabe aktiviert ist.
Warum passiert dies? Wie kann ich auf diese Weise einen Link erstellen? (Ich möchte einen Symlink zu einem Verzeichnis in meinem Arbeitsverzeichnis in einem anderen Verzeichnis erstellen.)
Bearbeiten: Laut dieser StackOverflow-Antwort wird, wenn das zweite Argument (in meinem Fall ~ / Data) bereits existiert und ein Verzeichnis ist
ln
, ein Symlink zu dem Ziel in diesem Verzeichnis erstellt.
Ich habe jedoch das gleiche Problem mit:
ln -s Data/ ~/
cd ~
Ist normalerweise der gleiche wiecd
.ls -l ~/Data
hätte dir geholfen zu sehen, was mit dem "roten" Link nicht stimmt.cat
es versucht zu haben, aber ich habe vergessen, was das Ergebnis war ... (Ich bin im Moment nicht zu Hause.)/run/media/name/exhdd/Data/
Data
ln -s /run/media/name/exhdd/Data/* Data
Antworten:
Hier ist was passiert. Wenn Sie einen Symlink mit einem relativen Pfad erstellen, ist der Symlink relativ. Symlinks speichern nur die Pfade, die Sie ihnen geben. Sie lösen niemals Pfade zu vollständigen Pfaden auf. Laufen
erstellt einen Symlink namens
ls2
in/usr/bin
zuls
(nämlich./usr/bin/ls
) in Bezug auf das Verzeichnis, das das Symlink in ist (/usr/bin
). Der obige Befehl würde einen funktionalen Symlink aus einem beliebigen Verzeichnis erstellen.Wenn Sie den Symlink in ein anderes Verzeichnis verschieben, verweist er nicht mehr auf die Datei unter
/usr/bin/ls
.Sie erstellen einen Symlink, der auf verweist
Data
, und benennen ihnData
. Es zeigt auf sich. Sie müssen einen Symlink mit dem absoluten Pfad des Verzeichnisses erstellen.quelle
Ich hatte das gleiche Problem. Google hat zu dieser Antwort geführt, aber die einfachste Lösung ist hier nicht dokumentiert:
-T macht den Trick
Mann ln:
Füge dies einfach hier hinzu, damit jeder mit der gleichen Frage dies finden kann :)
quelle
ln
Das Verhalten mit relativen Pfaden ist nicht intuitiv. Verwenden Sie die-r
Flagge , um die geistige Gesundheit wiederherzustellen .Erläuterung:
Es bedeutet, dass
ln
das getan wird, was Sie erwarten. Es wird berücksichtigt , in welchem Verzeichnis Sie sich befinden, in welchem Verzeichnis das Ziel in ist, und einen Pfad relativ zum Verzeichnis konstruieren wird der Link in sein. Das Standardverhalten (ohne-r
) ist der erste Parameter (Ziel) zu interpretieren wahrsten Sinne des Wortes , in In diesem Fall müssen Sie den Pfad selbst so erstellen, dass er im Verzeichnis des Links gültig ist.Verwenden Sie alternativ einen absoluten Pfad, wie von @SmithJohn erwähnt
oder
quelle
Ganz einfach können Sie einen Link für einen Ordner erstellen. Schau mein Kommando
ln -s / home / Zielordner / var / www / html / link_name
quelle