如何在Linux中获取一个目录的大小

评论 0 浏览 0 2019-04-04

当使用ls命令列出一个目录的内容时,你可能已经注意到,目录的大小几乎总是4096字节(4KB)。那是磁盘上用于存储目录的元信息的空间大小,而不是它所包含的内容。

How to Get the Size of a Directory ...
How to Get the Size of a Directory on Linux

你想用来获得一个目录的实际大小的命令是du,它是"disk usage"的缩写。

获得一个目录的大小

du命令显示指定文件或目录所使用的文件空间量。如果指定的路径是一个目录,du总结了该目录中每个子目录的磁盘使用情况。如果没有指定路径,du报告当前工作目录的磁盘使用情况。

当调用时没有任何选项,du显示给定目录及其每个子目录的磁盘使用情况,以字节为单位。

通常情况下,你希望以人类可读的格式显示目录所占的空间。例如,为了得到/var目录的总大小,你可以运行以下命令:

sudo du -sh /var

输出结果将看起来像这样:

输出

85G	/var

让我们来解释一下这个命令和它的参数:

  • 该命令以sudo开始,因为/var目录内的大部分文件和目录都是由根用户拥有的,普通用户无法读取。如果你省略了sudodu命令将打印"du: cannot read directory"。
  • s - 只显示指定目录的总大小,不显示子目录的文件大小总和。
  • h - 以人类可读的格式打印尺寸(h)。
  • /var - 你想获得大小的目录的路径。

如果你想显示第一级子目录的磁盘使用情况,怎么办?你有两个选择。第一个是使用星号(*),如下图所示,这意味着 "匹配所有不以句点开头的东西(.)"。-c选项告诉du要打印所有大小的总和:

sudo du -shc /var/*

输出

24K	/var/db
4.0K	/var/empty
4.0K	/var/games
77G	/var/lib
4.0K	/var/local
0	/var/lock
3.3G	/var/log
0	/var/mail
4.0K	/var/opt
0	/var/run
196K	/var/spool
28K	/var/tmp
85G	total

另一种获得第一级子目录的磁盘使用情况报告的方法是使用--max-depth选项:

sudo du -h --max-depth=1 /var

输出

77G	  /var/lib
24K	  /var/db
4.0K	/var/empty
4.0K	/var/local
4.0K	/var/opt
196K	/var/spool
4.0K	/var/games
3.3G	/var/log
5.0G	/var/cache
28K	/var/tmp
85G	/var
85G	total

默认情况下,du命令显示目录或文件所使用的磁盘空间。要找到一个目录的表面大小,请使用--apparent-size选项。一个文件的"表观大小"是指该文件中实际有多少数据。

sudo du -sh --apparent-size /var

当你通过SCPRsyncSFTP传输目录时,通过网络传输的数据量就是文件的表现大小。这就是为什么用du(不含--apparent-size)显示时,源文件上使用的磁盘空间大小与目标文件上的大小不一样。

du命令也可以用管道与其他命令结合起来。

例如,要打印/var目录内的5个最大的目录,你可以将du的输出通过管道输送到sort命令,按照目录的大小进行排序,然后将输出通过管道输送到head命令,该命令将只打印前5位的目录:

sudo du -h /var/ | sort -rh | head -5

输出

85G	/var/
77G	/var/lib
75G	/var/lib/libvirt/images
75G	/var/lib/libvirt
5.0G	/var/cache/pacman/pkg

总结

在Linux中,你可以使用du命令来获得一个目录的大小。

如果你有任何问题或意见,请在下面留下评论。

最后更新2023-10-04
0 个评论
标签