当前位置: 首页>>技术教程>>正文


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

, , ,

问题描述

我试图了解使用ln -smount --bind之间的区别。在基本方案中,我可以使用这两种方法从其他位置访问一个目录。在什么情况下,这两种行为会有所不同?

最佳思路

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

  • chroot中,如果链接目标在chroot之外,则链接将失效。绑定安装仍然可以访问。

  • 几个程序可以区分符号链接和实际目录或文件。很少有人(如果有的话)可以区分目录或文件与目录或文件之间的区别。这也扩展到指向某些内容(A)的符号链接,而这些内容上还装有其他内容(B)。该链接将显示安装目标(B)的内容,而不是原始目标(A)的内容。

另外,您可以在现有目录或文件上绑定安装目录或文件,从而掩盖原始内容(除非将原始内容绑定安装在其他位置,否则将无法访问原始内容)。符号链接要求将原始文件移动或删除。

次佳思路

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

符号链接是一种特殊类型的文件。如果执行ln -s /var/target /var/link,则/var/link将是一个包含路径“ /var/target”的文件。符号链接和普通文件之间的唯一区别是,当程序尝试对符号链接执行操作时,该操作通常在目标而不是文件上执行。因此,现在如果您执行ls /var/link,则ls程序将尝试获取/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挂载任何内容。

第三种思路

另外,ln -s将在重新启动后幸存下来;除非您编辑/etc /fstab使其永久,否则mount –bind不会。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/7696.html,未经允许,请勿转载。