如何在Linux中获取一个目录的大小
当使用ls
命令列出一个目录的内容时,你可能已经注意到,目录的大小几乎总是4096字节(4KB)。那是磁盘上用于存储目录的元信息的空间大小,而不是它所包含的内容。
你想用来获得一个目录的实际大小的命令是du
,它是"disk usage"的缩写。
获得一个目录的大小
du
命令显示指定文件或目录所使用的文件空间量。如果指定的路径是一个目录,du
总结了该目录中每个子目录的磁盘使用情况。如果没有指定路径,du
报告当前工作目录的磁盘使用情况。
当调用时没有任何选项,du
显示给定目录及其每个子目录的磁盘使用情况,以字节为单位。
通常情况下,你希望以人类可读的格式显示目录所占的空间。例如,为了得到/var
目录的总大小,你可以运行以下命令:
sudo du -sh /var
输出结果将看起来像这样:
输出
85G /var
让我们来解释一下这个命令和它的参数:
- 该命令以
sudo
开始,因为/var
目录内的大部分文件和目录都是由根用户拥有的,普通用户无法读取。如果你省略了sudo
,du
命令将打印"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
当你通过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
总结
在Linux中,你可以使用du
命令来获得一个目录的大小。
如果你有任何问题或意见,请在下面留下评论。