ln -s 和 mount --bind 有什么区别?

Łuk*_*asz 49 command-line mount symbolic-link

我试图了解使用ln -s和之间的区别mount --bind。在基本情况下,我可以使用两者从其他地方访问一个目录。在什么情况下,这两者的行为会有所不同?

mur*_*uru 46

至少在两种情况下,它们的行为会有所不同:

  • chroot 中,如果链接目标在 chroot 之外,则链接将失效。仍然可以访问绑定安装。
  • 一些程序可以区分符号链接和实际目录或文件。很少(如果有的话)可以区分目录或文件和挂载在其上的文件。这也扩展到某些东西 ( A) 的符号链接,这些东西 ( B) 上安装了其他东西 ( )。该链接将显示挂载目标 ( B)的内容而不是原始 ( A) 的内容。

此外,您可以在现有目录或文件上绑定挂载目录或文件,屏蔽原始内容(除非原始内容已绑定挂载到其他地方,否则无法访问原始内容)。符号链接要求移动或删除原始链接。


Tan*_*ett 22

好吧,ln -s创建一个符号链接,而mount --bind创建一个挂载。

符号链接是一种特殊类型的文件。如果你这样做ln -s /var/target /var/link,那么/var/link将是一个包含路径“ /var/target”的文件。符号链接与普通文件的唯一区别在于,当程序试图对符号链接执行操作时,该操作通常是在目标上执行,而不是在文件上执行。所以现在如果你这样做ls /var/linkls程序将尝试获取 的目录列表/var/link,但实际上会获取 的目录列表/var/target

不过,符号链接仍然只是文件。它们可以重命名和删除以及所有爵士乐。请注意,/var/link如果已经有一个名为/var/link; 的文件,则无法创建符号链接(或普通文件,就此而言)。你需要先摆脱它。

挂载不是文件;这是内核保存在内存中的记录。如果这样做mount --bind /var/target /var/mount,内核将记录/var/mount现在是/var/target. (我不知道细节;特别是,我不知道在子目录中安装某些东西是否/var/target也会使其显示出来/var/mount,或者为什么或为什么不显示。对此答案的编辑将不胜感激。)所以现在如果你这样做了ls /var/mount,同样的事情会发生,就像你做了一样ls /var/target,因为/var/mount/var/target是同一个目录。

挂载不是文件。我不知道如果您尝试重命名或删除会发生什么/var/mount。请注意,您不能在安装任何东西/var/mount ,除非已经有一个在一个目录/var/mount


Mar*_*ams 16

此外, ln -s 将在重新启动后继续存在;而 mount --bind 不会,除非您编辑 /etc/fstab 以使其持久化。