Linux下du命令详解--查看⽂件和⽬录⼤⼩
du 是 Disk Usage 的缩写, Linux 上最受欢迎的命令之⼀,它⽤来估算⽂件或⽬录占⽤的磁盘空间, 它也是很基础的命令,使⽤Linux的⼈都应该掌握它的⽤法
du 命令及语法
Usage: du [OPTION]... [FILE]...
du [OPTION]... --files0-from=F
常⽤的选项如下:
-a: 显⽰⽬录中所有⽂件以及⽂件夹⼤⼩
-h: 以 Kb、Mb 、Gb 等易读的单位显⽰⼤⼩
--si: 类似 -h 选项,但是计算是⽤ 1000 为基数⽽不是1024
-s: 显⽰⽬录总⼤⼩
-d: 是 --max-depth=N 选项的简写,表⽰深⼊到第⼏层⽬录,超过指定层数⽬录则忽略
-c: 除了显⽰⽬录⼤⼩外,额外⼀⾏显⽰总占⽤量
--time: 显⽰每⼀个⽬录下最近修改⽂件的时间
-t: 是 --threshold=SIZE 的简写,过滤掉⼩于 SIZE ⼤⼩的⽂件以及⽬录
--exclude=PATTERN:过滤与 PATTERN 匹配的⽂件名或者⽬录名
显⽰所有⽬录及⽂件⼤⼩
下⾯的例⼦显⽰了所有⽬录以及⽬录下⽂件的⼤⼩,单位默认是 Kb
[root@ecs-centos-7 tt]# du -a temp/
4     
4      temp/
4      temp/test/
8      temp/test/ha
16      temp/test
4     
28      temp/
注意: 上⾯的例⼦如果不使⽤ -a 选项,默认情况下只显⽰⽬录⼤⼩,不显⽰⽂件⼤⼩。即执⾏du temp/ 只会显⽰⽬录⼤⼩,请看以下的例⼦:
[root@ecs-centos-7 tt]# du temp
8      temp/test/ha
16      temp/test
28      temp
以易读的⽅式显⽰
默认显⽰的⼤⼩只有⼀个孤零零的数字,连单位也没有,让⼈第⼀眼看上去有点疑惑,通过 -h 选项可以让⼤⼩显⽰成⼈类易读的⽅式,这个选项应该是最常⽤的了[root@ecs-centos-7 tt]# du -b temp/
4117    temp/test/ha
8218    temp/test
12326  temp/
[root@ecs-centos-7 tt]# du -h temp/
8.0K    temp/test/ha
16K    temp/test
28K    temp/
[root@ecs-centos-7 tt]# du --si temp/
8.2k    temp/test/ha
17k    temp/test
29k    temp/
上⾯的例⼦中, -h 选项默认计算基数是 1024 , --si 选项默认计算基数是 1000
所以temp/test/ha⽬录以 -h 选项计算的⼤⼩是 8.0K,⽽以 --si 选项计算的⼤⼩是 8.2K
-h 以及 --si 选项的⼤⼩单位随着⽬录及⽂件的⼤⼩⾃动的调整
⽬录总⼤⼩
有时我们只需要知道⼀个⽬录的总⼤⼩,不需要知道⼦⽬录及⼦⽬录下⽂件的⼤⼩,可以通过 -s 选项获取⽬录总⼤⼩
[root@ecs-centos-7 tt]# du -sh .
72K    .
[root@ecs-centos-7 tt]# du -sh temp/
28K    temp/
上⾯的例⼦分别获取当前⽬录的总⼤⼩以及 temp/ ⽬录的总⼤⼩
通过 -c 选项也能获取⽬录总⼤⼩,不过它先显⽰⼦⽬录⼤⼩,最后⼀⾏显⽰总⼤⼩,下⾯例⼦最后⼀⾏ total 字符串前⾯的 28K 表⽰ temp/ ⽬录的总⼤⼩
[root@ecs-centos-7 tt]# du -ch temp/
8.0K    temp/test/ha
16K    temp/test
28K    temp/
28K    total
指定⽬录深度
如果⼀个⽬录有很多⼦⽬录,只想显⽰指定层数⽬录⼤⼩的话,可以使⽤ -d 选项实现
temp/ 的⼦⽬录结构如下:
[root@ecs-centos-7 tt]# tree -d temp/
temp/
└── test
└── ha
2 directories
指定⽬录深度
[root@ecs-centos-7 tt]# du -d 0 temp/
28      temp/
[root@ecs-centos-7 tt]# du -d 1 temp/
16      temp/test
28      temp/
[root@ecs-centos-7 tt]# du --max-depth=2 temp/
8      temp/test/ha
16      temp/test
28      temp/
du -d 0 temp/: 显⽰第0层⽬录,也即当前⽬录总⼤⼩,此时相当于 -s 选项
du -d 1 temp/: 显⽰第1层⽬录,也即 temp/test ⽬录的总⼤⼩
du --max-depth=2 temp/: 显⽰第2层⽬录,也即 temp/test/ha ⽬录总⼤⼩
显⽰最近修改时间
[root@ecs-centos-7 tt]# du --time temp
8      2020-07-21 20:11        temp/test/ha
16      2020-07-21 20:11        temp/test
28      2020-07-21 20:13        temp
上⾯的例⼦中显⽰了每个⽬录最近修改时间,时间的粒度只精确到分钟
如果想显⽰粒度更细些的话,可以⽤ --time-syle=STYLE 选项来指定时间的输出格式,其中 STYLE 表⽰⽇期的格式化输出字符串,和 date 命令的格式化输出的格式⼀样的例1:显⽰ UTC 时间的秒数(从1970年1⽉1⽇到现在的秒数)
[root@ecs-centos-7 tt]# du --time --time- temp/
8      1595333498      temp/test/ha
16      1595333514      temp/test
28      1595333582      temp/
例2:显⽰完整的年⽉⽇时分秒
[root@ecs-centos-7 tt]# du --time --time- temp/
8      2020-07-21 20:11:38    temp/test/ha
16      2020-07-21 20:11:54    temp/test
28      2020-07-21 20:13:02    temp/
按照⼤⼩过滤
从显⽰的结果中,过滤掉指定⼤⼩的⽬录以及⽂件
[root@ecs-centos-7 tt]# du -b temp/
4117    temp/test/ha
8218    temp/test
linux查看当前文件夹内容12326  temp/
[root@ecs-centos-7 tt]# du -b -t 4118 temp/
8218    temp/test
12326  temp/
上⾯的例⼦中,过滤掉⼩于 4118 bytes 的⽬录
按照⽬录名或⽂件名过滤
假如⼀个⽬录下⼦⽬录太多,我们可以根据⼦⽬录名或者⽂件名和指定的模式串匹配,从⽽过滤掉匹配上的⽬录和⽂件
[root@ecs-centos-7 tt]# du -a temp
4     
4      temp/
4      temp/test/
8      temp/test/ha
16      temp/test
4     
28      temp
[root@ecs-centos-7 tt]# du -a --exclude=*a* temp/
4      temp/test
4     
12      temp/
上⾯的例⼦中, 过滤的模式串是: *a*
它表⽰过滤掉⽬录名或者⽂件名中含有字符 a的⽬录或⽂件,例⼦中前⾯四⾏的⽬录或⽂件名中都包含了 a字符,所以都被过滤掉了占满磁盘的都是什么⽂件
开发者经常遇到的问题是磁盘满了,这时我们可以组合使⽤ du 和 sort 来查出 “元凶”,使⽤sort -hr进⾏倒序排序当前⽬录下⽂件从⼤到⼩排序
[root@ecs-centos-7 tt]# du -sh temp/* | sort -hr
10M    temp/clpay.tar
16K    temp/test
4.0K   
4.0K    temp/lnsuba
当前⽬录以及⼦⽬录从⼤到⼩排序
[root@ecs-centos-7 tt]# du -ah temp/* | sort -hr
10M    temp/clpay.tar
16K    temp/test
8.0K    temp/test/ha
4.0K   
4.0K    temp/test/
4.0K    temp/
4.0K    temp/lnsuba
磁盘占⽤最⼤的三个⽬录以及⼦⽬录
[root@ecs-centos-7 tt]# du -ah temp/* | sort -hr | head -n 3
10M    temp/clpay.tar
16K    temp/test
8.0K    temp/test/ha
通过上⾯介绍的⼏种⽅式可以出指定⽬录中哪些⽂件或⽬录占⽤磁盘空间⽐较⼤,清理的时候优先清理它们

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。