gzip/bzip2 の環境変数 GZIP/BZIP2 について検証する

- gzip/bzip2 は環境変数 GZIP/BZIP2 で圧縮レベルのデフォルト値を指定できる
  http://sonic64.com/2005-12-07.html

  の記事を見て,そんな環境変数があったのを知らなかったので検証してみた.

  ファイルは Apache の アクセスログで小さいの (3.8M) があったのでそれを使った.

% ls -la access_log
-rw-r--r--    1 sunaoka  staff     4015160 11月 30 19:26 access_log

  まずは,gzip.デフォルトの圧縮レベルは -6.291059 バイト (284k) まで圧縮できる.

% time gzip access_log
0.56u 0.03s 0:00.56 105.3%
% ls -la access_log*
-rw-r--r--    1 sunaoka  staff      291059 11月 30 19:26 access_log.gz

  次に,環境変数に圧縮レベル -9 を指定して圧縮.262166 バイト (256k) まで圧縮.
  デフォルトに比べて約 90% 圧縮できた.

% time env GZIP=-9 gzip access_log
1.17u 0.01s 0:01.15 102.6%
% ls -la access_log*
-rw-r--r--    1 sunaoka  staff      262166 11月 30 19:26 access_log.gz

  また,bzip2 の場合.174993 (171k) にまで圧縮できる.gzip -9 よりも,66% ほど小さくなる.
  ただし,時間は 7 倍近くかかる.

% time bzip2 access_log
7.31u 0.07s 0:07.41 99.5%
% ls -la access_log*
-rw-r--r--    1 sunaoka  staff      174993 11月 30 19:26 access_log.bz2

  そして,環境変数に圧縮レベル -9 を指定して圧縮.あれ?デフォルトと全然変わらない.

% time env BZIP2=-9 bzip2 access_log
7.30u 0.05s 0:07.33 100.2%
% ls -la access_log*
-rw-r--r--    1 sunaoka  staff      174993 11月 30 19:26 access_log.bz2

  man をみてみると…

--best merely selects the default behaviour.

  --best (-9) はただ単にデフォルトの動作を指定するだけとある.

  そして,

The flags  -1  through  -9  specify the block size to be
100,000 bytes through 900,000 bytes (the default) respectively.

  とのことなので bzip2 は -9 がデフォルトだそうです.

  結論としては,gzip は環境変数 GZIP に -9 を指定してあげるのがよさそう.
  bzip2 は,何もしなくていい.