Linux 上でディスクを圧迫しているファイルを特定


はじめに

Linux 上でディスク容量がなくて要らないファイル消さなきゃ! ってときの個人的な対象ファイルの探し方。

ディレクトリの特定

必要があれば du でディレクトリを特定します。-h で K/M/G のような human-readable な表示にし、-d 1 で階層を指定します。

$ du -h -d 1
65M    ./aaaa
3.1M    ./bbbb
5.7G    ./cccc
9.1M    ./dddd
1.1M    ./eeee
1.1M    ./ffff
12M     ./gggg
1.1M    ./hhhh
363M    ./iiii
18M     ./jjjj
6.3G    .

サイズの大きい & 要らなそうなファイル探し

サイズが大きくて要らなそうなファイルを探して消します。とりあえずファイルサイズが大きい順に表示して消せるファイルがないか確認します。

  • find . -size +10M のようにして、指定サイズ以上のファイルを表示
  • xargs ls -lh --color でファイルの詳細を表示しつつ色付け
  • sort -k 5 -nr で、ファイルサイズで降順ソート
$ find . -size +10M | xargs ls -lh | sort -k 5 -nr 
-rwxr-xr-x 1 foo foo 523M  6月 21 20:08 ./hotspot/variant-server/libjvm/gtest/libjvm.so
-rwxr-xr-x 1 foo foo 449M  6月 21 20:17 ./images/jdk/lib/server/libjvm.debuginfo
-rwxr-xr-x 1 foo foo 449M  6月 21 20:08 ./support/modules_libs/java.base/server/libjvm.debuginfo
-rw-r--r-- 1 foo foo 218M  6月 21 19:46 ./hotspot/variant-server/libjvm/objs/precompiled/precompiled.hpp.gch
-rw-r--r-- 1 foo foo 218M  6月 21 19:46 ./hotspot/variant-server/libjvm/gtest/objs/precompiled/precompiled.hpp.gch
-rw-r--r-- 1 foo foo 135M  6月 21 20:17 ./images/jdk/lib/modules
-rw-r--r-- 1 foo foo  56M  6月 21 20:17 ./images/jdk/lib/src.zip
-rw-r--r-- 1 foo foo  56M  6月 21 20:16 ./support/src.zip
-rw-r--r-- 1 foo foo  25M  6月 21 20:16 ./support/interim-image/lib/modules
-rwxr-xr-x 1 foo foo  22M  6月 21 20:08 ./support/modules_libs/java.base/server/libjvm.so
-rwxr-xr-x 1 foo foo  22M  6月 21 20:08 ./jdk/lib/server/libjvm.so
-rw-r--r-- 1 foo foo  22M  6月 21 20:17 ./images/jdk/lib/server/libjvm.so
-rw-r--r-- 1 foo foo  22M  6月 21 20:16 ./support/interim-image/lib/server/libjvm.so
-rw-r--r-- 1 foo foo  20M  6月 21 20:17 ./images/jmods/java.base.jmod
-rw-r--r-- 1 foo foo  20M  6月 21 20:17 ./images/jdk/jmods/java.base.jmod
-rw-r--r-- 1 foo foo  20M  6月 21 20:15 ./support/interim-jmods/java.base.jmod
-rwxr-xr-x 1 foo foo  18M  6月 21 20:17 ./images/jdk/lib/libfontmanager.debuginfo
-rwxr-xr-x 1 foo foo  18M  6月 21 20:11 ./support/modules_libs/java.desktop/libfontmanager.debuginfo
-rw-r--r-- 1 foo foo  18M  6月 21 19:47 ./hotspot/variant-server/libjvm/objs/ad_x86.o
-r--r--r-- 1 foo foo  18M  6月 21 19:45 ./configure-support/classes.jsa
-rw-r--r-- 1 foo foo  13M  6月 21 20:17 ./images/jdk/jmods/java.desktop.jmod
-rw-r--r-- 1 foo foo  13M  6月 21 20:15 ./images/jmods/java.desktop.jmod

ファイル名だけだと「これ何のファイルだっけ?」となる場合、ファイルタイプの情報を表示します。

  • find . -size +10M のようにして、指定サイズ以上のファイルを表示
  • file コマンドでファイルタイプ情報の表示
$ find . -size +10M | xargs file
./configure-support/classes.jsa:                                            data
./support/src.zip:                                                          Zip archive data, at least v2.0 to extract
./support/interim-image/lib/modules:                                        data
./support/interim-image/lib/server/libjvm.so:                               ELF 64-bit LSB shared object, x86-64, version 1 (GNU/Linux), dynamically linked, BuildID[sha1]=b0eeb74ffe2494e0aec4b6b52e4a17c67ad2a750, not stripped
./support/modules_libs/java.desktop/libfontmanager.debuginfo:               ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=05f21942ca65ba8aed6520f8a5641e83a78b0a01, with debug_info, not stripped
./support/modules_libs/java.base/server/libjvm.debuginfo:                   ELF 64-bit LSB shared object, x86-64, version 1 (GNU/Linux), dynamically linked, BuildID[sha1]=b0eeb74ffe2494e0aec4b6b52e4a17c67ad2a750, with debug_info, not stripped
./support/modules_libs/java.base/server/libjvm.so:                          ELF 64-bit LSB shared object, x86-64, version 1 (GNU/Linux), dynamically linked, BuildID[sha1]=b0eeb74ffe2494e0aec4b6b52e4a17c67ad2a750, not stripped
./support/interim-jmods/java.base.jmod:                                     data
./images/jmods/java.desktop.jmod:                                           data
./images/jmods/java.base.jmod:                                              data
./images/jdk/jmods/java.desktop.jmod:                                       data
./images/jdk/jmods/java.base.jmod:                                          data
./images/jdk/lib/modules:                                                   data
./images/jdk/lib/server/libjvm.debuginfo:                                   ELF 64-bit LSB shared object, x86-64, version 1 (GNU/Linux), dynamically linked, BuildID[sha1]=b0eeb74ffe2494e0aec4b6b52e4a17c67ad2a750, with debug_info, not stripped
./images/jdk/lib/server/libjvm.so:                                          ELF 64-bit LSB shared object, x86-64, version 1 (GNU/Linux), dynamically linked, BuildID[sha1]=b0eeb74ffe2494e0aec4b6b52e4a17c67ad2a750, not stripped
./images/jdk/lib/src.zip:                                                   Zip archive data, at least v2.0 to extract
./images/jdk/lib/libfontmanager.debuginfo:                                  ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=05f21942ca65ba8aed6520f8a5641e83a78b0a01, with debug_info, not stripped
./jdk/lib/server/libjvm.so:                                                 ELF 64-bit LSB shared object, x86-64, version 1 (GNU/Linux), dynamically linked, BuildID[sha1]=b0eeb74ffe2494e0aec4b6b52e4a17c67ad2a750, not stripped
./hotspot/variant-server/libjvm/objs/precompiled/precompiled.hpp.gch:       GCC precompiled header (version 014) for C++
./hotspot/variant-server/libjvm/objs/ad_x86.o:                              ELF 64-bit LSB relocatable, x86-64, version 1 (GNU/Linux), with debug_info, not stripped
./hotspot/variant-server/libjvm/gtest/libjvm.so:                            ELF 64-bit LSB shared object, x86-64, version 1 (GNU/Linux), dynamically linked, BuildID[sha1]=cdb3e993a680d73ac0b66f6f03edc108b46b4c53, with debug_info, not stripped

ファイルサイズ降順でファイルを表示し、かつファイルタイプを表示しつつ LS_COLORS に基づいて色を付けたい(上記を両方行いたい)場合、シェルスクリプトでやるとしんどいので適当に作ったツールを使っています。
https://github.com/chgzm/fsrank

オプションで、表示するファイル数とディレクトリが指定できます。

$ ./fsrank [-n num] [directory] 

ファイルを特定したら、あとは消すなり圧縮するなりします。

まとめ

Linux 上でディスク容量を圧迫するファイルの特定についてでした。