2017/01/08 19:57:02

Linuxでディレクトリやファイルの容量を確認する「duコマンド」

目次(クリックするとジャンプします)
  • 1:容量を確認しましょう
  • 1.1:duコマンドを使ってみる
  • 1.2:行数を制限する
  • 1.3:容量食ってるランキングで出力する(大きい順)
  • 1.4:読みやすいフォーマットで出力する
  • 1.5:ファイルの結果も出力する
  • 1.6:サブディレクリの出力をしない
  • 1.7:任意のファイルやディレクトリを除外する
  • 2:まとめ

容量を確認しましょう

なんか空き容量が足りないな…。そんなとき容量食っているディレクトリやファイルを確認したくなりますよね?

Linuxではコマンドラインからさくっとduコマンドで確認することができます。

duコマンドを使ってみる

さっそく素の状態のduを実行してみます。

$ du

58400   ./.config/VirtualBox
16      ./.config/Thunar
12      ./.config/i3
8       ./.config/dconf
56      ./.config/mps-youtube
8       ./.config/mc
8       ./.config/gtk-2.0
4       ./.config/gtk-3.0
8       ./.config/i3status
8       ./.config/conky
~~~~~
~~~~~
~~~~~
~~~~~
~~~~~
~~~~~
~~~~~

単にduだけで実行した場合、今いるディレクトリの容量を表示してくれます。

任意のディレクトリを指定すると、そのディレクトリ直下の容量を出力してくれます。

$ du /yourdir 
8       /home/mino/sandbox/dockerfiles/base-debian
12      /home/mino/sandbox/dockerfiles/ubuntu-test-nonuser
8       /home/mino/sandbox/dockerfiles/vim-docker/.git/info
4       /home/mino/sandbox/dockerfiles/vim-docker/.git/objects/info
8       /home/mino/sandbox/dockerfiles/vim-docker/.git/objects/44
4       /home/mino/sandbox/dockerfiles/vim-docker/.git/objects/pack
8       /home/mino/sandbox/dockerfiles/vim-docker/.git/objects/57
8       /home/mino/sandbox/dockerfiles/vim-docker/.git/objects/5a
8       /home/mino/sandbox/dockerfiles/vim-docker/.git/objects/96
8       /home/mino/sandbox/dockerfiles/vim-docker/.git/objects/fb
~~~~~
~~~~~
~~~~~
~~~~~
~~~~~
~~~~~
~~~~~

ただ、どばっとでますので、ちょっと不便…。

行数を制限する

そこで出力する行数を制限しましょう。これはheadコマンドをパイプで組み合わせると簡単です。

$ du | head

58400   ./.config/VirtualBox
16      ./.config/Thunar
12      ./.config/i3
8       ./.config/dconf
56      ./.config/mps-youtube
8       ./.config/mc
8       ./.config/gtk-2.0
4       ./.config/gtk-3.0
8       ./.config/i3status
8       ./.config/conky

headコマンドはデフォルトで10行の出力をしてくれます。行数を変えたい場合はnコマンドで行数を指定します。

以下では3行に制限してみました。

$ du | head -n 3

58400   ./.config/VirtualBox
16      ./.config/Thunar
12      ./.config/i3

容量食ってるランキングで出力する(大きい順)

容量を確認したい場合、容量食っているランキングでみたいですよね。

そんな時はsortコマンドを組み合わせます。

$ du | sort | head -n 5 

12      ./.config/i3
16      ./.config/Thunar
56      ./.config/mps-youtube
58400   ./.config/VirtualBox
8       ./.config/dconf

ん?ソートされているようには見えますが…なんか変ですね。

容量ランキングなら大きい順に表示されてほしいですよね。

逆順に表示できるようにsortコマンドでrオプション「降順ソート」を使います。

$ du | sort -r | head -n 5
8       ./.config/dconf
58400   ./.config/VirtualBox
56      ./.config/mps-youtube
16      ./.config/Thunar
12      ./.config/i3

でもまだ変ですね。.config/VirtualBoxが一番容量多いのに、.config/dconfが一番上になっています。

じつはsortはデフォルトでは「文字列」としてのソートになります。そのため、文字としての数字順で8の方が大きいということになってしまうのでした。

そこで「数値」としてソートできるようにsortコマンドにnオプション「数値としてソート」を使います。

$ du | sort -rn | head -n 5 
58400   ./.config/VirtualBox
56      ./.config/mps-youtube
16      ./.config/Thunar
12      ./.config/i3
8       ./.config/dconf

こうすると期待したとおり「数値」でのソートになり、容量を食っている順に出力させることができます。

読みやすいフォーマットで出力する

パット見容量がわかりにくいのでduのhオプション「人間に読みやすいフォーマット出力」を使って読みやすい様にします。これで容量に接頭辞が付きます。

$ du -h | sort -rn | head -n 5
1020K ./kernelbuild/linux-4.8.15/net/rose
1020K ./.gem/ruby/2.3.0/gems/sass-3.4.23/test/sass
1016K ./kernelbuild/linux-4.8.15/drivers/xen/xenbus
1016K ./kernelbuild/linux-4.8.15/drivers/net/wireless/intersil/prism54
1012K ./sandbox/vim/runtime/lang

しかしこれだとソートがおかしくなってしまいました。接頭辞付きの数字の場合、sortのnオプションでは期待どおりの出力にはならないので、ここではsortのhオプション「人間に読みやすいフォーマットを数値としてソートする」状態にします。

$ du -h | sort -rh | head -n 5
35G     .
25G     ./VirtualBox VMs
8.1G    ./VirtualBox VMs/mint
8.1G    ./VirtualBox VMs/arch-test
8.1G    ./VirtualBox VMs/Manjaro

hオプションを使うと今調べているディレクトリの合計表示もしてくれるようになります。

ファイルの結果も出力する

duはデフォルトではディレクトリの合計容量を出力してくれますが、直接ファイルの容量も出力することもできます。duのaオプション「不ディレクトリもファイルも出力」を使います。(結果がわかりやすくなるよう出力行数を10にしました)

$ du -ah | sort -rh | head -n 10
35G     .
25G     ./VirtualBox VMs
8.1G    ./VirtualBox VMs/mint/mint.vdi
8.1G    ./VirtualBox VMs/mint
8.1G    ./VirtualBox VMs/arch-test/arch-test.vdi
8.1G    ./VirtualBox VMs/arch-test
8.1G    ./VirtualBox VMs/Manjaro/Manjaro.vdi
8.1G    ./VirtualBox VMs/Manjaro
6.7G    ./Downloads
2.3G    ./kernelbuild

これで具体的にどのファイルが容量を食っているかもわかりますね。

ただし、出力は排他的ではなく、サブディレクトリの結果も重複して出力されます。

サブディレクリの出力をしない

先程の方法だと、容量の食っているディレクトリのサブディレクトリ、ファイルが何度も登場してしまうので場合によっては、ほしい結果になっていないこともあります。

ざっとディレクトリの合計を調べたいときはduのSオプション「サブディレクトリの結果を含めない」を使います。

こうするとduコマンドで調べているディレクトリに存在するディレクトリの合計容量だけが出力され、それ以降のサブディレクトリの結果は出力されなくなります。

$ du -Sh | sort -rh | head -n 10
8.1G    ./VirtualBox VMs/mint
8.1G    ./VirtualBox VMs/arch-test
8.1G    ./VirtualBox VMs/Manjaro
6.7G    ./Downloads
311M    ./.cache/chromium/Default/Cache
281M    ./.cache/chromium/Default/Media Cache
88M     ./kernelbuild
86M     ./.config/chromium/Default/Application Cache/Cache
80M     ./kernelbuild/linux-4.8.15
75M     ./VirtualBox VMs/arch

任意のファイルやディレクトリを除外する

任意のパターンを除外することもできます。ここでは先程出力にでてきていた.vdiファイルを除外してみます。duの--excludeオプション「除外パターン指定」を使います。ワイルドカードが使用可能です。

$ du -ah --exclude='*.vdi' | sort -rh | head -n 10
11G     .
6.7G    ./Downloads
2.3G    ./kernelbuild
2.2G    ./kernelbuild/linux-4.8.15
1.6G    ./Downloads/linuxmint-18-cinnamon-64bit.iso
1.5G    ./Downloads/manjaro-xfce-16.10.2-stable-x86_64.iso
1.3G    ./kernelbuild/linux-4.8.15/drivers
1.3G    ./Downloads/ubuntu-ja-16.04-desktop-amd64.iso
1.3G    ./Downloads/elementaryos-0.4-stable-amd64.20160921.iso
798M    ./Downloads/archlinux-2016.11.01-dual.iso

先程出力されていたvdiファイルは除外されてランキング結果が変わりました。

まとめ

ディレクトリ・ファイルの容量をさくっと調べるduコマンドの紹介でした。他のコマンドと組み合わせることでさまざまな出力ができます。

これで無駄な容量を食っているファイルを特定して撃破できますね。

各コマンドのオプションに関しはmanページを確認してみてください。詳しい使い方がわかるかと思います。