df(disk free)是查看文件系統空間使用情況的標準命令。本文詳細說明各參數含義、輸出欄位解讀、常用組合與實戰場景。
df [選項] [文件/目錄/設備...]
| 參數 | 說明 |
|---|---|
-a, --all | 包含 0 塊的虛擬文件系統(/proc、/sys、/dev/pts 等) |
-h, --human-readable | 人類可讀單位(K、M、G、T),基數 1024 |
-H, --si | SI 單位(基數 1000),廠商標稱容量對齊 |
-k | 以 1K 塊顯示(默認) |
-m | 以 1M 塊顯示 |
-i, --inodes | 顯示 inode 使用量而非空間 |
-T, --print-type | 顯示文件系統類型(ext4、xfs、nfs 等) |
-t TYPE | 僅顯示指定類型 |
-x TYPE | 排除指定類型 |
-l, --local | 僅本地文件系統(排除 NFS/CIFS 等網路掛載) |
-P, --portability | POSIX 輸出格式(不換行),腳本解析友好 |
--output=FIELD_LIST | 自定義輸出欄位(source、fstype、size、used、avail、pcent、target 等) |
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 3020140 2333952 532772 82% /
none 213320 0 213320 0% /dev/shm
注意:Used + Available ≠ 1K-blocks,差值為 root 預留空間(tune2fs -m 5 調整)。
| 場景 | 命令 |
|---|---|
| 快速概覽所有掛載點 | df -hT |
| 僅看本地 ext4/xfs 分區 | df -hT -t ext4 -t xfs |
| 排除虛擬文件系統 | df -h -x tmpfs -x devtmpfs -x squashfs |
| 檢查 inode 耗盡風險 | df -hi |
| 腳本解析(固定欄位) | df -P /data | tail -1 | awk '{print $5}' |
| 自定義輸出 JSON 友好格式 | df --output=source,fstype,size,used,avail,pcent,target -P |
#!/bin/bash
THRESHOLD=80
df -hP -x tmpfs -x devtmpfs | tail -n +2 | while read line; do
usage=$(echo $line | awk '{print $5}' | sed 's/%//')
mount=$(echo $line | awk '{print $6}')
if [ "$usage" -ge "$THRESHOLD" ]; then
echo "ALERT: $mount at ${usage}%" | mail -s "Disk Alert" admin@example.com
fi
done
df:文件系統級,統計超級塊,含已刪除未釋放文件空間du:目錄級,遍歷 inode 累加,不含已刪除未釋放空間lsof | grep deleted 找出持有刪除文件的進程,重啟服務釋放