Cocoon-Engine

甘党インフラエンジニアの技術ブログ

Chocolat Chocolat Chocolat Chocolat

IT技術とスイーツに興味がある方、ちょっと見ていきませんか?

【Linux】使用量の大きいディレクトリを特定する方法【du】

Linux で du コマンドを使って使用量の大きいディレクトリを特定します。

duコマンドの使用法

ディレクトリ内の使用量を特定するときは du コマンドを使います。

書式は du [オプション] [ディレクトリ] です。

 

特定のディレクトリの使用量を確認する方法

例として、/var 内のディレクトリの使用量を du -h で確認します。

[test@localhost ~]$ sudo du -h /var | sort -hr | head -10
158M	/var
146M	/var/lib
130M	/var/lib/rpm
13M	/var/lib/yum
12M	/var/lib/yum/yumdb
8.4M	/var/log
3.5M	/var/lib/mlocate
3.2M	/var/cache
3.0M	/var/cache/man
2.8M	/var/lib/yum/yumdb/l
[test@localhost ~]$ 

 

/var 内のディレクトリがサイズの大きい順に出力されます。

-h は単位をつけてくれるオプションです。単位を指定したいときは -m, -k, -b を使い分けてください。

サイズが大きい順に出力させたいので、sort -hr で単位ごとに並び替えています。

こちらも場合によっては -h ではなく別の単位を明示的に指定してください。(単位が大きいと粒度は下がるので。)

 

ファイルも含めて出力

上記の方法だと、出力されるのはディレクトリ単位です。

例えば /var/lib/rpm 内に Packages という 118M のファイルがありますが、出力結果には出てきていません。

[test@localhost ~]$ ls -lhr /var/lib/rpm/Packages 
-rw-r--r--. 1 root root 118M  4月 27 23:26 /var/lib/rpm/Packages
[test@localhost ~]$ 

 

このようなファイルも含めて使用量を確認したい場合は -a オプションを付与します。

[test@localhost ~]$ sudo du -ah /var | sort -hr | head -10
158M	/var
146M	/var/lib
130M	/var/lib/rpm
118M	/var/lib/rpm/Packages
13M	/var/lib/yum
12M	/var/lib/yum/yumdb
8.6M	/var/log
4.9M	/var/lib/rpm/Basenames
3.5M	/var/lib/mlocate/mlocate.db
3.5M	/var/lib/mlocate
[test@localhost ~]$ 

 

ファイルとディレクトリをまとめてサイズが大きい順に出力されています。

容量を圧迫している対象まで一発で特定したいときはこっちが便利です。

 

ディレクトリの合計サイズのみ出力

一方、サブディレクトリの詳細情報等なしで対象ディレクトリのサイズのみを出したいときは -s オプションを使います。

[test@localhost ~]$ sudo du -sh /var
158M	/var
[test@localhost ~]$

 

それって ls -ld で /var 調べればいいんじゃ…と思いますが、ls- -ld で調べられるのはあくまでも ディレクトリ単体のサイズであり、配下のファイルまで含めたサイズにはなりません。

[test@localhost ~]$ ls -lhd /var
drwxr-xr-x. 20 root root 282  4月 27 23:30 /var
[test@localhost ~]$ 

 

282B になっていますね。

 

awk でサイズ単位が特定のディレクトリのみ出力

使い時はかなり限定されますが、、、

サイズ単位が特定のものだけを出力させる方法もあります。

$ sudo du -h /var/log | awk '$1 ~ /G$/ {print}' | sort -nr
27G     /var/log
8.4G    /var/log/httpd
5.3G    /var/log/audit
$

 

awk '$1 ~ /G$/ {print}' で1フィールド目(サイズ列) に G(GB) を含むもののみを抽出しています。

M(MB) で抽出したい時などは G$ の部分を M$ に変えればOKです。

「元々のサイズ単位のまま」というのが肝ですね。du -m や -k での単位指定だと単位表記自体が変わってしまいます。

GB専用のオプションもないので、ごく稀に GB だけで抽出したいときに使うことがあります。

 

 

du コマンドを / (ルートディレクトリ) に対して実行すると負荷が上がるのでそこは要注意。

気に入ったらぜひ共有してください。

TOP