如何在bash中以较less的开销查看磁盘使用情况?

du -csh / 

以上将花费大量的时间来计算,有没有办法看到较less的开销较不准确的结果?

UPDATE

我想知道的是特定目录下的总大小。

至于更优化的版本,我不知道一个。 想到的事情是:

  1. 将这些文件存储在RAM磁盘或类似的东西。
  2. 如果只有一个应用程序写入该文件夹及其子文件夹,则应用程序会跟踪。
  3. 如果所有这些文件的大小和分布在目录中的大小相同,则可以计算子目录的数量,然后将每个目录的文件数乘以每个文件的大小。 如果只有一个目录深层结构( stat -c '%h' ) – 2,那么只需使用该目录的硬链接数即可快速完成此操作。
  4. 使所有这些文件由特定用户拥有并使用配额机制。
  5. 使用专用分区,只使用df。 虚拟文件系统(通过环回安装的文件系统上的文件)也可以这样做。

其中,配额和专用分区选项可能是最简单和最有效的。

问题是'du'必须枚举子树中的每个对象。 这是一个元数据密集型操作,大多数Linux文件系统需要一段时间。 想起某些文件系统,NTFS和Novell的NSS,可以在元数据中跟踪像这样的目录大小这使得这个操作快得多。 一般情况下,如果你的文件系统支持某种types的目录配额,它必须在内部跟踪这些数据的执行,每一个大小的改变都会被复制到配额点(NTFS)或者每个目录(NSS )当它发生,所以得到一个目录树大小是非常快的。

不幸的是,没有办法使运行更快,只是解决方法。

  • 以批处理模式运行“du”,并以非实时结果运行
  • 创build一个新的文件系统,并使用“df”
  • 创build一个包含你的目录的大文件,loopback-mount它,格式化它,然后在这个新的挂载点上使用'df'。 如果您需要更多空间,请卸载回送挂载,扩展文件并重新挂载。
 du -h --max-depth=1 

从您当前的工作目录中为您提供人类KB / MB / GB格式的大小。

使用标准工具,您必须获得目录中每个文件的大小,每次您想知道总大小。 一个可能更有效的方法是创build一个“目录大小监视器”,它跟踪目录的当前大小。 没有这样的事情(我知道),但是你可以用inotify来实现。 可能不是bash(和inotify-tools ),但是你可以使用python和pyinotify。

你可能会发现gt5是有用的。 它存储最近的du信息,并在下一次运行时进行比较。 它使用文本模式浏览器(如links显示其输出。

另外,如果你正在做的话,考虑du – “一个文件系统”上的-x选项

 du -xh / --max-depth=1 

你只会看到根分区上的磁盘使用情况摘要,它不会尝试将/ proc,/ sys,/ dev等加起来。

不可以。你可以定期做一个文本文件,在一个cron作业集中运行一夜,所以你没有相当的数据立即可用?

请注意,在Windows下测量包含大量文件的文件夹所使用的磁盘空间同样需要一些时间。

如果你只想要根文件系统的磁盘使用,那么

df -h /

df -h会做的

df -kh /

这将显示您使用和可用的磁盘空间的数量。

也许

 df -h 

额外的文本,因为一个简短的答案是不够的serverfault认为我是人类。

要find该目录下的空间,请列出它而不是/ 。 要find目录foobar下的空间,请列出以下两项:

 du -csh foo bar 

如果文件系统不经常更改,则应该使用dnotify来计算磁盘使用情况。