Linux(Centos 7.6)命令详解:du

1.命令作用

对每个文件的磁盘使用情况进行汇总,对于目录则进行递归汇总(Summarize disk usage of each FILE, recursively for directories);即输出文件占用磁盘空间的大小,和输出目录递归占用磁盘空间的大小;与文件/目录实际大小由一定的区别,参考"参数详解"的--apparent-size参数说明

2.命令语法

Usage: du [OPTION]... [FILE | DIRECTORY]...
       or: du [OPTION]... --files0-from=F

3.参数详解

OPTION:

  • -0, --null,输出每行末尾以0字节结束,而非换行符结束;即所有信息一行输出不换行
  • -a, --all,du是递归查看当前目录下所有目录大小,-a则会递归查看当前目录下所有目录及文件大小
  • --apparent-size,打印的是文件的大小,而非磁盘使用量;尽管显示大小通常会较小,但有时也可能较大,这是因为存在"稀疏"文件中的空洞、内部碎片、间接块等情况所致
  • -B, --block-size=SIZE,根据SIZE大小对系统空间进行缩放;SIZE是整数且可带单位;单位K、M、G、T、P、E、Z、Y是以1024为进率计算;KB、MB、...是以1000进率计算)
  • -b, --bytes,相当于'--apparent-size --block-size=1'
  • -c, --total,多打印一行total,用于统计查询文件和目录的总大小
  • -D, --dereference-args,显示符号链接实际指向的文件/目录大小,默认符号链接大小为0
  • -d, --max-depth=N,打印目录(或用--all包含文件)递归N层的总大小;--max-depth=0与指定-s参数含义相同;注意N最好不要大于指定递归目录的总层数
  • --files0-from=F/-,F代表一个文件名,F文件内是^@分隔且无换行符的文件目录列表,用于统计文件目录列表大小信息;当使用 - 时,读取标准输出列表作为输入以列表大小信息
  • -H,等同于-D(--dereference-args)
  • -h, --human-readable,以人类可读的格式打印大小(如: 1K 234M 2G)
  • --inodes,列出inode(索引节点)使用信息,而不是块使用情况;即统计文件或者目录占用多少个inode
  • -k,--block-size=1K的简写
  • -L, --dereference,统计符号链接(软链接)实际指向文件目录的大小
  • -l, --count-links,目录下如果存在硬链接及其源文件,目录统计时会多次(两次)计算大小,如果不指定-l参数,则计算一次
  • -m,--block-size=1M的简写
  • -P, --no-dereference,符号链接(软链接)统计大小为0(默认),与-L相反
  • -S, --separate-dirs,对于目录而言,不包括子目录的大小信息(测试与默认效果相同)
  • --si,同-h,但以1000作为进率计算,-h是以1024为进率计算
  • -s, --summarize,仅显示每个参数的总和值;目录统计时仅显示指定最外层目录大小
  • -t, --threshold=SIZE,如为正则排除小于等于SIZE的条目;如为负则排除大于SIZE的条目
  • --time,显示该目录中任何文件或其任何子目录的最后修改时间
  • --time=WORD,指定WORD作为显示的时间,默认是修改时间(modification time: 文件内容变动更新);WORD可取值atime(访问时间), access(访问时间: 文件读取更新), use(访问时间,与atime、access三者等效), ctime(变更时间: 元数据变动更新,如权限和用户组), status(权限变更时间)
  • --time-style=STYLE,使用STYLE显示时间, 可取值由full-iso, long-iso, iso, +FORMAT(自定义时间字符串)
  • -X, --exclude-from=FILE,排除与FILE中任何模式匹配的文件
  • --exclude=PATTERN,排除匹配PATTERN的文件
  • -x, --one-file-system,跳过不同文件系统中的目录
  • --help,显示此帮助并退出
  • --version,输出版本信息并退出

4.常用用例

4.1.磁盘使用量与文件大小的区别

文件占用磁盘使用量: 文件在磁盘上实际占用的存储空间

文件大小: 文件内容实际的字节数

区别: 磁盘存储文件时按固定大小的‌簇(Cluster)分配空间(如4KB),而不是逐字节分配;所以占用磁盘空间大小总是4KB的倍数,而文件实际大小可能会小于、等于、大于该值

        小于: 分配的簇未写满

        等于: 分配的簇刚好写满

        大于: 稀疏文件或压缩技术导致

[root@node4 ~]# du nmon                     # nmon文件占用磁盘空间大小
404	nmon
[root@node4 ~]# du --apparent-size nmon     # nmon文件大小
401	nmon
[root@node4 ~]# 

4.2.人类可读格式显示占用大小

[root@node4 ~]# du -h nmon          # 查看文件占用磁盘空间大小(-h可读格式显示单位)
404K	nmon
[root@node4 ~]# du -h Desktop/      # 查看目录占用磁盘空间大小(-h可读格式显示单位)
56K	Desktop/other
193M	Desktop/
[root@node4 ~]# 

注:查看目录占用磁盘空间时,会显示指定目录下递归的所有目录大小,但不会显示目录下文件的大小,如需要显示文件大小需要指定--all参数,如下: 

[root@node4 ~]# du --all -h Desktop/
[root@node4 ~]# du --all -h Desktop/
28K	Desktop/other/odb64luo_20240226_1.sh
28K	Desktop/other/odb64luo_20240226.sh
56K	Desktop/other
1.5M	Desktop/openssl11-libs-1.1.1k-4.el7.x86_64.rpm
292K	Desktop/libzstd-1.5.4-1.el7.x86_64.rpm
1.6M	Desktop/openssl11-1.1.1m-1.el7.x86_64.rpm
4.0K	Desktop/flist.txt
13M	Desktop/test1.txt
30M	Desktop/test2.txt
47M	Desktop/
[root@node4 ~]#  

注: 查看目录占用磁盘空间时,如果存在多层目录,会显示多条记录,如只需要指定目录大小需要指定-s或者--max-depth=0参数,如: 

[root@node4 ~]# du -sh Desktop/
193M	Desktop/
[root@node4 ~]# du -h --max-depth=0 Desktop/
193M	Desktop/
[root@node4 ~]# 

4.3.指定单位显示占用大小

注:-h可读格式可用提供显示大小单位外,-B可用指定固定单位,默认单位为K,建议使用—h参数来智能显示单位

[root@node4 ~]# du -s Desktop/
197504	Desktop/
[root@node4 ~]# du -s -B K Desktop/
197504K	Desktop/
[root@node4 ~]# du -s -B M Desktop/
193M	Desktop/
[root@node4 ~]# du -s -B G Desktop/
1G	Desktop/
[root@node4 ~]# 

4.4.符号链接占用大小查看

4.4.1.软链接

[root@node4 ~]# ll ln_nmon nmon
lrwxrwxrwx 1 root root      4 Aug  3 18:02 ln_nmon -> nmon
-rwxr----- 3 root root 410008 Aug  1 22:46 nmon
[root@node4 ~]# du -h nmon            # 软链接源文件大小404K
404K	nmon
[root@node4 ~]# du -h ln_nmon         # 默认情况下软链接大小0
0	ln_nmon
[root@node4 ~]# 
[root@node4 ~]# du -h -L nmon         # 显示软链接源文件占用磁盘空间大小
404K	nmon
[root@node4 ~]# du -h -D nmon         # 显示软链接源文件占用磁盘空间大小
404K	nmon
[root@node4 ~]# du -h -H nmon         # 显示软链接源文件占用磁盘空间大小
404K	nmon
[root@node4 ~]# 

4.4.2.硬链接

[root@node4 ~]# ll test
total 808
-rwxr----- 2 root root 410008 Aug  3 19:00 nmon
-rwxr----- 2 root root 410008 Aug  3 19:00 yln_nmon
[root@node4 ~]# du -h test/nmon 
404K	test/nmon
[root@node4 ~]# du -h test/yln_nmon 
404K	test/yln_nmon
[root@node4 ~]# du -h -L test/yln_nmon 
404K	test/yln_nmon
[root@node4 ~]# du -h -D test/yln_nmon 
404K	test/yln_nmon
[root@node4 ~]# du -h -H test/yln_nmon 
404K	test/yln_nmon
[root@node4 ~]#                   # 以上支持查文件,硬链接占用磁盘空间大小都会显示
[root@node4 ~]# du -h test        # 直接查询目录,默认只统计一次大小
404K	test
[root@node4 ~]# du -h -l test     # 指定-l参数查询目录,则会统计两次大小
808K	test
[root@node4 ~]# 

4.5.打印占用总计信息

注: 指定目录查询时,最后会统计目录大小与-c的total总计值大小一样;指定非目录查询时更适合使用-c参数显示total总计数值

# 最后会打印一行总计total信息,总计信息前也有一个other,两个大小一致
# 说明目录查询的时候原本就会有一个总计信息
[root@node4 Desktop]# du --all -h -c other/
28K	other/odb64luo_20240226_1.sh
28K	other/odb64luo_20240226.sh
56K	other/
56K	total
[root@node4 Desktop]# 

# 直接当前目录指向,也会有当前目录的总计大小
[root@node4 other]# du --all -h
28K	./odb64luo_20240226_1.sh
28K	./odb64luo_20240226.sh
56K	.
[root@node4 other]#

# 使用du -h *方式,没有目录,就不会有目录统计,更适合指定-c统计total信息
[root@node4 other]# du --all -h *
28K	odb64luo_20240226_1.sh
28K	odb64luo_20240226.sh
[root@node4 other]# 

4.6.统计占用大于/小于等于某大小的文件

[root@node4 Desktop]# du --all -h -t 13M         # 显示大于30M的文件
30M	./test2.txt
47M	.
[root@node4 Desktop]# 
[root@node4 Desktop]# du --all -h -t -13M        # 显示小于等于30M的文件
28K	./other/odb64luo_20240226_1.sh
28K	./other/odb64luo_20240226.sh
56K	./other
1.5M	./openssl11-libs-1.1.1k-4.el7.x86_64.rpm
292K	./libzstd-1.5.4-1.el7.x86_64.rpm
1.6M	./openssl11-1.1.1m-1.el7.x86_64.rpm
4.0K	./flist.txt
13M	./test1.txt
[root@node4 Desktop]# 

4.7.统计文件内(标准输入)列表空间占用大小

## --files0-from=F 参数使用
## vi打开文件如下,"^@"是一个字符,vi中输入方法为Ctrl+v,然后接着 Ctrl+@ 
[root@node4 ~]# vi dflist.txt                # t1.txt是文件,pg是目录
t1.txt^@pg
~                                                                                                                                                   
~                                                                                                                                                   
~                                                                                                                                                   
~                                                                                                                                                   
"dflist.txt" 1L, 10C
[root@node4 ~]# cat dflist.txt 
t1.txtpg
[root@node4 ~]# 
[root@node4 ~]# truncate -s -1 dflist.txt     # 删除文件最后一个字符(换行符)
[root@node4 ~]# 
[root@node4 ~]# cat dflist.txt                # 再次查看与上面对比
t1.txtpg[root@node4 ~]# 
[root@node4 ~]# 
[root@node4 ~]# du --files0-from=dflist.txt   # 可正常指定文件统计信息
4	t1.txt
8596	pg
[root@node4 ~]# 

#########################################################################
#########################################################################
## --files0-from=- 参数使用
## find中-print0参数的作用是在输出文件名时使用null字符(\0)作为分隔符,而不是换行符
[root@node4 ~]# find . -name "t[12].txt" -print0 | du --files0-from=-
4	./t1.txt
4	./t2.txt
[root@node4 ~]# 

4.8.排除文件统计空间占用

[root@node4 Desktop]# du --all -h
30M	./test2.txt
4.0K	./flist.txt
28K	./other/odb64luo_20240226_1.sh
28K	./other/odb64luo_20240226.sh
56K	./other
1.5M	./openssl11-libs-1.1.1k-4.el7.x86_64.rpm
292K	./libzstd-1.5.4-1.el7.x86_64.rpm
1.6M	./openssl11-1.1.1m-1.el7.x86_64.rpm
34M	.
[root@node4 Desktop]# 

4.8.1.排除单个文件

[root@node4 Desktop]# du --all -h --exclude=libzstd-1.5.4-1.el7.x86_64.rpm
30M	./test2.txt
4.0K	./flist.txt
28K	./other/odb64luo_20240226_1.sh
28K	./other/odb64luo_20240226.sh
56K	./other
1.5M	./openssl11-libs-1.1.1k-4.el7.x86_64.rpm
1.6M	./openssl11-1.1.1m-1.el7.x86_64.rpm
33M	.
[root@node4 Desktop]# 

 4.8.2.排除多个文件

[root@node4 Desktop]# cat flist.txt 
other/odb64luo_20240226_1.sh
openssl11-libs-1.1.1k-4.el7.x86_64.rpm
test2.txt
flist.txt
[root@node4 Desktop]# du --all -h -X flist.txt 
28K	./other/odb64luo_20240226.sh
28K	./other
292K	./libzstd-1.5.4-1.el7.x86_64.rpm
1.6M	./openssl11-1.1.1m-1.el7.x86_64.rpm
1.9M	.
[root@node4 Desktop]# 

4.9.增加时间显示列(访问时间/修改时间/变更时间)

Access(访问时间): 读取文件内容(cat、less等): 审计文件访问记录,清理长时间未读文件

Modify(修改时间): 修改文件内容(vim、echo >>等): 代码版本管理,增量备份依据

Change(变更时间): 修改文件元数据或内容(权限、所有者、链接等): 安全审计,追踪异常文件变更

[root@node4 other]# du --all --time                 # 增加显示修改时间列
28	2025-04-04 12:12	./odb64luo_20240226_1.sh
28	2024-02-26 16:47	./odb64luo_20240226.sh
56	2025-08-03 20:04	.
[root@node4 other]# du --all --time=access          # 增加显示访问时间列
28	2025-04-04 12:15	./odb64luo_20240226_1.sh
28	2025-04-03 13:42	./odb64luo_20240226.sh
56	2025-08-03 20:05	.
[root@node4 other]# du --all --time=ctime           # 增加显示更新时间列
28	2025-08-03 20:04	./odb64luo_20240226_1.sh
28	2025-08-03 20:04	./odb64luo_20240226.sh
56	2025-08-03 20:04	.
[root@node4 other]# 

# 还可以指定时间列的时间格式
[root@node4 other]# du --all --time=ctime --time-style=iso
28	2025-08-03	./odb64luo_20240226_1.sh
28	2025-08-03	./odb64luo_20240226.sh
56	2025-08-03	.
[root@node4 other]# du --all --time=ctime --time-style=full-iso
28	2025-08-03 20:04:42.249452306 +0800	./odb64luo_20240226_1.sh
28	2025-08-03 20:04:42.249452306 +0800	./odb64luo_20240226.sh
56	2025-08-03 20:04:42.249452306 +0800	.
[root@node4 other]# 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

豆是浪个

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值