009 Linux 檔案大小統計與排序( du於df和sort)

不甩鍋的碼農發表於2022-01-30

file

01 du 與 df 作用與區別?

Linux 最有用最常用的統計檔案大小命令是什麼?無疑就是 du 和 df 了。

du(disk usage)

du 能看到的檔案只是一些當前存在的,沒有被刪除的。

df(disk free)

df 主要用於 Linux 系統上的檔案系統磁碟使用情況統計。
當我們刪除一個檔案的時候,這個檔案不是馬上就在檔案系統當中消失,而是暫時消失,當所有程式都不用時,才會根據 OS 的規則釋放掉已經刪除的檔案,df 記錄的是通過檔案系統獲取到的檔案的大小,它比 du 強的地方就是能夠看到已經刪除的檔案。
df 和 du 不一致情況就是是否可看到被刪除的檔案,這也是 df 統計可能比 du 統計大的原因。

02 du 常用命令示例

  • du -h # 顯示當前目錄下所有檔案及目錄(包含子目錄下內容)大小,-h 會換算成 K、M、G 等人類易讀結果;

  • du -b # 或-bytes 顯示目錄或檔案大小時,以byte為單位;

  • du -k # 或--kilobytes,以1024 bytes為單位;

  • du -m #或--megabytes 以1MB為單位

  • du -a #  顯示當前目錄下所有檔案所佔空間(含隱藏檔案,包含目錄,檔案,層級目錄下檔案);
    file

  • du -s # 顯示當前目錄總大小(不會列出層級子目錄);
    file

  • du -s * # 顯示當前目錄下每個資料夾和檔案的大小(最常用)
    file

  • du -s [資料夾1] [或檔案1] #  顯示指定目錄或檔案大小;
    file

  • du --max-depth=1 [目錄] # 只顯示指定目錄下第一層目錄(不單個含檔案)的大小;

  • du --max-depth=2 [目錄] # 只顯示指定目錄第一和二層目錄(不含單個檔案)的大小;
    file

03 sort 常用引數

(sort 作用是將檔案內容排序,以行為單位)

  • -n  # 依照數值的大小排序;
  • -r  # 以相反的順序來排序;
  • -o <輸出檔案>  # 將排序後的結果存入制定的檔案;
  • -b  # 忽略每行前面開始出的空格字元;
  • -c  # 檢查檔案是否已經按照順序排序;
  • -f  # 排序時,將小寫字母視為大寫字母;
  • -m  # 將幾個排序號的檔案進行合併;

?以下幾個引數與 -n 排序方式互斥:

  • -i  # 排序時,除了040至176之間的ASCII字元外,忽略其他的字元;
  • -d  # 排序時,處理英文字母、數字及空格字元外,忽略其他的字元;
  • -M  # 將前面3個字母依照月份的縮寫進行排序;

04 常用組合 du + sort + head

  • du -a /temp/logs  | sort -nr #  按照檔案從大到小排序(含隱藏檔案,包含目錄,檔案,層級目錄下檔案);
  • du -m --max-depth=1  /temp/logs  | sort -nr | head -n 10 # 指定目錄第一層,顯示前 Top10,-m: 統計單位為MB,為什麼不用-h?sort 大小排序只看數字,不看單位,可能會導致 2G 反而排序在 200M 之後;(只顯示指定目錄下第一層目錄(不單個含檔案)的大小;)
  • du -m --max-depth=1   /temp/logs  | sort -nr -o 'sort.txt' | head -n 10 # 使用sort -o 引數將排序結果存入指定檔案sort.txt 中。

05 如何刪除檔案,如大的日誌檔案?

通常使用 rm 命令刪除檔案以釋放空間。但是我們無法刪除檔案是非常常見的,因為應用程式此時正在使用該檔案,直接刪除它們會產生有害影響,例如掛起應用程式,應用程式崩潰等。

方案一:

空字串覆蓋檔案內容,是刪除檔案的一種優雅方式。

echo "" > info.log

方案二:

echo 不管用的特列情況,使用如下步驟。

  1. (1)du -sh * # 檢視檔案的使用情況;
  2. (2)du -h  --max-depth=1  [檔案目錄]| sort -nr # 查詢佔用磁碟的檔案目錄的大檔案,刪除日誌(優雅使用 echo "" > xx.log),發現磁碟使用率仍未下降;
  3. (3)lsof | grep delete # 發現有檔案控制程式碼並未釋放的大檔案,導致磁碟使用率未下降,檔案已經 deleted 了,但是程式還未結束,所以直接kill;
  4. (4)kill -9 [pid] # kill 這個程式(這個要根據線上實際情況來看是否可以被 kill,最好優雅關閉程式),最後檢視 df -h 恢復正常。

06 小結

du 常用的組合命令是與sort、head一起使用,排序找出最大的那批檔案。在遇到磁碟溢滿問題的時,可以與 find 命令合用找出最大的那一批檔案刪掉。與 sort 排序統計時使用具體的-m、-k引數,而不是用-h,否則會導致統計不準確。因為 sort -n 是根據數字大小,而不是單位進行統計。還有生產環境刪除大檔案的一些操作套路。

「不甩鍋的碼農」原創,轉載請註明來源,未經授權禁止商業用途!同名 GZH 請關注!

相關文章