linux基本功系列之du命令实战

在这里插入图片描述

前言

😄 大家好,我是沐风晓月,双一流本科,计算机专业,一起学习,努力成长!
🛰️🛰️ 本文选入系列专栏:【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, --all             write 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 in units 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 in file F;
                          if F is -, then read 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 times if 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 ~]# du
4	./.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 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

四. du 和df的区别

我们上篇文章中已经讲过的df命令,df命令主要用来快速获取磁盘被占用的多少空间,目前还剩多少空间。
如果你对df命令还不是很了解,可以参考:linux基本功之df命令实战

我们今天学的du命令,也是用来显示磁盘的使用情况,统计目录或者文件所占空间的大小,这两个有什么区别呢?

du和df的区别如下:

  1. 两者都统计范围有所区别
  • df 命令是从总体上统计系统各磁盘的占用情况,不能统计具体的文件夹或文件的大小。
  • du命令既可以从总体上统计,也可以统计具体的文件夹或文件的大小。

从这一点看,du命令统计的更全面一些

  1. 计算方式和计算速度有差异
  • df 命令通过文件系统来快速获取文件系统空间大小的信息,相较而言速度快,效率高;
  • du命令需要逐级进入指定目录去遍历每一个子目录,逐个计算每个文件大小并相加,最终实现效果展示。 计算速度相对来说略慢,如果要统计子文件特别多的目录,计算时间比较长。

更重要的是: 如果目录权限不够,可能会出现权限不够的错误,导致统计失败。

  1. 计算结果的差异
  • df命令可以获取已经删除文件的占空间的大小。 因为文件删除并不会导致文件立马从文件系统当中消失,有时候会有程序占用,这时候我们用df还是可以统计到的。
  • du命令不能统计刚刚被删除的文件,只能计算没有被删除,且当前存在的文件。

由此 我们得出一个结论: du命令的统计更精准,但受到权限和速度的限制。 df命令不算准确,但好处就是效率高,没有权限限制。

两个一起用,然后根据实际情况进行分析,或许是最好的选择。如果想要看目录,优先选择du命令。

总结

du命令在日常工作中,应用的比较广泛,一定要认真学习,记熟记牢常用参数。

💕💕💕 好啦,这就是今天要分享给大家的全部内容了,我们下期再见!✨ ✨ ✨
🍻🍻🍻如果你喜欢的话,就不要吝惜你的一键三连了~

请添加图片描述
在这里插入图片描述

  • 33
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 35
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 35
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值