介紹如何使用 du
、sort
與 head
指令找出指定目錄之下最大的 10 個目錄與檔案。
列出最大的目錄
如果想找出指定路徑之下,最大(也就是最占用磁碟空間)的前 10 個目錄,可以使用 du
、sort
與 head
指令的組合,例如列出 /var
之下最大的前 10 個目錄:
# 列出 /var 之下最大的前 10 個目錄 du -h /var | sort -hr | head -n 10
1.7G /var 1.1G /var/log/journal/b8484d93cddf4bff9e38ce21e93587ea 1.1G /var/log/journal 1.1G /var/log 434M /var/lib 172M /var/lib/dpkg 155M /var/lib/apt/lists 155M /var/lib/apt 107M /var/lib/dpkg/info 95M /var/cache
這裡 du
加上 -h
參數會讓它輸出易讀的格式(轉換為 K、M、G 等單位),接著 sort
也配合使用 -hr
依照大小反向排序,最後使用 head
篩選出前 10 筆資料,這樣就可以得到最大的前 10 的目錄與其大小。
如果只想要查看指定路徑之下,第一層目錄中最大的前 10 個目錄,可以在 du
參數中加上 -s
參數,並指定要納入考慮的目錄即可,另外亦可加上 -x
將不同檔案系統的檔案排除:
# 列出 /var 之下第一層最大的前 10 個目錄 du -sxh /var/* | sort -hr | head -n 10
1.1G /var/log 434M /var/lib 95M /var/cache 6.7M /var/backups 64K /var/spool 56K /var/tmp 12K /var/www 4.0K /var/snap 4.0K /var/opt 4.0K /var/metrics
du
預設在計算目錄內的檔案大小時,會自動扣除重複的硬連結(hard link),因此若有一個檔案在多個目錄中都有硬連結,只有其中一個目錄會將其納入計算,其餘的目錄都會自動排除。
如果希望每個目錄都可以將硬連結的檔案都重複納入計算,可以將每個目錄分開以 du
計算:
# 列出 /var 之下第一層最大的前 10 個目錄(重複計算硬連結) ls -d /var/* | xargs du -shx | sort -hr | head -n 10
列出最大的檔案
如果只是想知道某個目錄中(不包含子目錄)最大的前 10 個檔案,只要使用簡單的 ls
指令即可:
# 列出 /var/log 之下最大的前 10 個檔案(不含子目錄) ls -lSh /var/log | head -n 11
total 14M -rw-rw---- 1 root utmp 6.2M Sep 30 23:35 btmp.1 -rw-r----- 1 syslog adm 3.0M Sep 28 00:05 auth.log.1 -rw-r--r-- 1 syslog adm 1.9M Aug 19 16:09 cloud-init.log -rw-r----- 1 syslog adm 1.5M Oct 1 10:56 auth.log -rw-rw-r-- 1 root utmp 286K Oct 1 10:53 lastlog -rw-r----- 1 syslog adm 281K Sep 7 00:09 auth.log.4.gz -rw-r----- 1 syslog adm 237K Sep 20 00:05 auth.log.2.gz -rw-r----- 1 syslog adm 171K Sep 13 00:05 auth.log.3.gz -rw-r--r-- 1 root root 144K Sep 29 19:14 dpkg.log.1 -rw-r--r-- 1 root root 76K Aug 19 16:09 cloud-init-output.log
若要找出特定路徑之下(包含子目錄),最大的前 10 個檔案,可以使用 find
、du
、sort
與 head
指令的組合:
# 列出 /var 之下最大的前 10 個檔案(包含子目錄) find /var -type f -exec du -Sh {} + | sort -hr | head -n 10
105M /var/log/journal/b8484d93cddf4bff9e38ce21e93587ea/system@4a4b99e081654847a2294570c0e2a232-000000000003e6c6-0005a351e9171c32.journal 105M /var/log/journal/b8484d93cddf4bff9e38ce21e93587ea/system@4a4b99e081654847a2294570c0e2a232-0000000000028183-0005a345d8c0f362.journal 105M /var/log/journal/b8484d93cddf4bff9e38ce21e93587ea/system@4a4b99e081654847a2294570c0e2a232-0000000000011616-0005a33eccda8544.journal 81M /var/log/journal/b8484d93cddf4bff9e38ce21e93587ea/system@a4be6ac5e1df4944a47698e6a6603a05-000000000008e84d-0005a953f0c3c266.journal 73M /var/log/journal/b8484d93cddf4bff9e38ce21e93587ea/system@a4be6ac5e1df4944a47698e6a6603a05-00000000000c47e3-0005aee7399d5a4c.journal 73M /var/log/journal/b8484d93cddf4bff9e38ce21e93587ea/system@a4be6ac5e1df4944a47698e6a6603a05-00000000000b31e8-0005ad38cd3e9d9e.journal 73M /var/log/journal/b8484d93cddf4bff9e38ce21e93587ea/system@a4be6ac5e1df4944a47698e6a6603a05-00000000000a1448-0005ab358b186744.journal 73M /var/log/journal/b8484d93cddf4bff9e38ce21e93587ea/system@a4be6ac5e1df4944a47698e6a6603a05-000000000007c451-0005a7cea1910479.journal 73M /var/log/journal/b8484d93cddf4bff9e38ce21e93587ea/system@a4be6ac5e1df4944a47698e6a6603a05-000000000006bfe5-0005a61e0b6cc89f.journal 73M /var/log/journal/b8484d93cddf4bff9e38ce21e93587ea/system@4a4b99e081654847a2294570c0e2a232-000000000000159d-0005a19556c6ec90.journal
或是直接使用 find
的 -printf
輸出檔案大小:
# 列出 /var 之下最大的前 10 個檔案(包含子目錄) find /var -type f -printf "%s %p\n" | sort -hr | head -n 10
109051904 /var/log/journal/b8484d93cddf4bff9e38ce21e93587ea/system@4a4b99e081654847a2294570c0e2a232-000000000003e6c6-0005a351e9171c32.journal 109051904 /var/log/journal/b8484d93cddf4bff9e38ce21e93587ea/system@4a4b99e081654847a2294570c0e2a232-0000000000028183-0005a345d8c0f362.journal 109051904 /var/log/journal/b8484d93cddf4bff9e38ce21e93587ea/system@4a4b99e081654847a2294570c0e2a232-0000000000011616-0005a33eccda8544.journal 83886080 /var/log/journal/b8484d93cddf4bff9e38ce21e93587ea/system@a4be6ac5e1df4944a47698e6a6603a05-000000000008e84d-0005a953f0c3c266.journal 75497472 /var/log/journal/b8484d93cddf4bff9e38ce21e93587ea/system@a4be6ac5e1df4944a47698e6a6603a05-00000000000c47e3-0005aee7399d5a4c.journal 75497472 /var/log/journal/b8484d93cddf4bff9e38ce21e93587ea/system@a4be6ac5e1df4944a47698e6a6603a05-00000000000b31e8-0005ad38cd3e9d9e.journal 75497472 /var/log/journal/b8484d93cddf4bff9e38ce21e93587ea/system@a4be6ac5e1df4944a47698e6a6603a05-00000000000a1448-0005ab358b186744.journal 75497472 /var/log/journal/b8484d93cddf4bff9e38ce21e93587ea/system@a4be6ac5e1df4944a47698e6a6603a05-000000000007c451-0005a7cea1910479.journal 75497472 /var/log/journal/b8484d93cddf4bff9e38ce21e93587ea/system@a4be6ac5e1df4944a47698e6a6603a05-000000000006bfe5-0005a61e0b6cc89f.journal 75497472 /var/log/journal/b8484d93cddf4bff9e38ce21e93587ea/system@4a4b99e081654847a2294570c0e2a232-000000000000159d-0005a19556c6ec90.journal