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

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

この記事でできるようになること

  • `ncdu` を起動し、矢印キーだけで容量の大きいディレクトリまで辿れる
  • `s` `n` `C` のソート切り替えと `d` の削除手順を説明できる
  • `-r`(読み取り専用)と `-x`(同一ファイルシステムのみ)を使い分けられる

前提知識(先に読むと理解しやすい記事)

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

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

言葉の整理

  • 対話的:コマンドを打ち直さず、画面を見ながらキー操作で進める方式です。「インタラクティブ」も同じ意味です。
  • ディレクトリ:Windows や Mac でいうフォルダのことです。
  • スキャン:対象のファイルを 1 つずつ調べて回ることです。「走査」とも言います。
  • ファイルシステム:ディスクを区切って使うための仕組みです。この記事では「//home のように独立して容量を数える単位」と考えてください。
  • マウント:ディスクをディレクトリに結びつけて使える状態にすることです。
  • 標準出力 / 標準入力:コマンドが結果を書き出す先と、コマンドが入力を受け取る口のことです。第 7 章で使います。

ncdu は調べるだけの使い方もできます。-r を付けて起動すれば、削除機能そのものが無効になります。最初は必ず -r を付けて練習してください。

なお ncdu は本サイトの仮想ターミナル入力したコマンドを解釈してコンピュータに実行させる対話プログラム。には入っていません。実機の Linux か WSL で試してください。だからこそ、練習は -r から始めてください。

導入:リナの「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 は、端末の上で全画面の画面を作るライブラリだね。ライブラリは、部品として使えるプログラムの集まりのことだよ。
ライニー先輩: そのライブラリを使って、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...」と出て、しばらく待たされました。
ライニー先輩: それで問題ないよ。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 または 選択したディレクトリに 入る
親ディレクトリに 戻る
r いま見ている場所を 測り直す
q ncdu終了
? ヘルプ(キー一覧)を表示

画面内のキー r と、起動オプションの -r は別物です。キーの r は測り直しです。オプションの -r は削除機能を無効にします。

リナ: なるほど。一覧をカーソルで選んで、Enter で中に入るんですね。本当にファイルマネージャーのようです。
ライニー先輩: そうだね。cddu も打たずに、矢印キーだけで奥まで潜れる。これが ncdu の便利なところだよ。

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

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

リナ: 並び順は変えられるんですか?
ライニー先輩: 変えられるよ。既定はサイズの大きい順だね。目的に応じて切り替えられるよ。

ソート・表示系キー

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

a(apparent size)の使いどころ

ncdu は既定で 実際にディスクを占有しているサイズ を表示します。a を押すと「見かけ上のサイズ」の表示に切り替わります。

この 2 つは、中身がすかすかのファイルや、小さいファイルが大量にある場合にずれます。違いを知っておくと混乱しません。

5. その場で削除する

結論: 削除したい項目を選んで d を押す。確認プロンプトコマンドの入力を待っている状態を示す記号(例 $ や #)。が出るので、du で探して rm する往復が不要になる。

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

削除の手順

  1. / で消したいファイル / ディレクトリを選択します
  2. d を押します
  3. 確認画面が出ます。選択肢は yes / no / don't ask me again の 3 つです
  4. / で選択肢を動かし、Enter で決定します。q を押せば中止できます

消す前のチェックリスト

  • そのファイルは本当に不要ですか(ログ / キャッシュ / 一時ファイルですか)
  • 起動中のサービスが使っていませんか
  • 大きいログは、消すより中身だけを空にする方が安全なこともあります(truncate -s 0 ファイル名

2 つ目について補足します。サービスが開いたままのファイルを消すと、容量が戻りません。この「削除済み開きファイル」の問題は du と df の違い を参照してください。

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

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

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

よく使う起動オプション

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

6-1. リナの失敗:d を押すつもりが違う行を消しかけた

リナ: /var を調べていて、大きいキャッシュを消そうとしました。d を押したら、確認画面に出てきた名前が思っていたものと違っていて、ひやりとしました。
--- /var ------------------------------------------------------
    1.2 GiB [##########] /log
  512.0 MiB [####      ] /cache
   24.0 MiB [          ] /lib
リナ: 消したかったのは /cache です。でも確認画面には /log と出ました。カーソルが 1 行上にあったんですね。
ライニー先輩: 気づけてよかった。ncdud は、いま選ばれている行に対して働くんだ。画面のどこを選んでいるかが、すべてを決めるよ。
リナ: 一覧は大きい順なので、上の行ほど中身が多いということですね。それを消しかけたと思うと、こわいです。
ライニー先輩: だから最初は -r を付けて起動するといい。d そのものが効かないから、練習にちょうどいいんだ。
リナ: 納得しました。確認画面の名前を声に出して読んでから Enter を押します。
# 削除できない状態で練習する
$ ncdu -r ~

安全重視なら -r

うっかり d を押す事故を防ぎたいときは sudo ncdu -r / で起動します。-r を付けると削除機能が無効になります。

つまり 調査専用 で使えます。本番サーバーで「見るだけ」のときに有効です。

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

結論: リモートで取ったスキャン結果を手元の ncdu で開けば、サーバー上で対話操作せずに調査できる(リモート側にも ncdu が必要)。

リナ: サーバーのディスクを調べたいです。でも、そのサーバーの画面で操作するのは大変です。
ライニー先輩: いい着眼点だね。ncdu には スキャン結果を書き出したり読み込んだりする 仕組みがあるんだ。
ライニー先輩: それを ssh と組み合わせると、手元の画面で調べられるようになるよ。

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

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

読み方

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

注意点が 1 つあります。-o を実行するには、リモート側にも ncdu が必要です。リモートに入っていない場合は、先にリモート側へインストールしてください。

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

その場で流し込むのではなく、いったんファイルに保存する方法です。結果を残しておけば、あとから見返せます。

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

# 手元に転送して読み込む
$ scp user@server:scan.gz .
$ zcat scan.gz | ncdu -f-
リナ: スキャン結果をファイルにできるんですね。定期的に保存しておけば、あとから「いつ増えたか」も追えます。
ライニー先輩: その発想はいいね。書き出したファイルを日付順に残しておこう。容量が増えた原因の調査に、そのまま使えるよ。

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

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

リナ: 知識は入りました。手を動かして試したいです。
ライニー先輩: いいね、3 問用意したよ。本番サーバーではなく、まず手元で試そう。どれも -r を付ければ削除は起こらないよ。

課題 1: ホームディレクトリの直下で、最も大きいディレクトリを見つけよう。

ヒント 1(方向づけ)を見る

調べたい場所を指定して起動します。一覧は既定でサイズの大きい順に並びます。

だから、一番上の行に注目すれば分かります。

ヒント 2(コマンド名)を見る

使うのは ncdu です。ホームディレクトリは ~ と書けます。安全のため -r を付けます。

中に入るのは Enter、戻るのは左矢印、終了は q です。

答えを見る
$ ncdu -r ~
--- /home/user -------------------------------------------------
    2.5 GiB [##########] /Videos
  512.0 MiB [##        ] /Downloads
   64.0 MiB [          ] /Documents

一番上の行が最も大きいディレクトリです。この例では /Videos です。

Enter で中に入れば、さらに大きい中身を辿れます。左矢印で 1 つ上に戻れます。

課題 2: 一覧の並び順を、サイズ順と名前順で切り替えてみよう。

ヒント 1(方向づけ)を見る

キーを 1 つ押すだけで切り替わります。コマンドを打ち直す必要はありません。

それぞれ、英語の頭文字がキーになっています。

ヒント 2(コマンド名)を見る

サイズ順は s(size)です。名前順は n(name)です。一覧画面で交互に押してみます。

答えを見る

一覧画面で sn を交互に押します。並び順がその場で変わります。

同じキーをもう一度押すと、昇順と降順が入れかわります。

課題 3: 削除キーが効かない状態で起動し、それを自分で確かめよう。

ヒント 1(方向づけ)を見る

起動時のオプションで、削除機能そのものを無効にできます。読み取り専用にする、という考え方です。

英語の read-only の頭文字が手がかりです。

ヒント 2(コマンド名)を見る

使うのは ncdu -r です。調べる場所には /tmp を指定します。起動したら d を押して反応を見ます。

答えを見る
$ ncdu -r /tmp

-r を付けて起動すると、d キーが無効になります。削除の確認画面は出ません。

代わりに画面の下へ File deletion disabled in read-only mode.(削除機能は読み取り専用モードで無効です)と表示されます。これが -r が効いている証拠です。

慣れるまでは、この形で練習してください。

9. よくある落とし穴

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

やりがちな失敗 3 つ

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

安全な型

  • システム調査は sudo ncdu -x / です(同じファイルシステムだけを集計します)
  • 本番サーバーは原則 -r(読み取り専用)で起動します
  • 消す前に名前・サイズ・更新日時を確認します。迷ったら消しません

10. 振り返り

リナ: 整理します。ncdu は一度スキャンすれば、あとは矢印キーだけで深掘りできるんですね。
ライニー先輩: そのとおり。Enter で中に入り、左矢印で戻る。この 2 つで十分だよ。
リナ: d は選んでいる行に効く、と覚えました。あやうく /log を消すところでした。
ライニー先輩: よく覚えていたね。慣れるまでは -r を付けて起動する。それだけで事故はほとんど防げるよ。

今日の 3 行まとめ

  1. ncdudu の結果を対話的な画面で見るツール。矢印キーだけで深掘りできる
  2. s でサイズ順、n で名前順に並べかえられる。d は選んでいる行を削除する
  3. 練習と本番の調査では -r(読み取り専用)を付ける。システム調査では sudo-x も付ける

次に読む

この記事を共有

次の一手