我想了解使用ln -s和之间的区别mount --bind。在基本方案中,我可以使用这两种方法从其他位置访问一个目录。在什么情况下,这两种行为会有所不同?
我想了解使用ln -s和之间的区别mount --bind。在基本方案中,我可以使用这两种方法从其他位置访问一个目录。在什么情况下,这两种行为会有所不同?
Answers:
好吧,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 ../../myfile .。如果将其移动到另一个目录,它将指向其他位置,因为它是相对链接。如果您需要备份子树并且仍然使链接在备份中工作,这将很有用。
除了其他答案。系统不允许硬链接到目录:
# ln mydir mpoint
ln: `mydir': hard link not allowed for directory
通过安装,您可以制作类似硬链接的名称,即,对于一个inode可以使用两个或多个名称:
# mount -B mydir/ mpoint/
# ls -d -i *
807175 mpoint/ 807175 mydir/
(可以发现它有助于使用旧版本的rsync进行快照备份。)
另外,请注意,此安装尚未完成:
# mount -B -oro mydir/ mpoint/
mount: warning: mpoint/ seems to be mounted read-write.
# mount | grep mpoint
/root/learn/mydir on /root/learn/mpoint type none (rw,bind)
因此,即使我要求使用ro选项(只读),该坐骑仍然可以读写。
rm -r上mount --bind。使用aln,它将删除链接,而使用a--bind,则与rm -r在目标上运行效果相同。不好,正如我在重建我的一台服务器之前不久发现的那样