文章目录
前言
😄 大家好,我是沐风晓月,双一流本科,计算机专业,一起学习,努力成长!
🛰️🛰️ 本文选入系列专栏:【linux基本功-基础命令实战】
💓 想要学好Linux,命令是基本功,企业中常用的命令大约200多个,不管是写shell脚本还是管理操作系统,最常用的命令必须要牢牢掌握,像我们以前学乘法口诀一样,烂熟于心,唯有如此,才能打牢基础。
💓 只要地球不爆炸,我们永远不放假,只要宇宙不重启,我们永远不休息,,风里雨里节日里我们都在机房等着你
💓 知识最重要的是记忆,反复练习才能有所成就
💓 入门须知: 想要人生从容,必须全力以赴,努力才是你最终的入场券🚀🚀🚀
💕 最后:努力 成长自己,愿我们都能在看不到的地方闪闪发光 ,一起加油进步🍺🍺🍺
一. du命令介绍
大家好,又见面了,我是沐风晓月,今天一起看看du命令的使用,先来看看什么是du命令。
du 主要用来了解磁盘空间使用情况
du命令是英文Disk Usage的缩写,即用于查看磁盘占用空间的意思。但是与df命令不同的是du命令是对文件和目录磁盘使用的空间的查看,而不是某个分区。
关于单词usage的发音及解释:
学计算机最好的方式就是看到不熟悉的单词,就及时查询一下,确保温故而知新。
二. 语法格式及常用选项
依据惯例,我们还是先查看帮助,使用 du–help
[root@mufenggrow ~]# du --help
用法:du [选项]... [文件]...
或:du [选项]... --files0-from=F
Summarize disk usage of each FILE, recursively for directories.
Mandatory arguments to long options are mandatory for short options too.
-0, --null end each output line with 0 byte rather than newline
-a, --allwrite counts for all files, not just directories
--apparent-size print apparent sizes, rather than disk usage; although
the apparent size is usually smaller, it may be
larger due to holes in('sparse') files, internal
fragmentation, indirect blocks, and the like
-B, --block-size=SIZE scale sizes by SIZE before printing them; e.g.,
'-BM' prints sizes inunits of 1,048,576 bytes;
see SIZE format below
-b, --bytes equivalent to '--apparent-size --block-size=1'
-c, --total produce a grand total
-D, --dereference-args dereference only symlinks that are listed on the
command line
-d, --max-depth=N print the total for a directory (or file, with --all)
only if it is N or fewer levels below the command
line argument; --max-depth=0 is the same as
--summarize
--files0-from=F summarize disk usage of the
NUL-terminated file names specified infile F;if F is -, thenread names from standard input
-H equivalent to --dereference-args (-D)
-h, --human-readable print sizes in human readable format(e.g., 1K 234M 2G)--inodes list inode usage information instead of block usage
-k like --block-size=1K
-L, --dereference dereference all symbolic links
-l, --count-links count sizes many timesif hard linked
-m like --block-size=1M
-P, --no-dereference don't follow any symbolic links (this is the default)
-S, --separate-dirs for directories do not include size of subdirectories
--si like -h, but use powers of 1000 not 1024
-s, --summarize display only a total for each argument
-t, --threshold=SIZE exclude entries smaller than SIZE if positive,
or entries greater than SIZE if negative
--time show time of the last modification of any file in the
directory, or any of its subdirectories
--time=WORD show time as WORD instead of modification time:
atime, access, use, ctime or status
--time-style=STYLE show times using STYLE, which can be:
full-iso, long-iso, iso, or +FORMAT;
FORMAT is interpreted like in 'date'
-X, --exclude-from=FILE exclude files that match any pattern in FILE
--exclude=PATTERN exclude files that match PATTERN
-x, --one-file-system skip directories on different file systems
--help 显示此帮助信息并退出
--version 显示版本信息并退出
所显示的数值是来自 --block-size、DU_BLOCK_SIZE、BLOCK_SIZE
及 BLOCKSIZE 环境变量中第一个可用的 SIZE 单位。
否则,默认单位是 1024 字节(或是 512,若设定 POSIXLY_CORRECT 的话)。
SIZE is an integer and optional unit (example: 10M is 10*1024*1024). Units
are K, M, G, T, P, E, Z, Y (powers of 1024) or KB, MB, ... (powers of 1000).
为了更直观一些,我们把查出来的参数用表格来展示:
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.1 显示目录的所使用的磁盘空间
此时,无需加任何参数,默认是KB为单位
[root@mufenggrow ~]# du4 ./.cache/dconf
4 ./.cache/imsettings
0 ./.cache/libgweather
0 ./.cache/evolution/addressbook/trash
0 ./.cache/evolution/addressbook
0 ./.cache/evolution/calendar/trash
0 ./.cache/evolution/calendar
.....(省略部分内容)
0 ./桌面
0 ./下载
0 ./模板
0 ./公共
0 ./文档
0 ./音乐
0 ./图片
0 ./视频
4480.
备注: 只显示当前目录下面的子目录的目录大小和当前目录的总的大小,最下面的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 test12test12 总用量
如果是多个目录会计算多个目录的总和:
[root@mufenggrow ~]# cp -r test test1[root@mufenggrow ~]# du -c test test112test12 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
四. du 和df的区别
我们上篇文章中已经讲过的df命令,df命令主要用来快速获取磁盘被占用的多少空间,目前还剩多少空间。
如果你对df命令还不是很了解,可以参考:linux基本功之df命令实战
我们今天学的du命令,也是用来显示磁盘的使用情况,统计目录或者文件所占空间的大小,这两个有什么区别呢?
du和df的区别如下:
- 两者都统计范围有所区别
- df 命令是从总体上统计系统各磁盘的占用情况,不能统计具体的文件夹或文件的大小。
- du命令既可以从总体上统计,也可以统计具体的文件夹或文件的大小。
从这一点看,du命令统计的更全面一些
- 计算方式和计算速度有差异
- df 命令通过文件系统来快速获取文件系统空间大小的信息,相较而言速度快,效率高;
- du命令需要逐级进入指定目录去遍历每一个子目录,逐个计算每个文件大小并相加,最终实现效果展示。 计算速度相对来说略慢,如果要统计子文件特别多的目录,计算时间比较长。
更重要的是: 如果目录权限不够,可能会出现权限不够的错误,导致统计失败。
- 计算结果的差异
- df命令可以获取已经删除文件的占空间的大小。 因为文件删除并不会导致文件立马从文件系统当中消失,有时候会有程序占用,这时候我们用df还是可以统计到的。
- du命令不能统计刚刚被删除的文件,只能计算没有被删除,且当前存在的文件。
由此 我们得出一个结论: du命令的统计更精准,但受到权限和速度的限制。 df命令不算准确,但好处就是效率高,没有权限限制。
两个一起用,然后根据实际情况进行分析,或许是最好的选择。如果想要看目录,优先选择du命令。
总结
du命令在日常工作中,应用的比较广泛,一定要认真学习,记熟记牢常用参数。
💕💕💕 好啦,这就是今天要分享给大家的全部内容了,我们下期再见!✨ ✨ ✨
🍻🍻🍻如果你喜欢的话,就不要吝惜你的一键三连了~
版权归原作者 我是沐风晓月 所有, 如有侵权,请联系我们删除。