Linux du命令:统计目录或文件所占磁盘空间大小

du 是统计目录或文件所占磁盘空间大小的命令。

需要注意的是,使用"ls -r"命令是可以看到文件的大小的。但是大家会发现,在使用"ls -r"命令査看目录大小时,目录的大小多数是 4KB,这是因为目录下的子目录名和子文件名是保存到父目录的 block(默认大小为 4KB)中的,如果父目录下的子目录和子文件并不多,一个 block 就能放下,那么这个父目录就只占用了一个 block 大小。

大家可以将其想象成图书馆的书籍目录和实际书籍。如果我们用"ls-l"命令査看,则只能看到这些书籍占用了 1 页纸的书籍目录,但是实际书籍到底有多少是看不到的,哪怕它堆满了几个房间。

但是我们在统计目录时,不是想看父目录下的子目录名和子文件名到底占用了多少空间,而是想看父目录下的子目录和子文件的总磁盘占用量大小,这时就需要使用 du 命令才能统计目录的真正磁盘占用量大小。

du 命令的格式如下:

[root@localhost ~]# du [选项] [目录或文件名]

选项:

1、-a:显示每个子文件的磁盘占用量。默认只统计子目录的磁盘占用量

2、-h:使用习惯单位显示磁盘占用量,如 KB、MB 或 GB 等;

3、-s:统计总磁盘占用量,而不列出子目录和子文件的磁盘占用量


【例 1】

[root@localhost ~]# du
#统计当前目录的总磁盘占用量大小,同时会统计当前目录下所有子目录的磁盘占用量大小,不统计子文件
#磁盘占用量的大小。默认单位为KB
20 ./.gnupg
#统计每个子目录的大小
24 ./yum.bak
8 ./dtest
28 ./sh
188
#统计当前目录总大小

【例 2】

[root@localhost ~]# du -a
#统计当前目录的总大小,同时会统计当前目录下所有子文件和子目录磁盘占用量的大小。默认单位为 KB

4 ./.bashjogout
36 ./install.log
4 ./.bash_profile
4 ./.cshrc
…省略部分输出…
188

【例 3】

[root@localhost ~]# du -sh
#只统计磁盘占用量总的大小,同时使用习惯单位显示
188K .

du命令和df命令的区别

有时我们会发现,使用 du 命令和 df 命令去统计分区的使用情况时,得到的数据是不一样的。那是因为df命令是从文件系统的角度考虑的,通过文件系统中未分配的空间来确定文件系统中已经分配的空间大小。也就是说,在使用 df 命令统计分区时,不仅要考虑文件占用的空间,还要统计被命令或程序占用的空间(最常见的就是文件已经删除,但是程序并没有释放空间)。

而 du 命令是面向文件的,只会计算文件或目录占用的磁盘空间。也就是说,df 命令统计的分区更准确,是真正的空闲空间。