Featured image of post 在 Linux 使用 NCDU 取代 DU 來檢視資料夾大小

在 Linux 使用 NCDU 取代 DU 來檢視資料夾大小

ncdu 是一個基於 ncurses 的高效能磁碟使用情況分析工具,提供互動式介面來查看磁碟使用情況,並支援直接進行磁碟清理操作。

最後更新
約 2252 字

前言

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

1
sudo pacman -S ncdu

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 提供了更直觀的互動式介面,讓磁碟管理變得更加簡單高效。記住在使用刪除功能時要格外小心,建議先用唯讀模式檢查,確認無誤後再進行實際操作。


使用 Hugo 建立
主題 StackJimmy 設計