よくわからないエンジニア

よく分からないエンジニアの日々の記録

よくわからないエンジニア

du/dfコマンドの使い方

よくディスクの空き容量とか、各ディレクトリでどのくらい容量使ってるかを調べる時、duとdf使うんですが、どっちがなんだか分からなくなって、毎回ググっている事に気が付きました。恥ずかしいです。
そんなわけで、毎回ググらなくても良いように、du/dfの使い方を復習する事にしました。

目次

duとdfについて

まずは2つのマニュアルを読んでみました。

du - ファイルのディスク使用量を推定する 
df - ファイルシステムのディスク容量の使用状況を表示する  

あ、そうだったんですね。duは「ファイルがどれくらいディスクを使ってるか」で、dfは「ファイルシステムの使用状況」なのか…これだけで判断するのは早いかもしれないけど、説明通り受け取るならば、今のディスク使用状況を確認するならdfで、どのファイルがディスクを圧迫してるのか調べるのはduと覚えとけば良いでしょうかね?
早速使うシチュエーションを考えながらコマンドを見ていこうと思います。

ディスクの使用率を調べる

先程の話通りに行けば、とりあえずdf打っとけば確認出来そうですね。今回は手元のRaspberry Piで確認します。ちなみに我が家ではRaspberry Pi大活躍してます。

root@raspberry:~# df
Filesystem      1K-blocks       Used Available Use% Mounted on
/dev/root        29863804    1748544  26876580   7% /
devtmpfs           468148          0    468148   0% /dev
tmpfs              472756        816    471940   1% /dev/shm
tmpfs              472756      36624    436132   8% /run
tmpfs                5120          4      5116   1% /run/lock
tmpfs              472756          0    472756   0% /sys/fs/cgroup
/dev/mmcblk0p1      41322      21386     19937  52% /boot
tmpfs               94552          0     94552   0% /run/user/1001
/dev/sdc1      2930266328 2171480224 758786104  75% /mnt/hdd1

どの程度ディスクが使われているかを確認するだけであれば、これだけでもわかりますが、折角なのでオプション使って見やすくしていきましょう。

hオプション

hオプションでは、単位を見やすい形にしてくれます。早速オプションつけてコマンド実行してみます。

root@raspberry:~# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/root        29G  1.7G   26G   7% /
devtmpfs        458M     0  458M   0% /dev
tmpfs           462M  816K  461M   1% /dev/shm
tmpfs           462M   36M  426M   8% /run
tmpfs           5.0M  4.0K  5.0M   1% /run/lock
tmpfs           462M     0  462M   0% /sys/fs/cgroup
/dev/mmcblk0p1   41M   21M   20M  52% /boot
tmpfs            93M     0   93M   0% /run/user/1001
/dev/sdc1       2.8T  2.1T  724G  75% /mnt/hdd1

これだけでオプション無しよりだいぶ見やすくなりますね。

Tオプション

大文字Tオプションをつけると各ファイルシステムタイプを表示してくれます。先程のhオプションと一緒に使ってみましょう。

root@raspberry:~# df -Th
Filesystem     Type      Size  Used Avail Use% Mounted on
/dev/root      ext4       29G  1.7G   26G   7% /
devtmpfs       devtmpfs  458M     0  458M   0% /dev
tmpfs          tmpfs     462M  816K  461M   1% /dev/shm
tmpfs          tmpfs     462M   36M  426M   8% /run
tmpfs          tmpfs     5.0M  4.0K  5.0M   1% /run/lock
tmpfs          tmpfs     462M     0  462M   0% /sys/fs/cgroup
/dev/mmcblk0p1 vfat       41M   21M   20M  52% /boot
tmpfs          tmpfs      93M     0   93M   0% /run/user/1001
/dev/sdc1      fuseblk   2.8T  2.1T  724G  75% /mnt/hdd1

これでファイルシステムタイプを確認すれば、特定のファイルシステムのみを"t"オプションで表示出来ます。

[root@raspberry:~# df -ht ext4
Filesystem      Size  Used Avail Use% Mounted on
/dev/root        29G  1.7G   26G   7% /

他にもiオプションでinodeの情報を表示出来たりもするので、–help見ながら確認して見てください。

どのファイル(ディレクトリ)がディスクを圧迫しているのか調べる

dfコマンドでディスクの使用率を調べたら、次はどのディレクトリのなんのファイルがディスクを使用しているのか調べる必要があります。今回は例として「root以下でディスク使用率の高いファイルを特定する」というのを目標に探していきます。まずここで使用するオプションを紹介します。

sオプション

ディレクトリの総計を表示します。各ディレクトリの使用状況を調べるにはぴったりです。これだけだと若干見にくいので、hオプションで見やすい単位をくっつけます。

# du -hs /usr/local/
128M    /usr/local/
xオプション

ここで反射的に/以下でduコマンドをかけると、外付けHDDをマウントしている場合、死ぬほど時間がかかります。あくまでroot以下を調べることが目的なので、xコマンドを使用して別のファイルシステムのディレクトリを除外します。

root@raspberry:~# du -sh /* -x |sort -nr
du: cannot access ‘/proc/31745/task/31745/fd/3: No such file or directory
du: cannot access ‘/proc/31745/task/31745/fdinfo/3: No such file or directory
du: cannot access ‘/proc/31745/fd/3: No such file or directory
du: cannot access ‘/proc/31745/fdinfo/3: No such file or directory
850M    /usr
460M    /var
257M    /lib
52K     /nohup.out
42M     /opt
40M     /root
36M     /run
22M     /boot.bak
21M     /boot
16K     /lost+found
14M     /home
8.1M    /bin
7.4M    /sbin
4.6M    /etc
4.0K    /srv
4.0K    /mnt
4.0K    /media
2.7M    /tmp
0       /sys
0       /proc
0       /dev

後は使用量の高いディレクトリの階層を下っていけば、サイズの大きいファイルを特定出来るかと思います。

もっと効率的で有用な使い方あると思いますが、個人的にはdfとduの区別がついて、ファイルの調査が出来るようになったので、とりあえず良しとします。