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


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 請關注!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM