尽管有以下帮助指令:
root@Andromeda:/# du --help | grep -- -x
-x, --one-file-system skip directories on different file systems
以下查询继续检查例如/proc
这是一个不同的文件系统
root@Andromeda:/# du -schx *
13M bin
104M boot
4,0K cdrom
0 dev
16M etc
85G home
0 initrd.img
0 initrd.img.old
802M lib
4,0K lib64
16K lost+found
28K media
4,0K mnt
324M opt
du: cannot access 'proc/8303/task/8303/fd/4': No such file or directory
du: cannot access 'proc/8303/task/8303/fdinfo/4': No such file or directory
du: cannot access 'proc/8303/fd/3': No such file or directory
du: cannot access 'proc/8303/fdinfo/3': No such file or directory
为什么?
root@Andromeda:/# mount | grep -i proc
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
答案1
通配符在调用*
之前由 shell 扩展。du
因此du
看到这样的东西:
du -schx bin boot dev etc home initrd.img lib lib64 lost+found media mnt opt proc root run sbin selinux srv sys tmp usr var vmlinuz
该du
命令尊重该-x
标志并同意跳过不同文件系统上的文件。然后它就出发了。首先它处理bin
.然后它处理boot
.然后它处理dev
. (你明白了。)稍后它会处理proc
。依此类推,直到列表末尾。
请注意,这里的-x
承诺适用于它正在搜索的文件树中的文件和文件系统(与当前目录无关)。因此,虽然proc
在它自己的文件系统上,但这无关紧要:du
只会跳过文件和目录之内proc
位于不同的文件系统上。
如果您选择了du -xs /
then /proc
、/sys
、 ,则安装在其下的其他文件系统/
将被跳过。