other versions
other languages
bzip2(1) | General Commands Manual | bzip2(1) |
名前¶
bzip2, bunzip2 - ブロックソートによってファイルを圧縮・伸長する。バージョン 1.0.6書式¶
bzip2 [ -cdfkqstvzVL123456789 ] [ filenames ... ]説明¶
bzip2 は、Burrows-Wheeler ブロックソートテキスト圧縮アルゴリズムと Huffman コード化を使ってファイルを圧縮する。 圧縮率は、一般的な LZ77/LZ78 ベースの圧縮率に比べると、大抵の場合でとても良い。 また、圧縮速度は、統計的圧縮法である PPM 圧縮の速度に近づいている。 コマンドラインオプションは GNU gzip のオプションにわざと似せてあるが、同じではない。 bzip2 はコマンドラインのフラグを伴ったファイル名のリストを受け取る。 各ファイルは、"original_name.bz2" という名前の 圧縮されたファイルに置き換えられる。 圧縮ファイルの修正日・アクセス権・(設定可能な場合の) 所有者は、 元のファイルと同じになる。 これにより、伸長時に属性が正しく復元される。 ファイル名の操作は、 元のファイル名・アクセス権・所有者を保存する仕組みが ファイルシステムになかったり、 MS-DOS のように深刻なファイル名の長さ制限があるために、 とても面倒である。 bzip2 と bunzip2 はデフォルトでは既存のファイルを上書きしない。 上書きしたい場合は -f フラグを指定すること。 ファイル名が指定されない場合、 bzip2 標準入力を圧縮して標準出力に書き出す。 この場合、 bzip2 は圧縮された出力を端末には書き出さない。 なぜなら、この出力は全く分かりにくくて、無駄なものだからである。 bunzip2 (または bzip2 -d) は、指定された全てのファイルを伸長する。 bzip2 で圧縮されていないファイルは検知され、無視される。 さらに警告が出される。 bzip2 は、以下のようにして圧縮ファイルの名前から伸長後のファイル名を推測する。filename.bz2 は filename になる。
filename.bz は filename になる。
filename.tbz2 は filename.tar になる。
filename.tbz は filename.tar になる。
anyothername は anyothername.out になる。 ファイル名が .bz2, .bz, .tbz2, .tbz のような認識される拡張子のいずれかで終っていない場合、 bzip2 は元のファイル名が推測できないという警告を出し、 .out を付加した名前を元のファイル名として使う。 圧縮の場合と同様に、 ファイル名が指定されない場合は、 標準入力を伸長して標準出力に書き出す。 bunzip2 は 2 つ以上の圧縮ファイルを連結したファイルでも正しく伸長する。 伸長して得られるファイルは、圧縮前のファイルを連結したものになる。 連結した圧縮ファイルの完全性テスト (-t) もサポートされている。 -c フラグを指定することにより、 圧縮・伸長されたファイルを標準出力に書き出すこともできる。 このフラグを指定して、複数のファイルを圧縮・伸長することができる。 結果の出力は標準出力に順番に書き出される。 この方式による複数ファイルの圧縮では、 複数圧縮ファイル表現を含むストリームが生成される。 このようなストリームは、 バージョン 0.9.0 以降の bzip2 でしか正しく伸長できない。 これより前のバージョンの bzip2 ではストリーム中の最初のファイルを伸長した後に停止する。 bzcat (または bzip2 -dc) は指定した全てのファイルを伸長し、標準出力に書き出す。 bzip2 は環境変数 BZIP2, BZIP からこの順番で引き数を読み込み、 コマンドラインから読み込まれた引き数よりも先に処理する。 これはデフォルトの引き数を与える便利な方法である。 圧縮後のファイルが元のファイルより少し大きくなる場合であっても、 圧縮は常に行われる。 100 バイトより小さいぐらいのファイルは、圧縮によって大きくなる傾向がある。 なぜなら、この圧縮メカニズムが 定常的に 50 バイトのオーバーヘッドを持つためである。 (大部分のファイル圧縮法による出力を含む) ランダムなデータは、 1 バイト当たり約 8.05 ビットでコード化され、約 0.5% 大きくなる。 データ保護のための自己チェックとして、 bzip2 は 32 ビット CRC を破損したファイルを元のファイルと同じにするために使う。 これにより、圧縮データの破損とまだ見つかっていない bzip2 のバグ (とても少ないことを期待する) からデータを保護することができる。 データの破損が検知されない確率は非常に少なく、 各ファイル処理につき 40 億回に 1 回程度である。 しかし、このチェックは伸長のときにしか行われないので、 何か間違いがあることを知らせるだけである点に注意すること。 オリジナルの圧縮されていないデータを復元する助けにはならない。 破損したファイルからデータを復元するためには、 bzip2recover を使うことができる。 返り値: 正常終了の場合、0 が返される。 実行環境の問題 (ファイルがない・不正なフラグ・ I/O エラーなど) がある場合、1 が返される。 破損した圧縮ファイルの場合、2 が返される。 bzip2 にパニックを引き起こす内部整合性エラー (例えば、バグ) の場合、3 が返される。
オプション¶
- -c --stdout
- 圧縮・伸長した結果を標準出力に書き出す。
- -d --decompress
- ファイルの伸長をさせる。 bzip2, bunzip2, bzcat は実際には同じプログラムである。 どの動作をするのかは、どの名前が使われたかに基づいて決められる。 このフラグは、その動作決定機構より優先され、 bzip2 にファイルの伸長をさせる。
- -z --compress
- -d の反対。 起動された名前にかかわらず、ファイルの圧縮をさせる。
- -t --test
- 指定されたファイルの完全性のチェックをするが、伸長はしない。 伸長テストを行い、結果を破棄する。
- -f --force
- 出力ファイルの上書きをさせる。 通常、 bzip2 は既存の出力ファイルを上書きしない。 さらに bzip2 にファイルへのハードリンクを削除させる。 このオプションが指定されていない場合は、ハードリンクの削除もされない。 通常 bzip2 は正しいマジックヘッダバイトを持たないファイルを伸長しない。 ただし (-f) で強制すれば、これらのファイルも修正せずに通過させる。 これは GNU gzip の動作と同じである。
- -k --keep
- 伸長・展開の後でも入力ファイルを保存する (削除しない)。
- -s --small
- 圧縮・伸長・テストの際のメモリ使用量を減らす。 1 ブロックバイト当たり 2.5 バイトしか必要としない 修正されたアルゴリズムを使って、 ファイルの伸長・テストが行われる。 全てのファイルが 2300kB のメモリで伸長できるが、 通常の速度の約半分の速度になってしまう。 圧縮の場合、-s フラグを使うと 200kB のブロックサイズが選択される。 メモリ使用量はこれと同じくらいになるが、圧縮率が犠牲になる。 つまり、計算機にメモリが少ない (8 MB 以下) 場合は、 全てのファイルについて -s フラグを使うこと。 以下の「メモリ管理」セクションを参照すること。
- -q --quiet
- 本質的でない警告メッセージを抑制する。 I/O エラーと致命的なイベントに関係するメッセージは抑制されない。
- -v --verbose
- 詳細表示モード -- 各ファイル処理について圧縮率を表示する。 さらに -v の数を増やすと、詳細表示のレベルも上がり、 主に診断を目的とする多くの情報を書き出す。
- -h --help
- ヘルプメッセージを表示して終了する。
- -L --license -V --version
- ソフトウェアのバージョン・ライセンス・配布条件を表示する。
- -1 (または --fast) から -9 (または --best)
- 圧縮の場合、ブロックサイズを 100 k, 200 k .. 900 k に設定する。 伸長の場合、何も影響を及ぼさない。 以下の「メモリ管理」セクションを参照すること。 --fast と --best エイリアスは、 主として GNU gzip との互換性のためにある。 特に --fast オプションで目に見えて速くなる訳ではない。 また --best は単にデフォルトの動作を選択するだけである。
- --
- これ以降の引き数が、たとえダッシュで始まるものであっても、 ファイル名として扱う。 これにより、ダッシュで始まる名前のファイルを扱うことができる。 例を挙げる: bzip2 -- -myfilename
- --repetitive-fast --repetitive-best
- これらのフラグは、バージョン 0.9.5 以降では余計なものである。 これらのフラグは、以前のバージョンでソートアルゴリズムの動作を 大雑把に制御するために提供されたもので、時々は役立ったものである。 0.9.5 以降では、これらのフラグが無関係になる 改良されたアルゴリズムが使われている。
メモリ管理¶
bzip2 はブロック毎に大きなファイルを圧縮する。 ブロックサイズは、実行された結果の圧縮率と 圧縮・伸長に必要なメモリ使用量の両方に影響を及ぼす。 フラグ -1 から -9 は、それぞれブロックサイズ 100,000 バイトから (デフォルトの) 900,000 バイトを指定する。 伸長時には、圧縮に使われたブロックサイズが圧縮ファイルのヘッダから読み込まれ、 bunzip2 はファイルを伸長するのにちょうど十分なメモリを確保する。 ブロックサイズは圧縮ファイルに格納されているので、 伸長時にはフラグ -1 から -9 は関係なく無視される。 圧縮・伸縮に必要なメモリ使用量 (バイト単位) は、 以下のように計算できる:圧縮: 400k + ( 8 x ブロックサイズ )
伸長: 100k + ( 4 x ブロックサイズ ), または
100k + ( 2.5 x ブロックサイズ ) 大きいブロックサイズにすると、境界の返り値をすぐに減少させる。 大部分の圧縮は、最初の 200kB から 300kB のブロックサイズでつくられる。 bzip2 をメモリの少ない計算機で使う場合は、 このことを覚えておく価値がある。 さらに、伸長に必要なメモリは、圧縮時にブロックサイズを選択することで 設定される点を知っておくことも重要である。 デフォルトの 900kB ブロックサイズで圧縮されたファイルに対して、 bunzip2 は伸長時に約 3700kB のメモリを必要とする。 4MB のメモリの計算機でファイル伸長をサポートするには、 bunzip2 このメモリ量の約半分、約 2300kB を使って伸長するオプションがある。 伸長速度も半分になるので、このオプションは必要な場合にのみ使うべきである。 関連するフラグとして -s がある。 一般的には、メモリの制限が許す限り一番大きなブロックサイズを使うこと。 こうすることで圧縮率が最も良くなる。 圧縮・伸長の速度は事実上ブロックサイズに影響されない。 他に重要な点が単一のブロックに適用される。 -- つまり、入手する大部分のファイルは、 大きいブロックサイズを使っているということである。 このファイルのサイズはブロックサイズより小さいので、 実際のメモリ使用量はファイルサイズに比例する。 例えば、20,000 バイト (20kB) のファイルを -9 フラグで圧縮する場合、 7600kB のメモリが確保されるが、400k + 20000 * 8 = 560kB しか使用しない。 同様に、伸長時には 3700kB が確保されるが、 100k + 20000 * 4 = 180 kB しか使用しない。 異なるブロックサイズに対しての最大メモリ使用量をまとめたテーブルを以下に示す。 カルガリー大学のテキスト圧縮コーパス (14 個のファイル、合計 3,141,622 バイト) を 圧縮したサイズも記録されている。 行毎に比べると、ブロックサイズによって圧縮が どのように変わるかを知ることができる。 この数字は、大きなファイルに対して大きなブロックサイズを使うことの利点を、 控え目にしか述べていない。 なぜなら、このコーパスが小さめのファイルで占められているためである。
圧縮時の 伸長時の -s 伸長時の コーパスの
フラグ 使用量 使用量 使用量 サイズ
-1 1200k 500k 350k 914704
-2 2000k 900k 600k 877703
-3 2800k 1300k 850k 860338
-4 3600k 1700k 1100k 846899
-5 4400k 2100k 1350k 845160
-6 5200k 2500k 1600k 838626
-7 6100k 2900k 1850k 834096
-8 6800k 3300k 2100k 828642
-9 7600k 3700k 2350k 828642