1. du命令介绍
大家好,又见面了,我是沐风晓月,今天一起看看du命令的使用,先来看看什么是du命令。
du 主要用来了解磁盘空间使用情况
du命令是英文Disk Usage的缩写,即用于查看磁盘占用空间的意思。但是与df命令不同的是du命令是对文件和目录磁盘使用的空间的查看,而不是某个分区。
关于单词usage的发音及解释:
学计算机最好的方式就是看到不熟悉的单词,就及时查询一下,确保温故而知新。
2. 语法格式及常用选项
依据惯例,我们还是先查看帮助,使用 du –help
为了更直观一些,我们把查出来的参数用表格来展示:
GUN选项如下:
参数 |
描述 |
-a, –all |
显示对所有文件的统计,而不只是包含子目录。 |
-b, –bytes |
输出以字节为单位的大小,替代缺省时1024字节的计数单位。 |
–block-size=size |
输出以块为单位的大小,块的大小为 size 字节。( file- utils-4.0 的新选项) |
-c, –total |
在处理完所有参数后给出所有这些参数的总计。这个选项被用给出指定的一组文件或目录使用的空间的总和。 |
-D, –dereference-args |
引用命令行参数的符号连接。但不影响其他的符号连接。 |
-h, –human-readable |
为每个数附加一个表示大小单位的字母,象用M表示二进制 的兆字节。 |
-H, –si |
与 -h 参数起同样的作用,只是使用法定的 SI 单位( 用1000的幂而不是 1024 的幂,这样 M 代表的就是1000000 而不是1048576)。(fileutils-4.0 的新选项) |
-k, –kilobytes |
输出以1024字节为计数单位的大小。 |
-l, –count-links |
统计所有文件的大小,包括已经被统计过的(作为一个硬连接)。 |
-L, –dereference |
引用符号连接(不是显示连接点本身而是连接指向的文件或目录所使用的磁盘空间)。 |
-m, –megabytes |
输出以兆字节的块为计数单位的大小(就是 1,048,576 字节)。 |
–help |
在标准输出上输出帮助信息后正常退出。 |
–version |
在标准输出上输出版本信息后正常退出。 |
POSIX 选项如下
参数 |
描述 |
-a |
显示对涉及到的所有文件的统计,而不只是包含子目录。 |
-k |
用1024字节作为计数单位,替代缺省时512字节的计数单位。 |
-x |
只输出指定参数的实际使用空间,而不包括其下的子目录。 |
-s |
只统计指定参数的在同一设备上所使用的空间。 |
这里要提一下 命令行中参数的三大风格:
所谓的三大风格,即:Unix/Posix、BSD、GNU。
具体的区别如下:
- Unix/Posix风格,即命令后的参数,可以分组,便必须以连字符开头,如ps -aux。
- BSD风格,即命令后的参数,可以分组,但不可以与连字符同用。
- GNU风格,即长选项,命令后的参数,可以分组,但必须以双横线开头,如:ps –help。
3. 参考案例
3.1 显示目录的所使用的磁盘空间
此时,无需加任何参数,默认是KB为单位
[root@doc ~]# du
备注: 只显示当前目录下面的子目录的目录大小和当前目录的总的大小,最下面的4480为当前目录的总大小
3.2 显示指定文件所占的空间
案例一: du后面直接跟上文件名,显示指定文件所占空间
du后面直接跟上文件名即可,比如:
[root@mufenggrow ~]# du wordpress-4.9.4-zh_CN.tar.gz
8872 wordpress-4.9.4-zh_CN.tar.gz
但这种方法查看到时候,8872的单位为kb,我们可以用-h来显示为更实现我们阅读的:
案例二: 使用-h参数,让结果更便于识别和阅读
[root@mufenggrow ~]# du -h wordpress-4.9.4-zh_CN.tar.gz
8.7M wordpress-4.9.4-zh_CN.tar.gz
可以看到,这种情况下,显示的就是8.7M
案例三: 查看多个文件所占到空间
[root@mufenggrow ~]# du -h anaconda-ks.cfg wordpress-4.9.4-zh_CN.tar.gz
4.0K anaconda-ks.cfg
8.7M wordpress-4.9.4-zh_CN.tar.gz
想要显示几个文件的 ,就在后面加几个文件名即可。
3.3 显示目录总和的大小
此处使用-s 参数,如果不加-s,会显示所有的目录中的文件,而-s参数只显示总和。
[root@mufenggrow ~]# du -sh ./
14M ./
[root@mufenggrow ~]# du -sh /etc/
38M /etc/
当然这里也可以不加-h参数,只使用-s参数
[root@mufenggrow ~]# du -s /etc/
38504 /etc/
3.4 文件和目录都显示
案例一: 文件和目录的大小都显示,使用-a参数
## 创建实验环境
[root@mufenggrow ~]# mkdir test
[root@mufenggrow ~]# cp /etc/passwd test/
[root@mufenggrow ~]# cp /etc/hosts test/
[root@mufenggrow ~]# echo aaa > test/a.txt
# 使用-a参数进行测试
[root@mufenggrow ~]# du -ah test/
4.0K test/passwd
4.0K test/hosts
4.0K test/a.txt
12K test/
案例二: 显示几个文件或者目录占磁盘空间的大小,并统计他们的总和
[root@mufenggrow ~]# du -c test
12 test
12 总用量
如果是多个目录会计算多个目录的总和:
[root@mufenggrow ~]# cp -r test test1
[root@mufenggrow ~]# du -c test test1
12 test
12 test1
24 总用量
从上面的代码可以看到test1的大小和test的大小做了数学运算。
案例三: 如果文件和目录深度太深,我们只想看第一层:
可以使用-d参数或者 –max-depth=1
[root@mufenggrow ~]# du -a -d 1 /etc/
4 /etc/fstab
0 /etc/crypttab
0 /etc/mtab
4 /etc/resolv.conf
... 省略
3.5 按照空间大小进行排序
这里会用到另一个命令sort,sort命令主要是用来排序的。
sort -nr 从大到小进行排序:
[root@mufenggrow ~]# du -h ./ |sort -nr
488K ./.cache/gstreamer-1.0
480K ./.cache/vmware/drag_and_drop/I6l2yO
480K ./.cache/vmware/drag_and_drop
480K ./.cache/vmware
384K ./.local/share
3.6 以M为单位进行显示
-m 参数是以M为单位进行输出,不足1M的按照1M进行处理。
[root@mufenggrow ~]# du -m test/
1 test/
代码中,test目录的大小不足1M,就会显示为1M
4. du 和df的区别
我们上篇文章中已经讲过的df命令,df命令主要用来快速获取磁盘被占用的多少空间,目前还剩多少空间。如果你对df命令还不是很了解,可以参考:linux基本功之df命令
我们今天学的du命令,也是用来显示磁盘的使用情况,统计目录或者文件所占空间的大小,这两个有什么区别呢?
du和df的区别如下:
- 两者都统计范围有所区别
- df 命令是从总体上统计系统各磁盘的占用情况,不能统计具体的文件夹或文件的大小。
- du命令既可以从总体上统计,也可以统计具体的文件夹或文件的大小。
从这一点看,du命令统计的更全面一些
- 计算方式和计算速度有差异
- df 命令通过文件系统来快速获取文件系统空间大小的信息,相较而言速度快,效率高;
- du命令需要逐级进入指定目录去遍历每一个子目录,逐个计算每个文件大小并相加,最终实现效果展示。 计算速度相对来说略慢,如果要统计子文件特别多的目录,计算时间比较长。
更重要的是: 如果目录权限不够,可能会出现权限不够的错误,导致统计失败。
- 计算结果的差异
- df命令可以获取已经删除文件的占空间的大小。 因为文件删除并不会导致文件立马从文件系统当中消失,有时候会有程序占用,这时候我们用df还是可以统计到的。
- du命令不能统计刚刚被删除的文件,只能计算没有被删除,且当前存在的文件。
由此 我们得出一个结论: du命令的统计更精准,但受到权限和速度的限制。 df命令不算准确,但好处就是效率高,没有权限限制。
两个一起用,然后根据实际情况进行分析,或许是最好的选择。如果想要看目录,优先选择du命令。
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.e1idc.net