符号链接在诸如ls、mv和 之类的函数上有限制,并且cp可以对它们进行操作,因为与诸如 之类的外壳启动命令不同cd,这些函数没有关于用户如何根据逻辑路径访问目录的信息(请参阅相关帖子)。使用该mount --bind选项似乎可以解决这个问题,提供增强的功能以及与 samba 和其他文件服务器的兼容性,因为挂载的目录将具有两个独立的物理路径,而不是链接。
我想使用该mount --bind选项用引用替换我的所有符号链接,但这意味着在 fstab 中安装超过 150 个点。是否有任何可能由此产生的性能问题或我应该考虑的任何其他缺点?
Gil*_*il' 67
使用mount --bind,目录树存在于目录层次结构中的两个(或更多)位置。这会导致许多问题。备份和其他文件副本将选择所有副本。指定要复制文件系统变得很困难:您最终将复制绑定安装的文件两次。使用find、grep -r、locate等进行搜索将遍历所有副本,依此类推。
您不会通过绑定安装获得任何“增强的功能和兼容性”。它们看起来像任何其他目录,这在大多数情况下是不可取的行为。例如,Samba 默认将符号链接公开为目录;使用绑定安装没有任何好处。另一方面,绑定挂载可用于通过 NFS 公开目录层次结构。
绑定安装不会有任何性能问题。您将面临管理方面的难题。绑定挂载有它们的用途,例如使目录树可从 chroot 访问,或暴露由挂载点隐藏的目录(这通常是在重构目录结构时的临时使用)。如果您没有需要,请不要使用它们。
只有 root 可以操作绑定安装。它们无法通过普通手段移动;他们锁定他们的位置和祖先目录。
一般而言,如果您将符号链接传递给命令,则该命令在对文件进行操作时作用于链接本身,如果对文件内容进行操作则作用于链接的目标。这也适用于目录。这通常是正确的。一些命令有选项来区别对待符号链接,例如ls -L, cp -d, rsync -l。无论你想做什么,符号链接更有可能是正确的工具,而不是绑定安装是正确的工具。
小智 6
当您依赖可能并不总是到位的支持(例如外部磁盘)时,您还应该使用绑定安装而不是符号链接,并且您希望确保原始目录结构就位,即使支持失败或被删除。
例如,如果我想将 /var/tmp 保留在 sd 卡中,我将使用绑定安装,因为即使删除了卡,某些程序也会期望 /var/tmp 是有效目录。