前言
ncdu
(NCurses Disk Usage)是一個基於 ncurses 的高效能磁碟使用情況分析工具,提供互動式介面來查看磁碟使用情況,並支援直接進行磁碟清理操作。
相比傳統的 du
命令,ncdu
具有以下優勢:
- 互動式介面:提供直觀的圖形化操作介面
- 高效能:掃描速度比
du
快很多 - 即時操作:可以直接在介面中刪除檔案和目錄
- 多種排序方式:支援按大小、名稱、修改時間等排序
- 詳細資訊:顯示百分比、圖表等視覺化資訊
特別適合在 VPS 空間不足時,快速找出佔用大量空間的目錄並進行清理。
安裝
Debian / Ubuntu
1
2
3
4
5
6
| # 使用 apt 安裝
sudo apt update
sudo apt install ncdu
# 或使用 snap 安裝
sudo snap install ncdu
|
CentOS / RHEL / Fedora
1
2
3
4
5
| # CentOS/RHEL 7/8
sudo yum install ncdu
# CentOS/RHEL 9 / Fedora
sudo dnf install ncdu
|
Arch Linux
macOS
1
2
3
4
5
| # 使用 Homebrew
brew install ncdu
# 使用 MacPorts
sudo port install ncdu
|
編譯安裝
如果需要最新版本,可以從源碼編譯:
1
2
3
4
5
6
7
8
9
| # 下載源碼
wget https://dev.yorhel.nl/download/ncdu-2.2.1.tar.gz
tar -xzf ncdu-2.2.1.tar.gz
cd ncdu-2.2.1
# 編譯安裝
./configure
make
sudo make install
|
設定別名(可選)
如果您想用 ncdu
取代 du
命令:
1
2
3
4
5
6
| # 臨時設定
alias du='ncdu'
# 永久設定(加入 ~/.bashrc 或 ~/.zshrc)
echo "alias du='ncdu'" >> ~/.bashrc
source ~/.bashrc
|
基本使用方法
掃描根目錄
掃描整個根目錄的硬碟使用情況,掃描完成後按目錄大小降序顯示:
1
2
3
4
5
| # 掃描根目錄(推薦使用 -x 參數避免跨檔案系統)
ncdu -x /
# 掃描根目錄並排除特定目錄
ncdu -x / --exclude /proc --exclude /sys --exclude /dev
|
掃描指定目錄
1
2
3
4
5
6
7
| # 掃描當前目錄
ncdu
# 掃描指定目錄
ncdu /var
ncdu /home/user
ncdu /var/log
|
常用參數組合
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| # 掃描並排除快取目錄
ncdu --exclude-caches /
# 掃描並排除核心檔案系統
ncdu --exclude-kernfs /
# 安靜模式(適合腳本使用)
ncdu -q /var
# 唯讀模式(防止意外刪除)
ncdu -r /var
# 使用 SI 單位(1000 進制而非 1024)
ncdu --si /var
|
實際使用場景
場景一:VPS 空間不足
當 VPS 磁碟空間不足時,快速找出佔用空間最大的目錄:
1
2
3
4
5
| # 掃描根目錄,排除系統目錄
ncdu -x / --exclude /proc --exclude /sys --exclude /dev --exclude /run
# 掃描用戶目錄
ncdu /home
|
場景二:清理日誌檔案
檢查和清理系統日誌:
1
2
3
4
| # 掃描日誌目錄
ncdu /var/log
# 在介面中按 'd' 刪除不需要的日誌檔案
|
場景三:分析網站目錄
檢查網站檔案大小分佈:
1
2
3
4
5
| # 掃描網站根目錄
ncdu /var/www
# 掃描並排除快取目錄
ncdu /var/www --exclude-caches
|
場景四:備份前檢查
備份前檢查目錄大小:
1
2
3
| # 掃描要備份的目錄
ncdu /home/user/Documents
ncdu /home/user/Pictures
|
進階功能
匯出和匯入掃描結果
1
2
3
4
5
6
7
8
9
| # 匯出掃描結果到檔案
ncdu -o scan_results.txt /var
# 從檔案匯入掃描結果(不需要重新掃描)
ncdu -f scan_results.txt
# 結合使用:先掃描匯出,再匯入查看
ncdu -o /tmp/var_scan.txt /var
ncdu -f /tmp/var_scan.txt
|
排除特定檔案和目錄
1
2
3
4
5
6
7
8
9
10
| # 排除特定檔案類型
ncdu --exclude '*.log' /var
ncdu --exclude '*.tmp' /tmp
# 排除多個模式
ncdu --exclude '*.log' --exclude '*.tmp' --exclude 'cache' /var
# 從檔案讀取排除模式
echo -e "*.log\n*.tmp\ncache" > exclude_patterns.txt
ncdu --exclude-from exclude_patterns.txt /var
|
跟隨符號連結
1
2
| # 跟隨符號連結(小心使用,可能造成無限迴圈)
ncdu -L /var
|
完整參數說明
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
| ncdu [選項] [目錄]
基本選項:
-h, --help 顯示幫助訊息
-v, -V, --version 顯示版本資訊
-q 安靜模式,每兩秒刷新一次
-r 唯讀模式,禁止刪除操作
-x 限制在同一檔案系統內
-e 啟用擴展資訊(修改時間等)
輸出選項:
-o FILE 將掃描結果匯出到檔案
-f FILE 從檔案匯入掃描結果
-0, -1, -2 掃描時使用的 UI(0=無,2=完整 ncurses)
過濾選項:
--exclude PATTERN 排除匹配模式的檔案
-X, --exclude-from FILE 從檔案讀取排除模式
-L, --follow-symlinks 跟隨符號連結
--exclude-caches 排除包含 CACHEDIR.TAG 的目錄
--exclude-kernfs 排除 Linux 偽檔案系統
顯示選項:
--si 使用 SI 單位(1000 進制)
--color SCHEME 設定顏色方案(off/dark/dark-bg)
--confirm-quit 退出時確認
|
互動式操作
基本導航
按鍵 | 功能 |
---|
↑ , k | 向上移動游標 |
↓ , j | 向下移動游標 |
→ , Enter | 進入選定的目錄 |
← , < , h | 返回上層目錄 |
q | 退出程式 |
排序功能
按鍵 | 功能 |
---|
n | 按名稱排序(升序/降序切換) |
s | 按大小排序(升序/降序切換) |
C | 按項目數量排序(升序/降序切換) |
M | 按修改時間排序(需要 -e 選項) |
t | 切換目錄是否排在檔案前面 |
顯示選項
按鍵 | 功能 |
---|
g | 切換顯示百分比和圖表 |
a | 切換顯示實際大小與磁碟使用量 |
c | 切換顯示子項目數量 |
m | 切換顯示修改時間(需要 -e 選項) |
e | 顯示/隱藏隱藏或排除的檔案 |
檔案操作
按鍵 | 功能 |
---|
d | 刪除選定的檔案或目錄 |
i | 顯示選定項目的詳細資訊 |
r | 重新計算當前目錄 |
b | 在當前目錄開啟 shell |
實用技巧
1. 快速清理大檔案
1
2
3
4
5
6
7
| # 掃描並找出大檔案
ncdu -e /var
# 在介面中:
# 1. 按 's' 按大小排序
# 2. 按 'M' 按修改時間排序(找出舊檔案)
# 3. 按 'd' 刪除不需要的檔案
|
2. 定期監控磁碟使用
1
2
3
4
| # 建立定期掃描腳本
#!/bin/bash
DATE=$(date +%Y%m%d_%H%M%S)
ncdu -o "/tmp/disk_usage_${DATE}.txt" /
|
3. 比較不同時期的使用情況
1
2
3
4
5
6
7
| # 第一次掃描
ncdu -o /tmp/scan1.txt /var
# 一段時間後再次掃描
ncdu -o /tmp/scan2.txt /var
# 比較結果(需要手動比較檔案內容)
|
4. 安全刪除操作
1
2
3
4
5
| # 使用唯讀模式先檢查
ncdu -r /var
# 確認無誤後再進行實際操作
ncdu /var
|
與其他工具比較
工具 | 優點 | 缺點 | 適用場景 |
---|
ncdu | 互動式、快速、可刪除 | 需要終端支援 | 日常磁碟管理 |
du | 簡單、腳本友好 | 非互動式、功能有限 | 腳本和自動化 |
tree | 顯示目錄結構 | 不顯示大小 | 查看目錄結構 |
df | 顯示檔案系統使用 | 只顯示掛載點 | 檢查磁碟空間 |
常見問題
Q: ncdu 掃描很慢怎麼辦?
A: 可以嘗試以下方法:
- 使用
-x
參數限制在同一檔案系統 - 排除不必要的目錄:
--exclude /proc --exclude /sys
- 使用
--exclude-kernfs
排除核心檔案系統
Q: 如何恢復誤刪的檔案?
A: ncdu 的刪除是永久性的,建議:
- 使用
-r
唯讀模式先檢查 - 重要檔案先備份再刪除
- 使用
b
鍵開啟 shell 進行更安全的操作
Q: 可以同時掃描多個目錄嗎?
A: ncdu 一次只能掃描一個目錄,但可以:
- 分別掃描後比較結果
- 使用腳本批量掃描並匯出結果
- 掃描父目錄然後導航到子目錄
總結
ncdu
是一個功能強大的磁碟使用分析工具,特別適合:
- 系統管理員:快速找出佔用空間的檔案和目錄
- 開發者:清理開發環境中的臨時檔案
- VPS 用戶:在空間不足時進行清理
- 一般用戶:管理個人檔案和目錄
相比傳統的 du
命令,ncdu
提供了更直觀的互動式介面,讓磁碟管理變得更加簡單高效。記住在使用刪除功能時要格外小心,建議先用唯讀模式檢查,確認無誤後再進行實際操作。