試験運用中なLinux備忘録・旧記事

はてなダイアリーで公開していた2007年5月-2015年3月の記事を保存しています。

雑多な圧縮ツールについて(後半)

雑多な圧縮ツールについて(前半)」の続き。

mscompress

マイクロソフトのcompress.exe/expand.exeと互換のツール。圧縮を行うと元のファイル名の後ろに「_」の付いた圧縮ファイルが生成される。

(圧縮)
Usage: mscompress [-h] [-V] [file ...]
 -h --help        give this help
 -V --version     display version number
 file...          files to compress.

(伸長)
Usage: msexpand [-h] [-V] [file ...]
 -h --help        give this help
 -V --version     display version number
 file...          files to decompress. If none given, use standard input.

ncompress

.Z*1ファイルを扱うUNIXのcompress/uncompress互換ツール。(gzipよりも)高速・低圧縮率。

(圧縮)
Usage: compress [-dfvcVr] [-b maxbits] [file ...]
       -d   If given, decompression is done instead.
       -c   Write output on stdout, don't remove original.
       -b   Parameter limits the max number of bits/code.
       -f   Forces output file to be generated, even if one already.
            exists, and even if no space is saved by compressing.
            If -f is not used, the user will be prompted if stdin is.
            a tty, otherwise, the output file will not be overwritten.
       -v   Write compression statistics.
       -V   Output vesion and compile options.
       -r   Recursive. If a filename is a directory, descend
            into it and compress everything in it.

(伸長)
Usage: uncompress [-dfvcVr] [-b maxbits] [file ...]
       -d   If given, decompression is done instead.
       -c   Write output on stdout, don't remove original.
       -b   Parameter limits the max number of bits/code.
       -f   Forces output file to be generated, even if one already.
            exists, and even if no space is saved by compressing.
            If -f is not used, the user will be prompted if stdin is.
            a tty, otherwise, the output file will not be overwritten.
       -v   Write compression statistics.
       -V   Output vesion and compile options.
       -r   Recursive. If a filename is a directory, descend
            into it and compress everything in it.

PAQ

マイナーな圧縮形式とこれを扱うツール。
http://en.wikipedia.org/wiki/PAQ
が詳しい。
圧縮と同時に複数ファイル/ディレクトリをまとめる。
バージョン8系の時点では速度とメモリ使用量を犠牲にして高い圧縮率を実現している。*2伸長時にも圧縮時と同じメモリ量が必要。
原則として(ツール側の)異なるバージョン間で書庫ファイルの互換性がなく、バージョン8pで作成したものは8pで展開しなくてはならないのが難点。別途開発されているZPAQというツールはこの問題を解決している。

(バージョン8pの場合)
To compress:
  paq8p -level file               (compresses to file.paq8p)
  paq8p -level archive files...   (creates archive.paq8p)
  paq8p file                      (level -5, pause when done)
level: -0 = store, -1 -2 -3 = faster (uses 35, 48, 59 MB)
-4 -5 -6 -7 -8 = smaller (uses 133, 233, 435, 837, 1643 MB)
You may also compress directories.

To extract or compare:
  paq8p -d dir1/archive.paq8p      (extract to dir1)
  paq8p -d dir1/archive.paq8p dir2 (extract to dir2)
  paq8p archive.paq8p              (extract, pause when done)

To view contents: more < archive.paq8p

UPX

「Ultimate Packer for eXecutables」の略で、その名の通り、実行形式のファイルを実行可能なまま圧縮する。圧縮率指定可。
圧縮処理を「pack(パック)」、伸長処理を「unpack(アンパック)」と呼ぶ。
結構サイズは縮むのだが、lddなどのコマンドを圧縮済みのファイルには使用できない(圧縮は可逆なので、伸長すれば使えるようになる)。また、実行するときには内容を伸長してからそれを動かすため、メモリ使用の効率を悪くするケースもあるようだ。

Usage: upx [-123456789dlthVL] [-qvfk] [-o file] file..

Commands:
  -1     compress faster                   -9    compress better
  -d     decompress                        -l    list compressed file
  -t     test compressed file              -V    display version number
  -h     give more help                    -L    display software license
Options:
  -q     be quiet                          -v    be verbose
  -oFILE write output to 'FILE'
  -f     force compression of suspicious files
  -k     keep backup files
file..   executables to (de)compress

「upx --help | less」で詳細オプションが参照できる。

関連記事:

使用したバージョン:

  • mscompress 0.3
  • ncompress 4.2.4.2
  • PAQ 8p
  • UPX 3.04

*1:大文字

*2:バージョン9系は特性が異なる