最近 VPS 磁盘空间一直上涨报警,就想查看一下哪个文件夹占用空间比较大,可以腾出一些可用空间来。查了一圈发现 du 命令就是该功能。du 全称 disk usage,

du 文档中就是这么描述他的功能的 —- 文件占用的空间,具体用法

du [OPTIONS] ... [FILE] ...

和绝大多数的命令一样,支持很多的选项,最常用的和 df 命令一样 -h,可以记忆 --human-readable ,用比较人性化的单位,比如 K,M,G。

所以这样就可以使用

du -d 2 -h <dir> | grep '[0-9\,]\+G'
sudo du -h --max-depth=1

来快速的找到占用空间比较大的文件夹,这里的 -d 实际是 --max-depth 的缩写形式,也就是查看 dir 目录下,最多往下查找 2 层,然后以 -h 比较友好的方式输出结果。

用法

除了上面提到了 -h 参数,du 命令还有一些其他的参数

当我们使用 -h 选项时命令会根据不同的大小给出合适的 K, M, G 单位,方便查看,但如果想要强制命令输出统一的单位可以使用 -BM

这里将 -BM 拆开,-B 表示的是 --block-size=SIZE, M 表示的是兆,同理可以使用 -BG 强制使用 G 单位。

查看当前目录及其指定深度目录的大小

du -ah –-max-depth=0
  • -a 显示目录中所有文件及文件夹大小
  • -–max-depth=n 这个选项也能简写成 -d n: 深入到第 n 层目录,此处设置为 0,即表示不深入到子目录,设置为 1,则超过 1 层深度则忽略

忽略目录或文件

du --exclude=/path

只报告目录占用空间总量

-s 显示总和

du -hs /path

如果使用 du -h 那么会打印出 path 下所有目录的占用情况,如果使用 -s 那么只会输出 /path 占用的空间。

额外报告总量

使用 -c 选项会额外在最后打印两行总占用量

du -ch /Download

例如:

..
..
3.3G	Downloads
3.3G	total

分割子目录占用

通常情况下 du 会打印目录及其下所有子目录大小,加入有一个目录 Parent,下方有 SubDirA,SubDirB,还有很多的文件在 Parent 目录下,那么想要知道所有在 Parent 下文件占用,但是不想包括 SubDirA 和 SubDirB 的空间,那么可以使用 -S 选项。

du -h -S -d 2 /path/to/Parent

外延

熟悉了 du 命令之后,还有一个可视化更好的工具叫做 ncdu,在终端中使用比较友好的展示来显示磁盘空间占用。

更多的命令使用方法可以参考 tecmint