Erstellen Sie einen symbolischen Link des Verzeichnisses in Ubuntu [geschlossen]

247

Unten ist mein Code zum Erstellen eines Symlinks eines Verzeichnisses:

sudo ln -s /usr/local/nginx/conf/ /etc/nginx

Ich habe das Verzeichnis bereits erstellt /etc/nginx. Ich möchte nur, dass der Inhalt des Quellverzeichnisses ( /usr/local/nginx/conf/) im Inhalt des Zielverzeichnisses ( /etc/nginx) enthalten ist. Aber wenn ich den Code ausführe, /etc/nginxenthält ein Verzeichnis namens confanstelle des Inhalts von conf. Dieses Verzeichnis enthält den gewünschten Inhalt, jedoch am falschen Ort.

Warum wurde ein Verzeichnis in den Zielordner gestellt, anstatt nur den Inhalt des Verzeichnisses in den Zielordner zu legen?

nbro
quelle
Sie können auch Dateien verwenden (Standard-Dateibrowser). Klicken Sie mit der rechten Maustaste auf den Ordner, den Sie verknüpfen möchten> Option "Link erstellen". Es wird ein verknüpfter Ordner erstellt, den Sie nach Bedarf verschieben und umbenennen können.
John Linhart
4
Verwenden Sie die Linux- bind mountFunktion. Beispiel
gkiko

Antworten:

254

Dies ist das Verhalten, lnwenn das zweite Argument ein Verzeichnis ist. Es wird ein Link zum ersten Argument darin eingefügt . Wenn Sie /etc/nginxder Symlink sein möchten , sollten Sie zuerst dieses Verzeichnis entfernen und denselben Befehl ausführen.

Fataler Fehler
quelle
10
Dieser Unix.SE-Link wird hier aufgelöst. Scheint, wir haben eine zirkuläre Abhängigkeit.
Kaiser
30

Dies lnist dokumentiert, wenn das Ziel bereits vorhanden ist und ein Verzeichnis ist. Wenn Sie möchten , sein , einen Symlink nicht enthalten einen Symlink, sollten Sie besser schaffen es nicht als Verzeichnis zuerst!/etc/nginx

Celada
quelle
51
Ihre Antwort ist nur dann sinnvoll, wenn der Leser die Antwort bereits kennt. Es ist für jeden nutzlos, der die Frage stellen würde
Ricardo Saporta
1
Kann ich tatsächlich einen Symlink zu einem Stammverzeichnis eines gemounteten USB-Geräts erstellen (daher kann ich diesen Ordner nicht zuerst löschen)?
Grigory Kornilov
1
@GrigoryKornilov Sie können einen Symlink zu allem erstellen , was Sie möchten, einschließlich etwas, das nicht existiert. Bei dieser Frage ging es eher um den Ort, an dem der Symlink erstellt wird (nicht um den Ort, auf den er verweist). Ein bestimmter Pfadname im Dateisystem ist entweder eine reguläre Datei oder ein Verzeichnis oder ein Symlink (oder ein Socket, eine Pipe oder ein Gerät). Es kann nicht sein , mehr als eines dieser Dinge zur gleichen Zeit (dh Sie können nicht mehr als eine getrennte Datei mit exakt den gleichen Namen).
Celada
10

Im Skript ist so etwas nützlich:

if [ ! -d /etc/nginx ]; then ln -s /usr/local/nginx/conf/ /etc/nginx > /dev/null 2>&1; fi

Es verhindert, dass vor dem erneuten Erstellen eines "fehlerhaften" geloopten Symlinks nach dem erneuten Ausführen des Skripts

Kayn
quelle
1
Ausgezeichnet! Dies ist die genaue Lösung. Das Verzeichnis muss nicht erstellt werden, wenn es bereits vorhanden ist. Es ist eine wirklich gute Optimierung, um eine harte Verbindung herzustellen und sie in das Schwarze Loch (/ dev / null) zu versenken
Cosmo Arun