Linux

Linux 列出最大的前 10 個檔案、目錄指令教學與範例

介紹如何使用 dusorthead 指令找出指定目錄之下最大的 10 個目錄與檔案。

列出最大的目錄

如果想找出指定路徑之下,最大(也就是最占用磁碟空間)的前 10 個目錄,可以使用 dusorthead 指令的組合,例如列出 /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 個檔案,可以使用 finddusorthead 指令的組合:

# 列出 /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

參考資料:Linux HandbooknixCraftTecmint

Share
Published by
Office Guide

Recent Posts

Python 使用 PyAutoGUI 自動操作滑鼠與鍵盤

本篇介紹如何在 Python ...

9 個月 ago

Ubuntu Linux 以 WireGuard 架設 VPN 伺服器教學與範例

本篇介紹如何在 Ubuntu ...

9 個月 ago

Linux 網路設定 ip 指令用法教學與範例

本篇介紹如何在 Linux 系...

9 個月 ago

Windows 使用 TPM 虛擬智慧卡保護 SSH 金鑰教學與範例

本篇介紹如何在 Windows...

10 個月 ago

Linux 以 Shamir’s Secret Sharing 分割保存金鑰教學與範例

介紹如何在 Linux 中使用...

11 個月 ago

Linux 以 Cryptsetup、LUKS 加密 USB 隨身碟教學與範例

介紹如何在 Linux 系統中...

11 個月 ago