我想了解使用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
在目标上运行效果相同。不好,正如我在重建我的一台服务器之前不久发现的那样