apache Asked: 2010-04-12 08:00:11 +0800 CST2010-04-12 08:00:11 +0800 CST 2010-04-12 08:00:11 +0800 CST 如何在 bash 中以更少的开销查看磁盘使用情况? 772 du -csh / 以上将花费大量时间来计算,有没有办法以更少的开销查看不太准确的结果? 更新 我想知道的是特定目录下的总大小。 disk-space-utilization bash 13 个回答 Voted Kyle Brandt 2010-04-12T10:47:04+08:002010-04-12T10:47:04+08:00 至于更优化的版本du,我不知道。想到的事情是: 将这些文件存储在 ram 磁盘或类似的东西上。 如果只有一个应用程序写入此文件夹及其子文件夹,则让应用程序保持跟踪。 如果所有这些文件的大小大致相同并且它们的数量均匀分布在目录中,您可以只计算子目录的数量并将其乘以每个目录的文件,然后再乘以每个文件的大小。如果您只有一个目录深层结构 ( stat -c '%h') - 2,则只需使用目录的硬链接计数即可快速完成此操作。 使所有这些文件归特定用户所有,并使用配额机制。 使用专用分区,只需使用 df。虚拟文件系统(通过回送挂载的文件系统上的文件)也可以做到这一点。 在所有这些中,配额和专用分区选项可能是最简单和最有效的。 sysadmin1138 2010-04-13T10:28:38+08:002010-04-13T10:28:38+08:00 问题是“du”必须枚举子树中的每个对象。这是一个元数据密集型操作,对于大多数 Linux 文件系统来说需要一段时间。一些文件系统,NTFS 和 Novell 的 NSS 浮现在脑海中,能够在元数据中跟踪这样的目录大小,这使得该操作大大加快。通常,如果您的文件系统支持某种目录配额,则它必须在内部跟踪此数据以执行,每次大小更改都会在目录树上复制到配额点 (NTFS) 或每个目录 (NSS) ) 发生时,因此获取目录树大小非常快。 不幸的是,没有办法让 du 跑得更快,只有变通方法。 以批处理模式运行“du”并使用非实时结果 创建一个新的文件系统并改用“df” 创建一个包含您的目录的大文件,对其进行环回挂载,对其进行格式化,然后在新的挂载点上使用“df”。如果您需要更多空间,请卸载回送挂载、扩展文件并重新挂载。 David Rickman 2010-04-12T09:56:53+08:002010-04-12T09:56:53+08:00 du -h --max-depth=1 为您提供当前工作目录中人类 KB/MB/GB 格式的大小。 Dan Andreatta 2010-04-13T00:59:47+08:002010-04-13T00:59:47+08:00 使用标准工具,每次您想知道总大小时,都必须获取目录中每个文件的大小。一种可能更有效的方法是拥有一个“目录大小监视器”,它跟踪目录的当前大小。没有这样的事情(据我所知),但你可以用inotify. 可能不使用 bash (和inotify-tools),但您可能可以使用 python 和 pyinotify,例如。 Dennis Williamson 2010-04-12T12:21:47+08:002010-04-12T12:21:47+08:00 您可能会发现gt5它很有用。它存储最新du信息,并在下次运行时对其进行比较。它使用文本模式浏览器(例如links. Jason 2010-04-13T08:58:08+08:002010-04-13T08:58:08+08:00 另外,如果您这样做,请考虑 du -- "one file system" 上的 -x 选项 du -xh / --max-depth=1 您只会在根分区上看到磁盘使用情况摘要,它不会尝试添加 /proc、/sys、/dev 等... LA 2010-04-13T10:35:09+08:002010-04-13T10:35:09+08:00 如果您只希望根文件系统使用磁盘,那么 df -h / xenny 2010-04-12T10:05:21+08:002010-04-12T10:05:21+08:00 不可以。您能否定期对文本文件进行 du 管道传输,在设置为整夜运行的 cron 作业中,因此您没有立即可用的最新数据? 请注意,在 Windows 下测量包含大量文件的文件夹使用的磁盘空间同样需要一些时间。 Antoine Benkemoun 2010-04-12T08:09:27+08:002010-04-12T08:09:27+08:00 df -h 可以解决问题 The Unix Janitor 2010-04-12T08:09:44+08:002010-04-12T08:09:44+08:00 df -kh / 这将向您显示已使用和可用的磁盘空间量。
至于更优化的版本
du
,我不知道。想到的事情是:stat -c '%h'
) - 2,则只需使用目录的硬链接计数即可快速完成此操作。在所有这些中,配额和专用分区选项可能是最简单和最有效的。
问题是“du”必须枚举子树中的每个对象。这是一个元数据密集型操作,对于大多数 Linux 文件系统来说需要一段时间。一些文件系统,NTFS 和 Novell 的 NSS 浮现在脑海中,能够在元数据中跟踪这样的目录大小,这使得该操作大大加快。通常,如果您的文件系统支持某种目录配额,则它必须在内部跟踪此数据以执行,每次大小更改都会在目录树上复制到配额点 (NTFS) 或每个目录 (NSS) ) 发生时,因此获取目录树大小非常快。
不幸的是,没有办法让 du 跑得更快,只有变通方法。
为您提供当前工作目录中人类 KB/MB/GB 格式的大小。
使用标准工具,每次您想知道总大小时,都必须获取目录中每个文件的大小。一种可能更有效的方法是拥有一个“目录大小监视器”,它跟踪目录的当前大小。没有这样的事情(据我所知),但你可以用
inotify
. 可能不使用 bash (和inotify-tools
),但您可能可以使用 python 和 pyinotify,例如。您可能会发现
gt5
它很有用。它存储最新du
信息,并在下次运行时对其进行比较。它使用文本模式浏览器(例如links
.另外,如果您这样做,请考虑 du -- "one file system" 上的 -x 选项
您只会在根分区上看到磁盘使用情况摘要,它不会尝试添加 /proc、/sys、/dev 等...
如果您只希望根文件系统使用磁盘,那么
df -h /
不可以。您能否定期对文本文件进行 du 管道传输,在设置为整夜运行的 cron 作业中,因此您没有立即可用的最新数据?
请注意,在 Windows 下测量包含大量文件的文件夹使用的磁盘空间同样需要一些时间。
df -h 可以解决问题
df -kh /
这将向您显示已使用和可用的磁盘空间量。