仅显示顶级分区的磁盘使用情况

仅显示顶级分区的磁盘使用情况

让我从一个例子开始:

  1. “/”或根文件系统大小为 10GB,当前 100% 使用。
  2. “/usr”是“/”下的目录。
  3. “/usr/something”是一个单独的逻辑卷或安装点,看起来不错。
  4. “/var”是一个单独的 LV,看起来也不错。

当我们检查哪个目录/文件正在消耗根卷上的磁盘空间时,我们使用“du”命令,如下所示:

du -sh /*

但是,这也包括其他分区/卷。

du -x -sh /*

那也做同样的事情。它不排除其他磁盘卷。然而,手册页说:

-x, --one-file-system 跳过不同文件系统上的目录

如果我们看到“/usr”消耗了根文件系统上的大部分磁盘空间,并且它是“/”下的目录,那么对其运行“du -x -sh /usr/*”也会报告“/usr/something” “这是一个单独的磁盘,并且尺寸很大,导致命令退出时有很多延迟。

底线:如何在运行“du”命令或任何其他命令时仅显示“一个文件系统”来识别磁盘使用情况和罪魁祸首文件,不包括该目录/文件系统下的任何其他磁盘卷?

谢谢!

答案1

du正在完全按照您的指示去做。

-x跳过不同文件系统上的目录,但它会对命令行上的每一个非选项参数执行此操作。

当你跑步时du -x -sh /*,你是在告诉du你要给你详细信息全部中的文件和目录/无论它们是否是其他文件系统的挂载点

du不接收单个参数/*,它获取扩展为的所有路径名/*。外壳扩展/*全部匹配的文件/目录/sockets/fifos/etc 名称/并将它们传递给du(实际上除了以.“隐藏”文件名开头的文件名之外的所有名称 - 除非dotglob设置了 shell 选项)。查看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    /

请注意其他文件系统(例如 /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表明您正在使用duGNU的 GNU 版本coreutils

相关内容