1. 程式人生 > 其它 >巧用shell指令碼統計磁碟使用情況(r4筆記第12天)

巧用shell指令碼統計磁碟使用情況(r4筆記第12天)

在系統環境中存在大量的檔案時,統計磁碟空間的工作變得尤為重要。 首先是傳統的檔案統計,通常使用-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 在這個基礎上可以發揮更多的功能,可以使用各種監控指標進行更進一步的擴充套件。