巧用shell脚本统计磁盘使用情况
首先是传统的文件统计,通常使用-s选项,但是只能得到一个概要的信息,如果想定位哪些文件消耗的空间较大还是比较麻烦的。
[ora11g@rac1 new_test]$ du -s .
1296 .
[ora11g@rac1 new_test]$ du -sh .
1.3M .
[ora11g@rac1 new_test]$ du -s .
1296 .
这个时候,勉强可以使用-s ./*的形式得到所有的文件夹的大小情况。但是还是不够直观。
[ora11g@rac1 new_test]$ du -s ./*
80 ./append
32 ./append_fix
60 ./COL_LIST
24 ./compare
56 ./DESC_LIST
4 ./DUMP
80 ./DUMP_LIST
44 ./extract
48 ./full_append
92 ./init
48 ./loading
8 ./monitor
20 ./net_extract
108 ./parallel
88 ./parfile
248 ./partition_append
76 ./partition_extract
128 ./prepare
40 ./split_loading
8 ./tab_parall.lst
这个时候可以考虑使用-S选项,得到的列表会统计文件夹及其目录的大小。定位问题相对比较轻松。
[ora11g@rac1 new_test]$ du -S .
80 ./append
20 ./net_extract
80 ./DUMP_LIST
8 ./append_fix/ERRTAB_LIST
24 ./append_fix
48 ./loading
8 ./monitor
44 ./extract
248 ./partition_append
48 ./full_append
24 ./init/sqls/target
20 ./init/sqls/source
8 ./init/sqls
40 ./init
56 ./DESC_LIST
108 ./parallel
4 ./compare/logs
4 ./compare/sqls
16 ./compare
4 ./DUMP
28 ./prepare/post
28 ./prepare/pre
72 ./prepare
60 ./COL_LIST
76 ./partition_extract
88 ./parfile
4 ./split_loading/sqls
36 ./split_loading
12 .
但是如果文件目录下有很多的文件和文件夹,查出来的结果就会比较凌乱。我们可以得到最占用空间的10个目录,这样定位问题就比较有针对性。
下面的命令可以得到前10位的占用空间较大的目录。通过sed直接过滤了前10位之后的信息。
[ora11g@rac1 test]$ du -S .|sort -rn|sed ‘{11,$D;}‘
130668 .
552 ./ext_datapump/split_loading
500 ./parallel
460 ./ext_datapump_14_jul/DUMP
444 ./ext_datapump/split_loading/log_bak
324 ./ext_datapump/DUMP_LIST
316 ./ext_datapump/ext_datapump/DUMP_LIST
316 ./ext_datapump_14_jul/ext_datapump/DUMP_LIST
304 ./ext_datapump/DESC_LIST
300 ./ext_datapump/COL_LIST
这样看起来还可以,但是如果输出的结果中显示空间的占用情况排名就好了。比如
1 x xxx
2 xxxxxx
我们可以输出行号,然后换行
先输出行号
[ora11g@rac1 test]$ du -S .|sort -rn|sed ‘{11,$D;=}‘
1
130668 .
2
552 ./ext_datapump/split_loading
3
500 ./parallel
4
460 ./ext_datapump_14_jul/DUMP
5
444 ./ext_datapump/split_loading/log_bak
6
324 ./ext_datapump/DUMP_LIST
7
316 ./ext_datapump/ext_datapump/DUMP_LIST
8
316 ./ext_datapump_14_jul/ext_datapump/DUMP_LIST
9
304 ./ext_datapump/DESC_LIST
10
300 ./ext_datapump/COL_LIST
[ora11g@rac1 test]$
然后换行
[ora11g@rac1 test]$ du -S .|sort -rn|sed ‘{11,$D;=}‘|sed ‘N;s/\n/ /‘
1 130668 .
2 552 ./ext_datapump/split_loading
3 500 ./parallel
4 460 ./ext_datapump_14_jul/DUMP
5 444 ./ext_datapump/split_loading/log_bak
6 324 ./ext_datapump/DUMP_LIST
7 316 ./ext_datapump/ext_datapump/DUMP_LIST
8 316 ./ext_datapump_14_jul/ext_datapump/DUMP_LIST
9 304 ./ext_datapump/DESC_LIST
10 300 ./ext_datapump/COL_LIST
这个时候大部分工作都完成了,剩下的就是结果集的格式化了。可以简单格式化一下。
[ora11g@rac1 test]$ du -S .|sort -rn|sed ‘{11,$D;=}‘|sed ‘N;s/\n/ /‘|awk ‘{print $1 ":" "\t" $2 "\t" $3 "\n"}‘
1: 130668 .
2: 552 ./ext_datapump/split_loading
3: 500 ./parallel
4: 460 ./ext_datapump_14_jul/DUMP
5: 444 ./ext_datapump/split_loading/log_bak
6: 324 ./ext_datapump/DUMP_LIST
7: 316 ./ext_datapump/ext_datapump/DUMP_LIST
8: 316 ./ext_datapump_14_jul/ext_datapump/DUMP_LIST
9: 304 ./ext_datapump/DESC_LIST
10: 300 ./ext_datapump/COL_LIST
最后可以把错误日志做一个简单的处理。
[ora11g@rac1 test]$ du -S . 2>/dev/null|sort -rn|sed ‘{11,$D;=}‘|sed ‘N;s/\n/ /‘|awk ‘{print $1 ":" "\t" $2 "\t" $3 "\n"}‘
1: 130668 .
2: 552 ./ext_datapump/split_loading
3: 500 ./parallel
4: 460 ./ext_datapump_14_jul/DUMP
5: 444 ./ext_datapump/split_loading/log_bak
6: 324 ./ext_datapump/DUMP_LIST
7: 316 ./ext_datapump/ext_datapump/DUMP_LIST
8: 316 ./ext_datapump_14_jul/ext_datapump/DUMP_LIST
9: 304 ./ext_datapump/DESC_LIST
10: 300 ./ext_datapump/COL_LIST
在这个基础上可以发挥更多的功能,可以使用各种监控指标进行更进一步的扩展。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。