Linux命令(39)——du命令

1.简介

du(disk usage)命令用于查看指定的目录或文件所占用的磁盘空间。

2.命令格式

du [OPTION]... [FILE]...
du [OPTION]... --files0-from=F

3.选项说明

-a, --all:递归显示目录与其包含的所有文件及子目录的大小,默认仅显示目录及其子目录的大小。
--apparent-size:显示文件或目录自身大小,而不是它们占用的磁盘空间大小。文件或目录占用磁盘空间的大小与它们自身大小有时候并非完全一致,有可能比较大,原因可能是稀疏文件中存在空洞,内部碎片,间接blocks等。大小等同与使用命令"wc -c"或"ls --blokc-size=1"查看的字节大小。
-B, --block-size=SIZE:使用SIZE作为block的大小,SIZE可以取对应的数值,或如下字符串: KB 1000, K 1024, MB 1000*1000, M 1024*1024,以及G, T, P, E, Z, Y等;
-b,-bytes:显示目录或文件大小时,以byte为单位,等同于选项--apparent-size --block-size=1。
-c, --total:显示占用磁盘空间大小的总和。
-D, --dereference-args:显示指定符号连接的源文件大小。
--files0-from=F:列出在文件F中指出的文件名称,如果F等于连字符-,则从标准输入读取文件名称。
-H:等同于-D, --dereference-args。
-h, --human-readable:以易读的单位显示大小,例如以K,M,G等为单位进行显示。
--si:等同于-h,但是K,M,G等以1000而非2014为换算单位。
-k:以K为单位显示,等同于--block-size=1K。
-l, --count-links:多次计算硬链接文件。
-m:以M为单位显示,等同于--block-size=1M。
-L, --dereference:显示符号链接的源文件大小。
-P, --no-dereference:默认选项,不显示符号链接源文件大小。
-0, --null:以NULL字符取代输出的换行符。
-S, --separate-dirs:不显示子目录大小(不太明白,为何使用时仍然显示子目录大小)。
-s, --summarize:只显示所给文件或目录的总大小。
-x, --one-file-system:以一开始处理时的文件系统为准,若遇上其它不同的文件系统目录则略过。
-X, --exclude-from=FILE:跳过符合指定的文件。
--exclude=PATTERN:跳过符合指定模式的文件或目录。
--max-depth=N:指定递归显示的最大目录深度,--max-depth=0等同于--summarize。
--time:显示文件或目录最后修改时间。
--time=WORD:显示指定类型的时间,而非默认的最后修改时间。WORD可取值为atime、access、use(访问时间),或者ctime、status(状态改变时间)。
--time-style=STYLE:使用指定的时间格式显示时间,STYLE可取值为full-iso, long-iso, iso, +FORMAT,其中FORMAT解析方式等同于date命令。
--help:显示帮助信息。
--version:显示版本信息。

4.常用示例

(1)显示指定文件或目录占用磁盘空间大小。

du -sh [file or directory] 

(2)显示指定目录及其所有子目录的大小。

du -h [directory]

5.注意事项

(1)文件大小与占用磁盘空间大小的区别。 文件大小(又名 apparent size)是文件自身实际大小,与占用磁盘空间大小(又名 occupied space size)有本质的区别。举个例子,创建一个1字节的文件,使用du显示的为4KB,使用ls显示为1B,示例如下:

[dablelv@TENCENT64 ~/test/sparseFile]$ echo -n 1 > 1B.txt
[dablelv@TENCENT64 ~/test/sparseFile]$ ls -l 1B.txt
-rw-rw-r-- 1 dablelv dablelv 1 Apr  4 19:14 1B.txt
[dablelv@TENCENT64 ~/test/sparseFile]$ du -h 1B.txt
4.0K    1B.txt

这里我们先创建一个文件1B.txt,大小是一个字节,ls显示出的size就是1Byte,而1B.txt这个文件在硬盘上会占用1个block,因为Linux文件系统存储最小单位为block,不足1个block大小的文件也要占用1个block大小。这里的一个block等于4K。

(2)稀疏文件(sparse file) 稀疏文件就是在文件中留有很多空余空间,称为空洞(hole),留备将来插入数据使用,这些空洞被填充为NULL字符,特点是文件系统并不会为空余空间分配磁盘空间。

使用如下代码创建稀疏文件:

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>

int main(int argc, char *argv[])
{
int fd = open("sparse.file", O_RDWR|O_CREAT);
    lseek(fd, 10240, SEEK_CUR);
    write(fd, "\0", 1);

return 0;
}

编译生成后执行,创建稀疏文件sparse.file,使用ls和du命令分别查看文件大小与占用磁盘空间大小,发现稀疏文件空洞部分并不占用磁盘空间,被文件系统压缩存储。

[dablelv@TENCENT64 ~/test/sparseFile]$ ll sparse.file
-rw---x--T 1 dablelv dablelv 10241 Apr  4 20:16 sparse.file
[dablelv@TENCENT64 ~/test/sparseFile]$ du -h sparse.file 
4.0K    sparse.file

6.小结

历时近5h,终于完成了此篇blog,其中对于选项-S还存有疑惑,以及文件碎片(fragmentation)、间接块(indirect blocks)等相关概念比较模糊,后续了解后继续补充,也请请知者不吝指教,留言告知,万分感谢!对于文中不足甚至错误之处,也请大家批评指正。


参考文献

[1]du manual [2]为什么用ls和du显示出来的文件大小有差别?

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏ppjun专栏

Android十八章:Dalvik和Art区别

前言,安卓可以运行多个app,对应运行了多个dalvik实例,每一个应用都有一个独立的linux进程,独立的进程可以防止虚拟机崩溃造成所有程序都关闭。就像一条电...

1673
来自专栏用户2442861的专栏

linux grep工作常用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/haluoluo211/article/d...

1184
来自专栏Java编程技术

深入浅出一致性Hash原理

在解决分布式系统中负载均衡的问题时候可以使用Hash算法让固定的一部分请求落到同一台服务器上,这样每台服务器固定处理一部分请求(并维护这些请求的信息),起到负载...

821
来自专栏烙馅饼喽的技术分享

用ECMAScript4 ( ActionScript3) 实现Unity的热更新 -- 使用第三方组件

Unity开发中,常常会用到一些第三方组件。本文以实例介绍如何在热更新脚本中使用这些第三方组件。 首先说明几个基本步骤: 第三方组件通常是以dll或者源码方式提...

38510
来自专栏python3

查看php-fpm内存占用

ps --no-headers -o "rss,cmd" -C php-fpm | awk '{ sum+=$1 } END { printf ("%d%s\n...

1102
来自专栏Python、Flask、Django

python中用requests获取API参数

2096
来自专栏debugeeker的专栏

《coredump问题原理探究》windows版8.6节堆布局heap corruption第一个例子

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xuzhina/article/detai...

1072
来自专栏安恒网络空间安全讲武堂

CVE-2011-0104分析

关于office的漏洞。先把进程attach上去然后打开exploit的文件。查看程序崩溃在这里:

1393
来自专栏企鹅号快讯

Jmeter常用获取数据的几种方式

还没用过聊天机器人?给我发消息试试。 Jmeter在互联网测试中应用非常多,可以用来做接口测试或者性能测试,算是非常不错的一个工具。今天我们来聊聊Jmeter获...

2198
来自专栏linux驱动个人学习

编译选项含义

编译选项: 现在我们Makefile中的编译选项有: ? -g :可执行程序包含调试信息;(给gdb调试使用) -O2:该优化选项会牺牲部分编译速度,除了执行-...

4896

扫码关注云+社区

领取腾讯云代金券