du命令是disk usage的缩写,打印文件或目录使用的磁盘空间量估算。这对于查找占用大量磁盘空间的文件和目录非常有用。

du命令的默认行为是打印文件目录占用的磁盘空间,而不是真是的文件大小。要打印文件目录真实大小,请使用du命令--apparent-size选项。

要理解这一点请先阅读我们教程什么是inode。然后理解这句话:如果磁盘的分区的块大小4096字节,那么即使文件没有4096字节的大小也会占用一个块的大小。

什么是inode | myfreax
文件储存在硬盘上,硬盘的最小存储单位叫做扇区Sector

du 命令详解

du命令的语法形式du [OPTIONS]... FILE...[OPTIONS]是du命令的选项,可选参数,FILE可以是一个或者多个文件。

如果指定的FILE是目录,du命令统计目录中每个文件大小,最后是目录的总大小。如果FILE未指定,du命令打印当前工作目录的磁盘使用情况。

在不指定任何选项运行du命令时,以千字节为单位显示文件目录的磁盘使用情况。您也可以指定多个文件和目录作为du命令的参数。

du ~/Documents
du ~/Documents ~/Pictures ~/.zshrc

如果当前用户对指定文件目录没有读取权限,终端将会打印消息du:cannot read directory '/root': Permission denied无法读取目录,权限拒绝。

在这种情况下,您需要在以root或者具有sudo权限用户运行du命令,例如命令sudo du /root统计root用户的家目录。

du 命令单位

du命令默认使用千字节的单位打印文件目录的大小。但是如果你需要指定du命令打印大小的单位可以使用选项--block-size指定。

也可以使用一些du命令预定义的单位选项,例如选项-m以兆字节打印文件目录大小,也就是单位M。

du命令的--block-size 选项可以接受的单位可以是任意大小的数值和单位组成的值包括M,G,T等。

例如命令du -csh --block-size=500M ~/Downloads使用500M的大小作为单位,du命令将会文件目录大小除以500M打印大小。

du -csh --block-size=1G ~/Downloads
du -csh --block-size=500M ~/Downloads

du 命令自动选择大小单位

通常在很多情况下,我们只需要使用du命令的-h选项就足够应付日常的使用。

du命令的-h选项会自动根据文件大小选择合适的大小单位打印目录文件夹的大小。

例如命令sudo du -h /var打印/var/lib文件目录大小,大文件与目录将会以1K,234M,2G的方式打印。

sudo du -h /var
4.0K	/var/log/sysstat
.......
46G	/var

du 命令查看目录文件夹大小

要打印指定目录的总大小,而不打印子目录和文件的大小,请使用du命令-s选项。

例如命令sudo du -sh /var命令仅打印/var目录的大小,其子目录与文件将不会打印。

du命令默认使用千字节的单位打印文件目录的大小,在这里我们组合使用du命令的-h选项自动根据文件大小选择合适的大小单位打印目录文件夹的大小。

sudo du -sh /var
46G	/var

du 命令统计多个目录总大小

du命令的-c选项可以合并多个目录的总大小,当您要获取两个或多个目录的合并后的总大小时,此选项非常有用。

例如命令sudo du -csh /var/log /var/lib将会打印/var/lib/var/log两个目录大小和合并后的大小。

你可能看到du命令还组合使用-s选项,因为仅需要打印指定目录大小,所以不需要打印子目录文件大小,-h 表示以友好的阅读格式打印总大小。

sudo du -csh /var/log /var/lib
837M	/var/log
3.1G	/var/lib
3.9G	total

du 命令指定目录深度级别

默认情况下,du命令将会递归遍历指定目录的所有子目录,然后以千字节打印文件目录的大小。

如果要打印指定目录深度级别的目录大小,请使用du命令的--max-depth选项并指定子目录级别。

例如命令sudo du -h --max-depth=1 /var/lib仅打印/var/lib下第一级目录的总大小。

sudo du -h --max-depth=1 /var/lib
...
544K	/var/lib/usbutils
4.0K	/var/lib/acpi-support
205M	/var/lib/apt
2.9G	/var/lib

du 命令使用通配符指定多个文件目录

du命令还允许您使用通配符模式,同时指定多个文件目录统计大小。这在统计指定文件类型,匹配文件目录名称时非常有用。

例如命令sudo du -csh ~/Do*打印家目录中以Do开头的所有目录的大小。通常是/home/myfreax/Documents/home/linux/Downloads目录的大小。

sudo du -csh ~/Do*
4.0K	/home/myfreax/Documents
2.0G	/home/myfreax/Downloads
2.0G	total

du 命令按大小排序打印

du命令可以与接受标准输入的命令通过管道组合使用,来实现一些强大功能,比如对du命令的标准输出按大小进行排序。

例如命令sudo du -h /var/ | sort -rh | head -5打印/var目录的前5大文件与目录,这样你就可以找指定目录的巨大的文件与目录,有点类似磁盘使用率管理器。

这里解释一下命令实现,du -h /var/命令打印以友好阅读格式递归打印/var目录文件大小。

然后du命令的结果,也就是标准输出通过管道|传递到sort命令,sort命令的-r选项反向排序du命令的结果,-h按可读的数字大小进行排序。

最后将sort命令的排序结果通过管道传递给head命令打印前5行记录,经过sort命令排序后,最大文件目录排在前面,也就是前5大目录文件。

sudo du -h /var/ | sort -rh | head -5
4.6G	/var/
2.9G	/var/lib
2.6G	/var/lib/snapd
1.7G	/var/lib/snapd/snaps
1.2G	/var/log/journal/af8ce1d394b844fea8c19ea5c6a9bd09

结论

至此,您已了解如何在Linux使用du命令统计目录文件的大小。与df命令打印已挂载文件系统的磁盘使用情况的信息不同,

du命令可以评估指定文件或目录的大小磁盘空间。要获取更多选项信息,可以在在终端运行命令man du。如果您有任何疑问或反馈,请在下面发表评论。