在研究另一个问题时,我注意到(添加了注释)
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 -P
or的输出stat -c %d
(在 Linux 上)来检查它们是否与遍历的根位于同一设备上。但对于罕见的情况来说,这是相当大的开销。
答案2
boot
根文件系统中有一个目录。
find [...] -maxdepth 2
但不应显示 的内容/boot
。