ディスク使用量を見やすく確認できる dufコマンドを使ってみる

はじめに

ディスク使用量を確認したい時は、まず df コマンドを使うことが多い。
ただ、マウントポイントが多い環境だと一覧が少し見づらく感じることがある。

今回は、df の代替としてよく名前が挙がる duf コマンドを使ってみる。
duf は Disk Usage/Free Utility の略で、ディスク使用量を見やすく表示してくれるツールである。
色付きのバー表示や、出力列の絞り込み、JSON 出力などもできるので、普段の確認にもスクリプト用途にも使いやすそうだった。

環境

Windows 11 Professional
WSL2 Ubuntu 24.04 LTS
duf 0.8.1-1ubuntu0.24.04.3

dufのインストール

Ubuntu 24.04 では apt でそのままインストールできた。

sudo apt-get update
sudo apt-get install -y duf
ログ
sudo apt-get install -y duf

Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following NEW packages will be installed:
  duf
0 upgraded, 1 newly installed, 0 to remove and 55 not upgraded.
Need to get 900 kB of archives.
After this operation, 2,351 kB of additional disk space will be used.
Get:1 http://archive.ubuntu.com/ubuntu noble-updates/universe amd64 duf amd64 0.8.1-1ubuntu0.24.04.3 [900 kB]
Fetched 900 kB in 3s (341 kB/s)
Selecting previously unselected package duf.
(Reading database ... 22005 files and directories currently installed.)
Preparing to unpack .../duf_0.8.1-1ubuntu0.24.04.3_amd64.deb ...
Unpacking duf (0.8.1-1ubuntu0.24.04.3) ...
Setting up duf (0.8.1-1ubuntu0.24.04.3) ...
Processing triggers for man-db (2.12.0-4build2) ...

バージョン確認

duf --version
duf (built from source)

Ubuntu パッケージ版でも上記のような表示だった。
パッケージのバージョン自体は apt-cache policy duf0.8.1-1ubuntu0.24.04.3 を確認できた。

dufを使ってみる

基本的な使い方

まずは何も付けずに実行する。

duf

duf はデバイス種別ごとにまとまった表で表示され、SIZE, USED, AVAIL, USE%, TYPE, FILESYSTEM が見やすく並ぶ。
USE% はバー付きで表示されるので、どこが逼迫しているかが直感的に分かりやすい。

例えばこの環境では、ローカルデバイスについて以下のような情報が確認できた。

MOUNTED ON            SIZE    USED   AVAIL   USE%   FILESYSTEM
/etc/hostname      1006.9G  182.5G  773.1G  18.1%  /dev/sde
/etc/hosts         1006.9G  182.5G  773.1G  18.1%  /dev/sde
/etc/resolv.conf   1006.9G  182.5G  773.1G  18.1%  /dev/sde
/home/vscode/.ssh  1006.9G  188.6G  767.1G  18.7%  /dev/sdg
/var/lib/docker    1006.9G  182.5G  773.1G  18.1%  /dev/sde
/vscode            1006.9G  182.5G  773.1G  18.1%  /dev/sde
/workspaces/blog-hugo 1006.9G  188.6G  767.1G  18.7%  /dev/sdg

特定のパスだけ確認する

特定のディレクトリがどのファイルシステム上にあるかを確認したい時は、対象パスを引数に渡せる。

duf /workspaces/blog-hugo
╭──────────────────────────────────────────────────────────────────────────────────────────╮
│ 1 local device                                                                           │
├────────────────────┬─────────┬────────┬────────┬─────────────────────┬──────┬────────────┤
│ MOUNTED ON         │    SIZE │   USED │  AVAIL │         USE%        │ TYPE │ FILESYSTEM │
├────────────────────┼─────────┼────────┼────────┼─────────────────────┼──────┼────────────┤
│ /workspaces/blog-h │ 1006.9G │ 188.6G │ 767.1G │ [#.........]  18.7% │ ext4 │ /dev/sdg   │
│ ugo                │         │        │        │                     │      │            │
╰────────────────────┴─────────┴────────┴────────┴─────────────────────┴──────┴────────────╯

df -h /workspaces/blog-hugo のように単一パスを確認したい時にも、そのまま置き換えて使いやすい。

よく使いそうなオプション

duf --help で確認できた主なオプションは以下。

オプション説明
--only表示するデバイス種別を絞る
--hide指定したデバイス種別を非表示にする
--output出力列を指定する
--sort列を指定してソートする
--inodesブロック使用量の代わりに inode を表示する
--jsonJSON 形式で出力する

例えば、ローカルデバイスだけに絞るなら以下。

duf --only local

特定の列だけを見たいなら以下。

duf --output mountpoint,size,used,avail,usage,filesystem

inode使用状況を見る

容量は余っていても inode が足りなくなることがあるので、--inodes はわりと便利そうだった。

duf --inodes /workspaces/blog-hugo
MOUNTED ON            INODES    IUSED   IAVAIL   IUSE%  TYPE  FILESYSTEM
/workspaces/blog-hugo 67108864 1514710 65594154 2.3%   ext4  /dev/sdg

JSON形式で出力する

スクリプトや監視用途なら --json も使える。

duf --json
[
  {
    "device": "overlay",
    "device_type": "local",
    "mount_point": "/",
    "fs_type": "overlay",
    "type": "",
    "opts": "rw,relatime",
    "total": 1081101176832,
    "free": 830158295040,
    "used": 195950526464
  }
]

すべての項目が機械的に扱いやすい形で出るので、あとで jq などに渡して加工しやすい。

dfコマンドとの比較

dufdf をそのまま置き換えるというより、普段の確認を見やすくしてくれるコマンドという印象だった。
よく使う観点で違いをまとめる。

観点dfduf
標準搭載ほぼ標準で入っている追加インストールが必要なことがある
見やすさシンプルで最小限表形式で見やすく、バー表示もある
出力の絞り込みオプションはあるが少し素朴--only, --hide, --output で柔軟
inode表示df -iduf --inodes
JSON出力なしduf --json が使える
スクリプト用途伝統的で扱いやすいJSON が欲しいなら便利

単一パスを確認する場合

df だと以下。

df -h /workspaces/blog-hugo
Filesystem      Size  Used Avail Use% Mounted on
/dev/sdg       1007G  189G  768G  20% /workspaces/blog-hugo

duf だと以下。

duf /workspaces/blog-hugo
MOUNTED ON            SIZE    USED   AVAIL   USE%   TYPE  FILESYSTEM
/workspaces/blog-hugo 1006.9G 188.6G 767.1G 18.7%  ext4  /dev/sdg

df は軽く確認したい時に十分便利で、出力も短くて安定している。
一方 duf はファイルシステム種別や見やすい列構成も一緒に確認できるのが良い。

どちらを使うか

自分としては以下の使い分けになりそうだった。

  • とりあえず最小限で確認したい時は df
  • 普段の確認を見やすくしたい時は duf
  • JSON 出力やフィルタリングを使いたい時は duf
  • どの環境でも確実に使えるコマンドが欲しい時は df

参考

おわりに

dufdf より高機能で、特に一覧の見やすさが良かった。
マウントポイントが多い環境だと、バー表示やデバイス種別ごとのまとまりがかなり見やすい。

もちろん、標準搭載されていてどこでも使えるのは df の強みなので、普段は df、少し丁寧に見たい時は duf という使い分けでも十分便利そうだった。
JSON 出力もできるので、シェルスクリプトや簡単な監視用途でも試してみたい。

Hugo で構築されています。
テーマ StackJimmy によって設計されています。