Ich versuche den Unterschied zwischen der Verwendung von ln -s
und zu verstehen mount --bind
. Im Basisszenario kann ich beide verwenden, um von einem anderen Ort auf ein Verzeichnis zuzugreifen. In welchen Szenarien verhalten sich die beiden unterschiedlich?
command-line
mount
symbolic-link
Łukasz
quelle
quelle
rm -r
auf einmount --bind
. Mit aln
wird die Verknüpfung entfernt, während für a--bind
derselbe Effekt wie beim Ausführen vonrm -r
auf dem Ziel erzielt wird. Nicht gut, wie ich kurz vor dem Wiederaufbau eines meiner Server fand ...Antworten:
Sie werden sich in mindestens zwei Fällen unterschiedlich verhalten:
A
), auf dem etwas anderes (B
) montiert ist. Der Link zeigt den Inhalt von mount target (B
) anstelle des Originals (A
).Sie können auch binden, dass ein Verzeichnis oder eine Datei in ein vorhandenes Verzeichnis oder eine Datei eingebunden wird, wodurch der ursprüngliche Inhalt maskiert wird (sodass auf den ursprünglichen Inhalt nur zugegriffen werden kann, wenn das Original an einer anderen Stelle eingebunden wurde). Für eine symbolische Verknüpfung muss das Original verschoben oder gelöscht werden.
quelle
Nun,
ln -s
erzeugt einen symbolischen Link, währendmount --bind
schafft eine Halterung.Eine symbolische Verknüpfung ist ein besonderer Dateityp. Wenn Sie dies tun
ln -s /var/target /var/link
,/var/link
wird eine Datei erstellt, die den Pfad "/var/target
" enthält. Der einzige Unterschied zwischen einer symbolischen Verknüpfung und einer normalen Datei besteht darin, dass bei dem Versuch eines Programms, eine Operation an einer symbolischen Verknüpfung auszuführen, die Operation normalerweise auf dem Ziel anstatt auf der Datei ausgeführt wird. Wenn Sie dies jetzt tunls /var/link
,ls
versucht das Programm, eine Verzeichnisliste für abzurufen/var/link
, erhält jedoch/var/target
stattdessen eine Verzeichnisliste für .Symbolische Links sind jedoch immer noch nur Dateien. Sie können umbenannt und gelöscht werden und der ganze Jazz. Beachten Sie, dass Sie keine symbolische Verknüpfung (oder eine normale Datei) erstellen können, die aufgerufen wird,
/var/link
wenn bereits eine Datei aufgerufen wurde/var/link
. Sie müssten es zuerst loswerden.Ein Mount ist keine Datei; Es ist eine Aufzeichnung, die der Kernel im Gedächtnis behält. Wenn Sie dies tun
mount --bind /var/target /var/mount
, wird der Kernel die Tatsache aufzeichnen, dass/var/mount
jetzt ein neuer Name für ist/var/target
. (Ich kenne die Details nicht; insbesondere weiß ich nicht, ob beim Mounten von etwas in einem Unterverzeichnis von/var/target
auch etwas angezeigt wird/var/mount
, oder warum oder warum nicht. Änderungen an dieser Antwort wären wünschenswert.) Also jetzt Wenn Sie dies tunls /var/mount
, geschieht dasselbe wie bei Ihnenls /var/target
, weil/var/mount
und/var/target
dasselbe Verzeichnis.Reittiere sind keine Dateien. Ich weiß nicht, was passieren würde, wenn Sie versuchen, umzubenennen oder zu löschen
/var/mount
. Beachten Sie, dass Sie nichts anhängen können, es/var/mount
sei denn, es gibt bereits ein Verzeichnis unter/var/mount
.quelle
ln -s ../../myfile .
. Wenn Sie das in ein anderes Verzeichnis verschieben, verweist es auf einen anderen Ort, da es sich um einen relativen Link handelt. Dies kann nützlich sein, wenn Sie einen Unterbaum sichern müssen und die Verknüpfungen in der Sicherung weiterhin funktionieren.Zusätzlich würde ln -s einen Neustart überleben. mount --bind würde dies nicht tun, es sei denn, Sie bearbeiten / etc / fstab, um es dauerhaft zu machen.
quelle
Neben den anderen Antworten. Das System erlaubt keine feste Verbindung zum Verzeichnis:
Mit dem Mount können Sie hard link-like machen, dh zwei oder mehr Namen für dieselbe Inode :
(Man findet es hilfreich für Snapshot-Backups mit der alten Version von rsync.)
Beachten Sie außerdem, dass diese Bereitstellung nicht vollständig ist:
Daher kann der Mount immer noch gelesen und geschrieben werden, auch wenn ich nach der Option ro gefragt habe (schreibgeschützt).
quelle