du 指令:目錄/檔案磁碟佔用分析
常用參數速查
| 參數 | 說明 |
-h, --human-readable | 以 K/M/G 人類可讀單位顯示 (推薦) |
-s, --summarize | 僅顯示總計,不列出子目錄 |
-a, --all | 包含檔案與目錄 |
--max-depth=N | 只深入 N 層目錄 (0=只顯示該目錄總計) |
-c, --total | 顯示總計 |
--exclude=PATTERN | 排除符合樣式的檔案/目錄 |
-k | 以 1024 bytes 為單位 |
-m | 以 1MB 為單位 |
實戰範例
# 1. 查看當前目錄各子目錄大小 (人類可讀)
du -h --max-depth=1
# 2. 只看某目錄總大小
du -sh /var/log
# 3. 列出含檔案的完整大小清單
du -ah /home/user
# 4. 找出最大的 10 個目錄/檔案
du -h --max-depth=1 | sort -hr | head -10
# 5. 排除特定目錄
du -h --exclude='*.git' --exclude='node_modules'
# 6. 不換行輸出 (配合其他工具)
du -0h /var/log
ls 指令:檔案屬性與大小檢視
關鍵參數
-l:長格式 (權限、擁有者、大小、時間)
-h:搭配 -l 以 K/M/G 顯示大小
-S:依檔案大小排序
-t:依修改時間排序
-a:顯示隱藏檔
-d:目錄本身而非內容
--color=auto:彩色輸出
實用組合
# 長格式 + 人類可讀 + 依大小排序
ls -lhS
# 只列目錄
ls -d */ # 或 ls -F | grep '/$'
# 計算檔案/目錄數量
ls -l | grep '^-' | wc -l # 檔案數
ls -l | grep '^d' | wc -l # 目錄數
# 完整時間格式
ls -tl --time-style=full-iso
du vs df 差異解析
| 指令 | 統計對象 | 特性 |
du | 檔案系統層面 (inode 遍歷) | 不含中繼資料,刪除開啟中檔案即釋放 |
df | 區塊層面 (超級區塊/位圖) | 含中繼資料,開啟中檔案被刪除不釋放,需殺進程 |
典型情境:/var/spool/clientmqueue 滿載,刪信後 df 未釋放,需 fuser -u /var/spool/clientmqueue 找出並殺掉佔用進程。
快速記憶口訣
du -sh * | sort -h # 當前目錄各項大小排序
df -h # 磁碟分區剩餘空間總覽