#列出当前目录下的文件和子文件夹 [roc@roclinux ruanjian]$ ls -F curl-7.34.0.tar.gz soft/ wordpress-4.4.1.tar.gz #计算当前文件夹的总磁盘占用量, -s选项表示计算总和, -h选项表示以恰当的K/M/G单位展示 [roc@roclinux ruanjian]$ du -sh . 51M
-h
选项常常代表“展示帮助信息”,即 --help 的缩写形式。但是,du 命令却不走寻常路,它的-h
选项是 --human-readable 的缩写形式,表示以人类可读的形式展示磁盘使用量的单位名称(K/M/G)。
-s
选项,是 --summarize 的缩写形式,其作用是对 du 的每一个给定参数计算其磁盘使用量,我们来看例子。
#当前文件夹下有2个tar.gz文件和1个soft文件夹 [roc@roclinux ruanjian]$ ls -F curl-7.34.0.tar.gz soft/ wordpress-4.4.1.tar.gz #通配形式的参数首先被Shell解析, 然后-s选项发挥作用, 展示每一个参数对应的磁盘空间使用量 [roc@roclinux ruanjian]$ du -sh * 3.4M curl-7.34.0.tar.gz 41M soft 6.8M wordpress-4.4.1.tar.gz
-c
选项,是 --total 的缩写形式,它表示的是针对输出的各个对象来计算其磁盘使用量的总和。比如,我们想计算当前文件夹下所有后缀是 tar.gz 的文件的磁盘使用量总和,那么命令是这样的:
[roc@roclinux ruanjian]$ du -ch *.tar.gz 3.4M curl-7.34.0.tar.gz 6.8M wordpress-4.4.1.tar.gz 11M 总用量可以看到,最后一行展示出的 11M,便是
-c
选项起到的求和作用。-c
选项也可以计算文件和文件夹的混合求和:
[roc@roclinux ruanjian]$ du -ch curl-7.34.0.tar.gz soft 3.4M curl-7.34.0.tar.gz 41M soft 45M 总用量
-c
选项就可以很好地满足需求了。
#我们模拟了和图8完全一致的目录结构 [roc@roclinux movies]$ tree . |-- China | |-- 2016 | | |-- Action | | | `-- yip_man.avi | | |-- Adventure | | | `-- hero.avi | | `-- Romance | | `-- rose.avi | `-- 2017 | |-- Action | | `-- drunken_master.avi | |-- Adventure | | `-- treatment.avi | `-- Romance | `-- banquet.avi `-- USA |-- 2016 | |-- Action | | `-- gian.avi | |-- Adventure | | `-- patton.avi | `-- Romance | `-- god_father.avi `-- 2017 |-- Action | `-- african_queen.avi |-- Adventure | `-- star_wars.avi `-- Romance `-- citizen_kane.avi #当--max-depth设定为0时, 只显示当前文件夹总大小 #可见, --max-depth=0的作用, 相当于-s [roc@roclinux movies]$ du --max-depth=0 -h . 5.2G #当--max-depth设定为1时, 则增加显示了第一级的文件夹大小 [roc@roclinux movies]$ du --max-depth=1 -h . 2.7G ./China 2.5G ./USA 5.2G . #当--max-depth设定为2时, 则会继续增加显示下一级子文件夹 [roc@roclinux movies]$ du --max-depth=2 -h . 1.4G ./China/2017 1.3G ./China/2016 2.7G ./China 1.2G ./USA/2017 1.3G ./USA/2016 2.5G ./USA 5.2G .以此类推,大家应该能够理解 --max-depth 的作用了吧。
-a
选项让 du 输出包括文件夹和文件在内的完整统计信息#如果不指定-a选项 [roc@roclinux ruanjian]$ du -h . 41M ./soft 51M . #指定了-a选项之后, du则会刨根问底儿地把所有文件夹和文件都展示出来 [roc@roclinux ruanjian]$ du -ah . 6.8M ./wordpress-4.4.1.tar.gz 3.4M ./curl-7.34.0.tar.gz 980K ./soft/redis-2.6.16.tar.gz 40M ./soft/go1.1.2.Linux-amd64.tar.gz 41M ./soft 51M .
-a
选项的威力还是很大的,即便是隐藏文件也会被囊括进来的,这时,有些用户的问题就随之而来了……
#我们随意模拟了几个隐藏的文件和文件夹 [roc@roclinux ruanjian]$ du -ah . 6.8M ./wordpress-4.4.1.tar.gz 3.4M ./curl-7.34.0.tar.gz 980K ./soft/redis-2.6.16.tar.gz 40M ./soft/go1.1.2.Linux-amd64.tar.gz 120K ./soft/.abc 0 ./.bbc/ddd 0 ./.bbc/.ccc 51M . #用--exclude的一个很简单的正则匹配, 就可以完美解决问题啦 [roc@roclinux ruanjian]$ du -ah --exclude="*/.*" . 6.8M ./wordpress-4.4.1.tar.gz 3.4M ./curl-7.34.0.tar.gz 980K ./soft/redis-2.6.16.tar.gz 40M ./soft/go1.1.2.Linux-amd64.tar.gz 41M ./soft 51M .
#只想看当前文件夹下第一级的大小排序 [roc@roclinux ruanjian]$ du -sh *|sort -nr 41M soft 6.8M wordpress-4.4.1.tar.gz 3.4M curl-7.34.0.tar.gz #想看当前文件夹和其子文件夹下的大排序 [roc@roclinux ruanjian]$ du -ah .|sort -hr 51M . 41M ./soft 40M ./soft/go1.1.2.Linux-amd64.tar.gz 6.8M ./wordpress-4.4.1.tar.gz 3.4M ./curl-7.34.0.tar.gz 980K ./soft/redis-2.6.16.tar.gz
-h
选项和-n
选项的区别:
-n
选项,按数值进行比较,只会傻傻地比较数字,它会认为 98 K大于 2G。-h
选项,会更加聪明,先优先比较单位(G>M>K),然后再对数值进行比较。#这里的单位就是KB, 按1KB=1024bytes计算, 是3530752bytes [roc@roclinux ruanjian]$ du curl-7.34.0.tar.gz 3448 curl-7.34.0.tar.gz #而这里可以很清楚地看到是MB [roc@roclinux ruanjian]$ du -h curl-7.34.0.tar.gz 3.4M curl-7.34.0.tar.gz
#有一个文件, 里面只输入了a、b两个英文字母 [roc@roclinux ruanjian]$ cat myword ab #用下面的方法, 我们可以把文件中的控制字符也展示出来, 发现除了a、b外还包括了一个结尾符 [roc@roclinux ruanjian]$ sed -n l myword ab$ #用ls来查看大小, 发现展示的是3字节 [roc@roclinux ruanjian]$ ls -l myword -rw-rw-r-- 1 roc roc 3 2月 18 15:53 myword #用du来查看大小, 竟然展示的是4KB字节 [roc@roclinux ruanjian]$ du myword 4 myword
#有一个文件, 里面只输入了a、b两个英文字母 [roc@roclinux ruanjian]$ cat myword ab #用这个方法, 我们可以把文件里的控制字符也展示出来, 发现除了a、b外还包括了一个结尾符。 [roc@roclinux ruanjian]$ sed -n l myword ab$ #用ls来查看大小, 发现展示的是3字节 [roc@roclinux ruanjian]$ ls -l myword -rw-rw-r-- 1 roc roc 3 2月 18 15:53 myword #用du来查看大小, 发现竟然展示的是4KB [roc@roclinux ruanjian]$ du myword 4 myword
#这是我们原有的那个文件 [roc@roclinux ruanjian]$ cat myword ab [roc@roclinux ruanjian]$ ls -l myword -rw-rw-r-- 1 roc roc 3 2月 18 15:53 myword #在myword文件中, 用dd神器来创造一个大小为1G的空洞 [roc@roclinux ruanjian]$ dd if=/dev/zero of=myword oflag=append bs=1M seek=1024 count=0 记录了0+0 的读入 记录了0+0 的写出 0字节(0 B)已复制, 1.44e-05 秒, 0.0 kB/秒 #我们看看myword文件内部发生了什么, 看到\000了么, 这就是空洞! [roc@roclinux ruanjian]$ sed -n l myword ab$ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000(此处省略数百行) #用ls查看, myword已经变成1GB啦, 好大! [roc@roclinux ruanjian]$ ls -hl myword -rw-rw-r-- 1 roc roc 1.0G 2月 18 16:41 myword #用du查看, myword现回原形, 还是那么小, 只增加了一个字节而已 [roc@roclinux ruanjian]$ du myword 4 myword
联系客服