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

时间:2020-03-05 15:27:01  来源:igfitidea点击:

当使用“ ls”命令列出目录的内容时,我们可能已经注意到目录的大小几乎总是4096字节(4 KB)。

这就是磁盘上用于存储目录元信息的空间大小,而不是其包含的内容。

我们要用来获取目录实际大小的命令是“ du”,它是“磁盘使用率”的缩写。

获取目录的大小

“ du”命令显示指定文件或者目录使用的文件空间量。

如果指定的路径是目录,则“ du”会汇总该目录中每个子目录的磁盘使用情况。
如果未指定路径,则'du'报告当前工作目录的磁盘使用情况。

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

通常,我们希望以人类可读的格式显示目录所占用的空间。
例如,要获取“/var”目录的总大小,请运行以下命令:

sudo du -sh /var

输出将如下所示:

85G	/var

让我们解释一下命令及其参数:

  • 该命令以'sudo'开头,因为'/var'目录中的大多数文件和目录均由root用户拥有,普通用户无法读取。如果省略“ sudo”,则“ du”命令将显示“ du:无法读取目录”。
  • '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

当我们通过SCP,Rsync。
或者SFTP传输目录时,通过网络传输的数据量就是文件的表观大小。

这就是为什么当以'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