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

Tom*_*che 2 filesystems partition find

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

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

不过我也知道

\n\n
me@it: ~ $ date ; lsblk\nThu Aug 31 14:52:58 MST 2017\nNAME                  MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT\nsda                     8:0    0 465.8G  0 disk\n\xe2\x94\x9c\xe2\x94\x80sda1                  8:1    0  16.6G  0 part\n\xe2\x94\x9c\xe2\x94\x80sda2                  8:2    0  97.7G  0 part\n\xe2\x94\x9c\xe2\x94\x80sda3                  8:3    0   500M  0 part  /boot  [*]\n\xe2\x94\x9c\xe2\x94\x80sda4                  8:4    0     1K  0 part\n\xe2\x94\x94\xe2\x94\x80sda5                  8:5    0   351G  0 part\n  \xe2\x94\x94\xe2\x94\x80LVM2_crypt        254:0    0   351G  0 crypt\n    \xe2\x94\x9c\xe2\x94\x80LVM2_crypt-swap 254:1    0   3.9G  0 lvm   [SWAP]\n    \xe2\x94\x9c\xe2\x94\x80LVM2_crypt-root 254:2    0    20G  0 lvm   /\n    \xe2\x94\x94\xe2\x94\x80LVM2_crypt-home 254:3    0 327.1G  0 lvm   /home  [*]\nsr0                    11:0    1  1024M  0 rom\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n
me@it: ~ $ sudo su -\nit ~ # date ; diff -wB <(find / -maxdepth 1 -xdev -type d | sort) <(find / -xdev -maxdepth 1 -type d | sort)\nThu Aug 31 15:09:53 MST 2017\nit ~ # logout\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n

Gil*_*il' 5

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

\n\n

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

\n\n

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

\n