Linux du命令没有遍历已安装的文件系统

Man*_*ngo 4 linux du mount-point

如果问题的措辞有误,请告诉我.这可能解释了为什么我找不到答案.

我想使用如下命令在主磁盘上找到用法:

du -sh /*
Run Code Online (Sandbox Code Playgroud)

问题是我在根级别有多个挂载点,我想du跳过这些.

我认为-x应该选择这样做,但要么我误解了它的作用,要么我错误地使用它.

如何du在不遍历其他安装的情况下仅应用于根磁盘?

谢谢

Ign*_*ams 16

du -x不会遍历它遇到的任何挂载点.但如果它被告知挂载点开始,那么它将按照要求执行.

  • 在此基础上,如果您在根目录中安装了一个卷,“du -shx /*”将扫描该卷,因为您正在安装的卷上“启动”。 (2认同)

jam*_*nan 7

这很骇人,但它似乎可以从Shell中完成您想要的操作,

for d in /*; do egrep " ${d} " /proc/mounts > /dev/null || du -sh ${d}; done
Run Code Online (Sandbox Code Playgroud)

如果需要,sudo在前面添加一个du

  • 您可以避免 for 循环:`du -d1 -x` 表示从当前目录开始,向下到 1 的深度(因此,单级子目录),并且还跳过不同文件系统上的目录。我的 rootfs 是一个 SSD,但也安装了 zfs raid,我想快速检查一下 SSD 上的空间占用情况,而不是在硬盘上浪费时间;这有效。 (3认同)
  • 对不起,我花了这么长时间才接受这一点。我认为,您上面的评论解释了_为什么_`-x` 不起作用,您的答案是一个解决方案。在我自己的使用中,我做了如下修改:`for i in /*; 做如果!挂载点 -q "$i"; 然后 du -sh $i; fi; 完成;`。谢谢 (2认同)