du 查看目录:文件和目录大小、目录深度查询并按大小进行排序

某天,我想检查一下电脑硬盘的的使用情况,作为一个命令控,废话少说,开始吧:

使用df 命令查看当前磁盘使用情况:
jack@jiaobuchong:~$ df -lh
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 18G 5.7G 11G 35% /
udev 2.7G 4.0K 2.7G 1% /dev
tmpfs 553M 916K 552M 1% /run
none 5.0M 0 5.0M 0% /run/lock
none 2.7G 488K 2.7G 1% /run/shm
/dev/sda2 946M 128M 754M 15% /boot
/dev/sda1 93G 87G 5.5G 95% /media/2AA64C7FA64C4D8F_

下面du命令就上场了:
jack@jiaobuchong:~$ pwd
/home/jack
jack@jiaobuchong:~$ du -sh
1.9G .
jack@jiaobuchong:~$ cd ..
jack@jiaobuchong:/home$ du -sh jack/
1.9G jack/
jack@jiaobuchong:/home$ du -h --max-depth=0 jack/
1.9G jack/

能看到上边得到的相同的结果吧,

-s, --summarize display only a total for each argument, -s这个参数的作用就是仅显示总计,即当前文件夹的大小。
jack@jiaobuchong:~$ du -sh *
170M Desktop
452K Documents
161M Downloads
12K examples.desktop
833M installed-software
284K learngit
4.0K Music
4.7M Pictures
3.2M program_pratice
4.0K Public
112K session
4.0K Templates
4.0K Videos

  • 可以将当前目录下所有文件的大小给列出来。那要将这些列出来的文件按照从大到小的方式排序呢?
    jack@jiaobuchong:~$ du -sh | sort -nr
    833M installed-software
    452K Documents
    284K learngit
    170M Desktop
    161M Downloads
    112K session
    12K examples.desktop
    4.7M Pictures
    4.0K Videos
    4.0K Templates
    4.0K Public
    4.0K Music
    3.2M program_pratice
    找sort 来帮个忙就可以了。呵呵!这个排序不正常哦,都是因为-h参数的原因,
    jack@jiaobuchong:~$ du -s
    | sort -nr
    852756 installed-software
    173868 Desktop
    164768 Downloads
    4724 Pictures
    3236 program_pratice
    452 Documents
    284 learngit
    112 session
    12 examples.desktop
    4 Videos
    4 Templates
    4 Public
    4 Music
    这样就正常排序了。

du -s * | sort -nr | head 选出排在前面的10个,

du -s * | sort -nr | tail 选出排在后面的10个。

Linux中查看各文件夹大小命令du -h --max-depth=1
du [-abcDhHklmsSx] [-L <符号连接>][-X <文件>][--block-size][--exclude=<目录或文件>] [--max-depth=<目录层数>][--help][--version][目录或文件]
常用参数:
-a或-all 为每个指定文件显示磁盘使用情况,或者为目录中每个文件显示各自磁盘使用情况。
-b或-bytes 显示目录或文件大小时,以byte为单位。
-c或–total 除了显示目录或文件的大小外,同时也显示所有目录或文件的总和。
-D或–dereference-args 显示指定符号连接的源文件大小。
-h或–human-readable 以K,M,G为单位,提高信息的可读性。
-H或–si 与-h参数相同,但是K,M,G是以1000为换算单位,而不是以1024为换算单位。
-k或–kilobytes 以1024 bytes为单位。
-l或–count-links 重复计算硬件连接的文件。
-L<符号连接>或–dereference<符号连接> 显示选项中所指定符号连接的源文件大小。
-m或–megabytes 以1MB为单位。
-s或–summarize 仅显示总计,即当前目录的大小。
-S或–separate-dirs 显示每个目录的大小时,并不含其子目录的大小。
-x或–one-file-xystem 以一开始处理时的文件系统为准,若遇上其它不同的文件系统目录则略过。
-X<文件>或–exclude-from=<文件> 在<文件>指定目录或文件。
–exclude=<目录或文件> 略过指定的目录或文件。
–max-depth=<目录层数> 超过指定层数的目录后,予以忽略。
–help 显示帮助。
–version 显示版本信息。

1> 要显示一个目录树及其每个子树的磁盘使用情况
du /home/linux
这在/home/linux目录及其每个子目录中显示了磁盘块数。

2> 要通过以1024字节为单位显示一个目录树及其每个子树的磁盘使用情况
du -k /home/linux
这在/home/linux目录及其每个子目录中显示了 1024 字节磁盘块数。

3> 以MB为单位显示一个目录树及其每个子树的磁盘使用情况
du -m /home/linux
这在/home/linux目录及其每个子目录中显示了 MB 磁盘块数。

4> 以GB为单位显示一个目录树及其每个子树的磁盘使用情况
du -g /home/linux
这在/home/linux目录及其每个子目录中显示了 GB 磁盘块数。

5>查看当前目录下所有目录以及子目录的大小:
du -h .
“.”代表当前目录下。也可以换成一个明确的路径
-h表示用K、M、G的人性化形式显示

6>查看当前目录下user目录的大小,并不想看其他目录以及其子目录:
du -sh user
-s表示总结的意思,即只列出一个总结的值
du -h --max-depth=0 user
--max-depth=n表示只深入到第n层目录,此处设置为0,即表示不深入到子目录。

7>列出user目录及其子目录下所有目录和文件的大小:
du -ah user
-a表示包括目录和文件

8>列出当前目录中的目录名不包括xyz字符串的目录的大小:
du -h --exclude='xyz'

9>想在一个屏幕下列出更多的关于user目录及子目录大小的信息:
du -0h user
-0(杠零)表示每列出一个目录的信息,不换行,而是直接输出下一个目录的信息。

10>只显示一个目录树的全部磁盘使用情况
du -s /home/linux
11>查看各文件夹大小:du -h --max-depth=1

查看指定目录:
代码如下: 其中 /path表示路径
du -h --max-depth=1 /path

具体如下所示:
root@ubuntu4146:~# du -h --max-depth=1 /data/
1.1G /data/gitlabDataa
8.0K /data/test
241G /data/gitlabData
809G /data/home
15G /data/OpenGrok
16K /data/lost+found
1.1T /data/

我们发现 /data/home/ 目录占用最多,因此我们可以继续看那个目录占用的最多,如下所示:
root@ubuntu4146:/data/home# du -h --max-depth=1 /data/home/
141G /data/home/wzm
62G /data/home/lwc
421G /data/home/hcy
16K /data/home/zzp
16K /data/home/zl
54G /data/home/drj
122G /data/home/sjq
4.1G /data/home/ljs
6.7G /data/home/ywm
809G /data/home/
root@ubuntu4146:/data/home#

接下来我做个总结:

案例1、查询某个目录或者当前目录大小:

方法1:可以直接进入该目录执行如下命令:
[root@test1 log]# cd /var/log
[root@test1 log]# du -sh #等同于命令du -sh .
54M .

方法2:直接du -sh +要查询的目录
[root@test1 log]# du -sh /var/log/
54M /var/log/

du -sh /var/log/ 或者du -sh .中s的意思就是汇总-s, --summarize 只分别计算命令列中每个参数所占的总用量
如果不加s,du -h /var/log/ 只能查询这个目录里面所有目录的大小了

-h, --human-readable 以可读性较好的方式显示尺寸(例如:1K 234M 2G)
--si 类似-h,但在计算时使用1000 为基底而非1024
[root@test1 log]# du -sh /var/log/
54M /var/log/

[root@test1 log]# du -h /var/log/
8.0K /var/log/ConsoleKit
4.0K /var/log/glusterfs
4.0K /var/log/httpd
36K /var/log/salt
8.0K /var/log/mail
17M /var/log/sa
27M /var/log/audit
54M /var/log/

[root@test1 log]# pwd
/var/log
[root@test1 log]# du -h
8.0K ./ConsoleKit
4.0K ./glusterfs
4.0K ./httpd
36K ./salt
8.0K ./mail
17M ./sa
27M ./audit
54M .

案例2、查询某个目录或者当前目录,所有文件及目录大小;默认深度为1
方法1:进入该目录,然后du -sh
[root@test1 log]# cd /var/log
[root@test1 log]# du -sh

8.0K anaconda.ifcfg.log
28K anaconda.log
36K anaconda.program.log
148K anaconda.storage.log
124K anaconda.syslog
116K anaconda.xlog
8.0K anaconda.yum.log

方法2:du -sh /var/log/
[root@test1 log]# du -sh
/var/log/
8.0K anaconda.ifcfg.log
28K anaconda.log
36K anaconda.program.log
148K anaconda.storage.log
124K anaconda.syslog
116K anaconda.xlog

案例3、查询某个目录或者当前目录,所有目录大小;默认深度为1

方法1:直接进入目录,du -h或者du -h .
[root@test1 log]# cd /var/log/
[root@test1 log]# du -h
8.0K ./ConsoleKit
4.0K ./glusterfs
4.0K ./httpd
36K ./salt
8.0K ./mail
17M ./sa
27M ./audit
54M .

方法2:直接du -h 指定要查的目录,例如:du -h /var/log/
[root@test1 log]# du -h /var/log/
8.0K /var/log/ConsoleKit
4.0K /var/log/glusterfs
4.0K /var/log/httpd
36K /var/log/salt
8.0K /var/log/mail
17M /var/log/sa
27M /var/log/audit
54M /var/log/

案例4、查询某个目录或者当前目录,深度为2的所有文件及目录大小:
方法1:直接指定目录和深度。命令:du -ah --max-depth=2 /var/log/和du -ah /var/log/ --max-depth=2是一样的
[root@test1 log]# du -ah --max-depth=2 /var/log/
4.0K /var/log/maillog-20180417.gz
148K /var/log/anaconda.storage.log
0 /var/log/maillog
4.0K /var/log/boot.log
4.0K /var/log/maillog-20180428
4.0K /var/log/ConsoleKit/history
8.0K /var/log/ConsoleKit
124K /var/log/anaconda.syslog

注意:不能用du -sh /var/log/ --max-depth=2 ,因为s是默认深度1,和--max-depth=2冲突了
[root@test1 log]# du -sh /var/log/ --max-depth=2
du: 警告:显示总用量的选项和--max-depth=2 互斥
请尝试执行"du --help"来获取更多信息。

方法2:进入该目录,直接用命令查du -ah --max-depth=2和du -ah --max-depth=2 .是等效的
[root@test1 log]# cd /var/log
[root@test1 log]# du -ah --max-depth=2
4.0K ./maillog-20180417.gz
148K ./anaconda.storage.log
0 ./maillog
4.0K ./boot.log
4.0K ./maillog-20180428
4.0K ./ConsoleKit/history
8.0K ./ConsoleKit

案例5、查询某个目录或者当前目录,深度为2的所有目录大小:

方法1:直接查询:du -h --max-depth=2 /var/log/
[root@test1 log]# du -h --max-depth=2 /var/log/
8.0K /var/log/ConsoleKit
4.0K /var/log/glusterfs
4.0K /var/log/httpd
36K /var/log/salt
8.0K /var/log/mail
17M /var/log/sa
27M /var/log/audit
54M /var/log/

方法2:进入目录查询du -h --max-depth=2或者du -h --max-depth=2 .
[root@test1 log]# cd /var/log/
[root@test1 log]# du -h --max-depth=2
8.0K ./ConsoleKit
4.0K ./glusterfs
4.0K ./httpd
36K ./salt
8.0K ./mail
17M ./sa
27M ./audit
54M .

案例6、针对于查询到的目录下所有目录和文件,或者目录下所有目录大小排序:

查询到的大小排序总结:

大小排序案例1:因为只查询单个目录,无法排序

大小排序案例2:可以排序,排序方法如下:
[root@test1 log]# cd /var/log/
方法1:
[root@test1 log]# du -sh |sort -nr #等同于命令du -sh ./|sort -nr
148K anaconda.storage.log
128K dracut.log-20160101
128K cron
124K anaconda.syslog
120K cron-20180422
116K anaconda.xlog

[root@test1 log]# du -sh ./*|sort -nr|head
148K ./anaconda.storage.log
128K ./dracut.log-20160101
128K ./cron
124K ./anaconda.syslog
120K ./cron-20180422
116K ./anaconda.xlog
80K ./secure-20180422
80K ./dmesg.old
76K ./dmesg
40K ./rsyncd.log

[root@test1 log]# du -sh ./*|sort -nr|tail
0 ./syslog
0 ./spooler-20151004
0 ./spooler-20150927
0 ./spooler-20150920
0 ./spooler-20150914
0 ./spooler
0 ./openwebmail.log
0 ./maillog
0 ./dracut.log
0 ./btmp

方法2:
[root@test1 log]# du -sh /var/log/*|sort -nr
148K /var/log/anaconda.storage.log
128K /var/log/dracut.log-20160101
128K /var/log/cron
124K /var/log/anaconda.syslog
120K /var/log/cron-20180422
116K /var/log/anaconda.xlog

[root@test1 log]# du -sh /var/log/*|sort -nr|head
148K /var/log/anaconda.storage.log
128K /var/log/dracut.log-20160101
128K /var/log/cron
124K /var/log/anaconda.syslog
120K /var/log/cron-20180422
116K /var/log/anaconda.xlog
80K /var/log/secure-20180422
80K /var/log/dmesg.old
76K /var/log/dmesg
40K /var/log/rsyncd.log

[root@test1 log]# du -sh /var/log/*|sort -nr|tail
0 /var/log/syslog
0 /var/log/spooler-20151004
0 /var/log/spooler-20150927
0 /var/log/spooler-20150920
0 /var/log/spooler-20150914
0 /var/log/spooler
0 /var/log/openwebmail.log
0 /var/log/maillog
0 /var/log/dracut.log
0 /var/log/btmp

大小排序案例3:查询某个目录或者当前目录,所有目录大小排序;默认深度为1;和案例2一样,只是du命令不加s而已

大小排序案例4:查询某个目录或者当前目录,深度为2的所有文件及目录大小排序:
方法1:进入目录查:
[root@test1 log]# cd /var/log/
[root@test1 log]# du -ah --max-depth=2|sort -nr
324K ./sa/sa31
324K ./sa/sa30
324K ./sa/sa26
324K ./sa/sa25
324K ./sa/sa24
......省略......
[root@test1 log]# du -ah --max-depth=2|sort -nr|head
324K ./sa/sa31
324K ./sa/sa30
324K ./sa/sa26
324K ./sa/sa25
324K ./sa/sa24
......省略......
[root@test1 log]# du -ah --max-depth=2|sort -nr|tail
0 ./salt/minion
0 ./salt/master
0 ./openwebmail.log
0 ./maillog
0 ./httpd/ssl_request_log
......省略......

方法2:直接查
[root@test1 log]# du -ah --max-depth=2 /var/log|sort -nr
324K /var/log/sa/sa31
324K /var/log/sa/sa30
324K /var/log/sa/sa26
324K /var/log/sa/sa25
324K /var/log/sa/sa24
324K /var/log/sa/sa23
[root@test1 log]# du -ah --max-depth=2 /var/log|sort -nr|head
324K /var/log/sa/sa31
324K /var/log/sa/sa30
324K /var/log/sa/sa26
324K /var/log/sa/sa25
324K /var/log/sa/sa24
324K /var/log/sa/sa23
324K /var/log/sa/sa22
324K /var/log/sa/sa21
324K /var/log/sa/sa20
324K /var/log/sa/sa19
[root@test1 log]# du -ah --max-depth=2 /var/log|sort -nr|tail
0 /var/log/salt/minion
0 /var/log/salt/master
0 /var/log/openwebmail.log
0 /var/log/maillog
0 /var/log/httpd/ssl_request_log
0 /var/log/httpd/ssl_error_log
0 /var/log/httpd/ssl_access_log
0 /var/log/httpd/error_log
0 /var/log/dracut.log
0 /var/log/btmp

大小排序案例5、查询某个目录或者当前目录,深度为2的所有目录大小排序,和上面案例4差不多,只是du命令中不加a而已

以上是我总结了,有啥疑问大家留言一起讨论一下吧。

参考文档:

https://www.cnblogs.com/kobe8/p/3825461.html

转载于:https://blog.51cto.com/sandshell/2108974

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值