磁碟空間不足是伺服器常見隱患。本文實戰演示 df (檔案系統層級) 與 du (目錄/檔案層級) 兩大核心指令的常用參數組合,教你從「分區剩餘多少」精準鑽取到「哪個子目錄佔用最大」,並提供排序、深度限制、單一目錄統計等高頻技巧。

df -h # 人類可讀單位 (K/M/G)
df -hT # 額外顯示檔案系統類型 (ext4, xfs, nfs...)
df -i # 查看 inode 使用量 (大量小檔案場景關鍵)
| 指令 | 用途 | 說明 |
|---|---|---|
du -sh 目錄 | 顯示目錄總大小 | -s 汇總、-h 人類可讀 |
du -h --max-depth=1 目錄 | 顯示第一層子目錄大小 | 不遞歸孫子目錄,快速定位大戶 |
du -h --max-depth=0 目錄 | 等同 du -sh | --max-depth=0 即只統計該目錄本身 |
du -sh /path/to/dir | 指定絕對路徑統計 | 不受當前工作目錄影響 |
du -sk * | sort -rn | 按 KB 排序顯示所有子項 | 適合腳本處理,數值穩定 |
du -h --max-depth=1 /home | sort -hr
# 或
du -sk /home/* | sort -rn | head -10
| 比較項 | df | du |
|---|---|---|
| 統計層級 | 檔案系統/分區 | 目錄/檔案 |
| 更新即時性 | 即時 (核心層面) | 掃描目錄樹,大目錄較慢 |
| 已刪除但被進程持有的檔案 | 計入已用空間 | 不計入 (目錄項已消失) |
| 適用場景 | 整體容量規劃、監控告警 | 定位大目錄、清理規劃 |
經典現象:df 顯示分區滿,但 du 統計總和遠小於已用空間 → 通常是大檔案被刪除但進程仍持有開啟 (如日誌檔)。解決:lsof | grep deleted 找到進程並重啟或 truncate 釋放。
df -h -x tmpfs -x devtmpfsfind /path -type f -exec du -ch {} + | grep totalncdu (互動式)、baobab (GNOME 磁碟使用分析器)善用 df 做全局巡檢,du 做精準定位,配合 sort、head、ncdu,磁碟空間管理將輕鬆可控。