ncdu 入門 - 対話的にディスク使用量を調べて掃除する

ncdu 入門 - 対話的にディスク使用量を調べて掃除する

この記事で解決できること

  • ncdu を使って 容量の大きいディレクトリを対話的に辿る 方法が分かる
  • 大きいファイルを見つけて その場で安全に削除 できる
  • du を何度も叩く調査から キー操作だけの調査 に切り替えられる
  • ssh 越しに リモートサーバーの容量を調査 できる

対象読者:Linux 入門者、du で容量を探すのに疲れた方

導入:リナの「du 連打」事件

リナ: ライニー先輩、ディスクが満杯になったので du で大きいディレクトリを探してるんですけど...du を打って、深い階層に cd して、また du を打って...って繰り返してたら日が暮れそうです。
ライニー先輩: あー、その「du 連打」ね。みんな一度は通る道だよ。実はそれ、ncdu っていう専用ツールを使うと 矢印キーだけ で済むんだ。
リナ: 矢印キーだけ? cddu も打たなくていいんですか?
ライニー先輩: そう。ncdu は画面の中をファイルマネージャーみたいに歩き回れて、大きいディレクトリを辿って、その場で削除までできる。今日はこれを一緒に覚えよう。

結論を先に

  • ncdu = NCurses Disk Usagedu の結果を 対話的な画面 で見られるツール
  • 矢印キーで階層を移動、d でその場削除、s でサイズ順ソート
  • まず sudo apt install ncdu で入れて ncdu / で起動するだけ

1. ncdu とは何か?

結論: ncdudu の結果を全画面の対話画面で見られるツール。矢印キーで容量の大きい場所まで掘り下げられる。

リナ: そもそも ncdu って何の略なんですか?
ライニー先輩: 「NCurses Disk Usage」の略。NCurses は端末上で全画面 UI を作るライブラリで、それを使って du の結果を 画面表示 してくれるんだ。
リナ: du の進化版みたいな感じですか?
ライニー先輩: イメージはそれで合ってる。du は数字をズラっと出すだけだけど、ncdu大きい順に並べて、Enter で中に入れて、戻れる。迷子にならずに「容量を食ってる犯人」まで辿り着けるんだ。

du との違い(ざっくり)

  • du → 一回コマンドを打つと数字が出力される(その後は自分で cd して再実行)
  • ncdu → 一度スキャンすれば、あとは 画面の中を歩き回るだけ で深掘りできる

2. インストールと起動

結論: ncdu は標準では入っていないことが多い。apt / dnf でインストールし、ncdu パス で起動する。

リナ: 早速使いたいです! どうやって入れるんですか?
ライニー先輩: ディストリビューションごとにパッケージ名は ncdu で共通。まずはインストールから。

インストール

# Ubuntu / Debian 系
$ sudo apt install ncdu

# RHEL / Fedora 系
$ sudo dnf install ncdu

# 古い CentOS など
$ sudo yum install ncdu

起動してみる

# カレントディレクトリを調査
$ ncdu

# パスを指定して調査
$ ncdu /var

# ルート全体を調査(sudo 推奨)
$ sudo ncdu /
リナ: ncdu / を実行したら、なんか「Scanning...」って出て待たされました。
ライニー先輩: それでOK。ncdu は起動時に 指定パス以下を一度スキャン するんだ。du と同じで、対象が大きいと少し時間がかかる。スキャンが終わると一覧画面に切り替わるよ。

システム全体を調べるときは sudo

/ 配下には一般ユーザーが読めないディレクトリがある。sudo を付けないと「Permission denied」で一部が集計されず、数字が小さく出る。システム調査時は sudo ncdu / が基本。

結論: 上下矢印で項目を選び、Enter(右矢印)でディレクトリに入る。左矢印で親に戻る。q で終了。

ライニー先輩: スキャンが終わると、こんな感じの画面になる。サイズが 大きい順 に並んでるのがポイント。
--- /var ------------------------------------------------------
    1.2 GiB [##########] /log
  512.0 MiB [####      ] /cache
   24.0 MiB [          ] /lib
    4.0 KiB [          ] /games

画面の読み方

  • 左の数字:そのディレクトリ / ファイルの 使用量
  • [#### ]:親に対する 割合をバーで可視化
  • 名前の前の /:ディレクトリの印
  • 一番上の --- /var ---:いま見ている場所

基本のキー操作

移動系キー(まずこれだけ覚える)

キー 動作
/ 項目を選択(上下に移動)
Enter または 選択したディレクトリに 入る
親ディレクトリに 戻る
q ncdu終了
? ヘルプ(キー一覧)を表示
リナ: なるほど、ファイルの一覧をカーソルで選んで、Enter で中に入る...本当にファイルマネージャーみたいですね。
ライニー先輩: でしょ? cddu も打たずに、矢印キーだけで一番大きいディレクトリの奥まで潜れる。これが ncdu の気持ちよさだよ。

4. 並べ替えと表示の切り替え

結論: s でサイズ順、n で名前順、C でファイル数順。g で割合・グラフの表示を切り替えられる。

リナ: 並び順って変えられるんですか?
ライニー先輩: もちろん。デフォルトはサイズの大きい順だけど、用途に応じて切り替えられるよ。

ソート・表示系キー

キー 動作
s サイズ順 にソート(デフォルト)
n 名前順 にソート
C ファイル数順 にソート(大文字 C)
g 割合 / グラフバーの表示を切り替え
a 見かけのサイズ(apparent size)と実使用量を切替

a(apparent size)の使いどころ

ncdu はデフォルトで 実際にディスクを占有しているブロックサイズ を表示する。a を押すと、ファイルの「見かけ上のサイズ」表示に切り替わる。スパースファイルや小さいファイル大量のケースで両者がズレるので、違いを知っておくと混乱しない。

5. その場で削除する

結論: 削除したい項目を選んで d を押す。確認プロンプトが出るので、du で探して rm する往復が不要になる。

リナ: 大きいディレクトリは見つかったんですけど、消すときは一度 ncdu を抜けて rm するんですか?
ライニー先輩: いや、その必要はない。ncdu の中で削除したい項目を選んで d を押すだけ。確認が出てから消えるから、du で探して rm で消す往復がまるごと不要になるんだ。

削除の手順

  1. / で消したいファイル / ディレクトリを選択
  2. d を押す
  3. 確認プロンプトで y(はい)/ n(いいえ)を選ぶ

消す前のチェックリスト

  • そのファイルは本当に不要か(ログ / キャッシュ / 一時ファイルか)
  • 起動中のサービスが使っていないか(消しても容量が戻らない「削除済み開きファイル」問題は du と df の違い を参照)
  • 大きいログは消すより、サービスを止めずに中身だけ空にする方が安全なこともある

6. 実務で効くオプション

結論: -x でマウント境界を跨がない、-r で読み取り専用、-o / -f でスキャン結果の保存・再利用ができる。

ライニー先輩: 起動時のオプションをいくつか知っておくと、調査がもっと正確で安全になるよ。

よく使う起動オプション

オプション 意味
-x 同じファイルシステムだけ 集計(別マウントを跨がない)
-r 読み取り専用 モードで起動(d による削除を無効化)
-o ファイル スキャン結果をファイルに エクスポート
-f ファイル エクスポート結果を 読み込んで 表示
--exclude パターン 特定のパスを集計から除外
リナ: -x って du のときに出てきたやつですよね?
ライニー先輩: よく覚えてたね。du -x と同じで、/home が別パーティションのときなどに 跨いで二重に数えない ようにできる。df の数字と比べたいときに便利だよ。

安全重視なら -r

うっかり d を押す事故を防ぎたいときは sudo ncdu -r / で起動する。-r を付けると削除機能が無効になり、調査専用 で使える。本番サーバーで「見るだけ」のときに有効。

7. リモートサーバーの容量を調べる

結論: ssh でリモートのスキャン結果を手元に流し、ncdu -f- で読み込めば、相手にインストール不要で対話調査できる。

リナ: サーバーのディスクを調べたいんですけど、そのサーバーに ncdu が入ってないんです...
ライニー先輩: いい着眼点。ncdu には スキャン結果をエクスポート / インポート する仕組みがあるから、それを ssh と組み合わせると解決できる。

パターン A:リモートでスキャンして手元で見る

# リモートで du 相当のスキャンだけ実行し、結果を手元の ncdu に流し込む
$ ssh user@server ncdu -o- / | ncdu -f-

読み方

  • ncdu -o-:スキャン結果を 標準出力 に書き出す(- は標準出力の意味)
  • ncdu -f-標準入力 から結果を読み込んで表示する
  • 間の |:リモートの出力を手元の ncdu に渡すパイプ

これでリモート側に ncdu が入っていなくても... と言いたいところだが、-o 実行にはリモート側にも ncdu が必要。完全に未インストールなら次のパターン B を使う。

パターン B:結果をファイルに保存して持ち帰る

# サーバー側で結果を保存(圧縮すると軽い)
$ ncdu -o- / | gzip > scan.gz

# 手元に転送して読み込む
$ scp user@server:scan.gz .
$ zcat scan.gz | ncdu -f-
リナ: スキャン結果をファイルにできるなら、夜間バッチで定期的に保存しておけば、あとから「いつ太ったか」も追えますね。
ライニー先輩: その発想、いいね。エクスポートファイルは時系列で残しておくと、容量増加の調査にそのまま使えるよ。

8. ミニ課題:自分の環境で試してみよう

結論: ホーム配下の最大ディレクトリ特定・ソート切替・読み取り専用起動の3問で操作を定着させる。

ライニー先輩: 知識を定着させるために、自分の環境で次の課題をやってみよう。本番サーバーではなく、まず手元で。

課題 1ncdu ~ を実行し、ホームディレクトリ直下で 最も大きいディレクトリ を見つける

課題 2:一覧で sn を押して、サイズ順と名前順 が切り替わることを確認する

課題 3ncdu -r /tmp で起動し、d を押しても削除されない(読み取り専用)ことを確認する

課題 1 のヒント
ncdu ~

起動後、一番上にある項目(デフォルトでサイズ順なので最大)に注目。Enter で入って、さらに大きい中身を辿れる。

課題 2 のヒント

一覧画面で s(size)と n(name)を交互に押す。並び順がその場で変わる。もう一度同じキーを押すと昇順 / 降順が反転する。

課題 3 のヒント
ncdu -r /tmp

-r(read-only)付きで起動すると d キーが無効になり、削除確認すら出ない。調査専用で安全に使える証拠。

9. よくある落とし穴

結論: sudo 忘れで数字が小さく出る、d の押し間違いで誤削除、ホームではなく / を消そうとする事故に注意。

やりがちな失敗 3 つ

  1. sudo を付けずに / を調査 → 読めないディレクトリが除外され、数字が実際より小さく出る
  2. 大きいものを見つけて即 d → 削除済み開きファイルやサービス使用中だと逆効果。先に正体を確認する
  3. -r を付けずに本番で操作 → うっかり d で誤削除。見るだけなら必ず -r

安全な型

  • システム調査は sudo ncdu -x /(同一 FS のみ、跨がない)
  • 本番サーバーは原則 -r(読み取り専用)で起動
  • 消す前に名前・サイズ・更新日時を確認。迷ったら消さない

次に読む