为什么“find -xdev”显示所有分区上的目录?

为什么“find -xdev”显示所有分区上的目录?

在研究另一个问题时,我注意到(添加了注释)

me@it: ~ $ date ; sudo find / -maxdepth 1 -xdev -type d | grep -ve '/$' | sort
Thu Aug 31 14:58:25 MST 2017
/bin
/boot         [*]
/.config
/dev
/etc
/home         [*]
/lib
/lib64
/lost+found
/media
/mnt
/opt
/proc
/root
/run
/sbin
/srv
/sys
/tmp
/usr
/var

不过我也知道

me@it: ~ $ date ; lsblk
Thu Aug 31 14:52:58 MST 2017
NAME                  MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
sda                     8:0    0 465.8G  0 disk
├─sda1                  8:1    0  16.6G  0 part
├─sda2                  8:2    0  97.7G  0 part
├─sda3                  8:3    0   500M  0 part  /boot  [*]
├─sda4                  8:4    0     1K  0 part
└─sda5                  8:5    0   351G  0 part
  └─LVM2_crypt        254:0    0   351G  0 crypt
    ├─LVM2_crypt-swap 254:1    0   3.9G  0 lvm   [SWAP]
    ├─LVM2_crypt-root 254:2    0    20G  0 lvm   /
    └─LVM2_crypt-home 254:3    0 327.1G  0 lvm   /home  [*]
sr0                    11:0    1  1024M  0 rom

那么为什么find / -xdev显示/boot/home? FWIW,-maxdepth 1和的顺序-xdev似乎并没有引起问题:

me@it: ~ $ sudo su -
it ~ # date ; diff -wB <(find / -maxdepth 1 -xdev -type d | sort) <(find / -xdev -maxdepth 1 -type d | sort)
Thu Aug 31 15:09:53 MST 2017
it ~ # logout

我错过了什么吗?如果不是,为什么我会在上面的第一个喷射中看到/boot和?/home

答案1

find -xdev 不下降进入作为安装点的目录,但它仍然列出它们。尝试一下find / -xdev -maxdepth 2,您会看到/dev/proc/sys任何其他挂载点都已列出,但它们的内容没有列出。

我认为理由是挂载点存在于父文件系统上 - 即使find列出的是挂载文件系统的根目录而不是用作挂载点的目录。

没有方便的方法来省略挂载点。如果您进行后处理,则可以通过比较df -Por的输出stat -c %d(在 Linux 上)来检查它们是否与遍历的根位于同一设备上。但对于罕见的情况来说,这是相当大的开销。

答案2

boot根文件系统中有一个目录。

find [...] -maxdepth 2

但不应显示 的内容/boot

相关内容