让我从一个例子开始:
当我们检查哪个目录/文件正在消耗根卷上的磁盘空间时,我们使用“du”命令,如下所示:
du -sh /*
Run Code Online (Sandbox Code Playgroud)
但是,这也包括其他分区/卷。
du -x -sh /*
Run Code Online (Sandbox Code Playgroud)
那也做同样的事情。它不排除其他磁盘卷。然而,手册页说:
-x, --one-file-system 跳过不同文件系统上的目录
如果我们看到“/usr”消耗了根文件系统上的大部分磁盘空间,并且它是“/”下的目录,那么对其运行“du -x -sh /usr/*”也会报告“/usr/something” “这是一个单独的磁盘,并且尺寸很大,导致命令退出时有很多延迟。
底线:运行“du”命令或任何其他命令时如何仅显示“一个文件系统”来识别磁盘使用情况和罪魁祸首文件,不包括该目录/文件系统下的任何其他磁盘卷?
谢谢!
cas*_*cas 22
du
正在完全按照您的指示去做。
-x
跳过不同文件系统上的目录,但它会对命令行上的每一个非选项参数执行此操作。
当您运行时du -x -sh /*
,您将告诉du
您提供有关 中所有文件和目录的详细信息/
,无论它们是否是其他文件系统的挂载点。
du
不接收单个参数/*
,它获取扩展为的所有路径名/*
。shell 扩展/*
到所有匹配的文件/目录/sockets/fifos/etc 名称并将/
它们传递给(实际上除了那些以“隐藏”文件名du
开头的文件名之外的所有文件- 除非设置了 shell 选项)。查看并搜索..
dotglob
man bash
Pathname Expansion
您可能想要做的是使用 的du
(-d
又名--max-depth
)选项。例如
# du -h -x -d 1 /
512 /media
8.7M /var
512 /srv
1.4G /opt
10K /tmp
512 /mnt
512 /boot
1.1M /etc
13K /run
512 /home
97M /usr
1.5G /
Run Code Online (Sandbox Code Playgroud)
请注意其他文件系统(例如 /proc)如何从输出中排除 - 这是因为虽然它们匹配-d 1
最大深度,但它们也是与其自身分离的文件系统/
,因此-x
排除它们并且du
永远不会下降到这些安装点。
注意:-d
是 的非标准(即非 POSIX)选项du
。然而,它在 GNU 和 *BSD 版本中都可用du
,并且可能还有许多其他版本。也就是说,这肯定可以在 Linux 和 FreeBSD 上运行,并且几乎可以肯定在其他现代的类 UNIX 系统上运行,但可能无法在古老的或专有的 UNIX 上运行。
您的问题 () 中的手册页摘录-x, --one-file-system skip directories on different file systems
表明您正在使用 GNU 的 GNUdu
版本coreutils
。