コマンドラインのマニュアル

Man » bzip2 マニュアルオンライン - bzip2 マニュアルのオンライン詳細ドキュメント

🌍
bzip2, bunzip2 - ブロックソートファイル圧縮ツール、v1.0.8
bzcat - ファイルを stdout に展開
bzip2recover - 破損した bzip2 ファイルからデータを回復

構文

bzip2 [ -cdfkqstvzVL123456789 ] [ ファイル名 ... ]
bzip2 [ -h|--help ]
bunzip2 [ -fkvsVL ] [ ファイル名 ... ]
bunzip2 [ -h|--help ]
bzcat [ -s ] [ ファイル名 ... ]
bzcat [ -h|--help ]
bzip2recover ファイル名

説明

bzip2 は、Burrows-Wheeler ブロックソートテキスト圧縮アルゴリズムとハフマン符号を使用してファイルを圧縮します。圧縮率は、従来の LZ77/LZ78 ベースの圧縮ツールと比較して一般的に大幅に向上し、PPM ファミリーの統計的圧縮ツールに近いパフォーマンスを発揮します。

コマンドラインオプションは、GNU gzip のオプションと意図的に非常に似ています。ただし、完全に同一ではありません。

bzip2 は、コマンドラインフラグとともにファイル名のリストを期待します。各ファイルは、その名前を "元の名前.bz2" に変更した圧縮バージョンに置き換えられます。各圧縮ファイルは、元のファイルと同じ修正日、権限を持ち、可能な場合は所有者も元のままになるようにします。これにより、展開時にこれらのプロパティを正しく復元できます。ファイル名の処理は単純であり、ファイルシステムにこれらの概念がない場合、またはファイル名の長さ制限が厳しい場合 (MS-DOS など) に、元のファイル名、権限、所有権、または日付を保持するメカニズムはありません。

bzip2 と bunzip2 は、デフォルトで既存のファイルを上書きしません。上書きさせたい場合は、-f フラグを指定します。

ファイル名が指定されていない場合、bzip2 は標準入力から標準出力に圧縮します。この場合、bzip2 は圧縮された出力をターミナルに書き込むことを拒否します。これは完全に理解不能であり、したがって無意味だからです。

bunzip2 (または bzip2 -d) は、指定されたすべてのファイルを展開します。bzip2 で作成されていないファイルは検出し、無視し、警告を発します。bzip2 は、圧縮されたファイル名から展開されたファイル名を推測しようとします。

ファイル名.bz2 は ファイル名 になります
ファイル名.bz は ファイル名 になります
ファイル名.tbz2 は ファイル名.tar になります
ファイル名.tbz は ファイル名.tar になります
その他の名前 は その他の名前.out になります

ファイルが、.bz2、.bz、.tbz2、または .tbz のいずれかの既知の拡張子で終わっていない場合、bzip2 は元のファイル名を推測できないことを通知し、元の名前に .out を追加して使用します。

圧縮と同様に、ファイル名を指定しない場合、標準入力から標準出力への展開が行われます。

bunzip2 は、2 つ以上の圧縮ファイルの連結を正しく解凍します。結果は、対応する非圧縮ファイルの連結になります。連結された圧縮ファイルの整合性テスト (-t) もサポートされています。

-c フラグを指定すると、ファイルを標準出力に圧縮または解凍することもできます。複数のファイルをこのように圧縮および解凍できます。結果として出力は順次 stdout に送られます。このように複数のファイルを圧縮すると、複数の圧縮ファイル表現を含むストリームが生成されます。このようなストリームは、bzip2 バージョン 0.9.0 以降でのみ正しく解凍できます。それ以前のバージョンの bzip2 は、ストリーム内の最初のファイルを解凍した後で停止します。

bzcat (または bzip2 -dc) は、指定されたすべてのファイルを標準出力に解凍します。

bzip2 は、環境変数 BZIP2 および BZIP から引数を読み込み、コマンドラインから読み込まれた引数を処理する前に、これらの引数を処理します。これにより、デフォルトの引数を簡単に指定できます。

圧縮は常に実行されます。圧縮されたファイルが元のファイルよりもわずかに大きくなる場合でも同様です。約 100 バイト未満のファイルは大きくなる傾向があります。これは、圧縮メカニズムに約 50 バイトの固定オーバーヘッドがあるためです。ランダムデータ(ほとんどのファイルコンプレッサーの出力を含む)は、約 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

メモリ使用量を削減します。圧縮、解凍、およびテストで使用します。ファイルを解凍およびテストするために、各ブロックバイトあたり2.5バイトしか必要としない修正されたアルゴリズムを使用します。これにより、任意のファイルを2300KBのメモリで解凍できますが、速度は約半分になります。

圧縮中、-sオプションは200KBのブロックサイズを選択し、メモリ使用量を約同じレベルに制限しますが、圧縮率が低下します。要するに、メモリが少ない(8MB以下)場合は、すべての場合に-sオプションを使用してください。 MEMORY MANAGEMENTを参照してください。

-q --quiet

重要でない警告メッセージを抑制します。I/Oエラーやその他の重大なイベントに関するメッセージは抑制されません。

-v --verbose

詳細モード。各ファイルの圧縮率を表示します。-vオプションを複数回指定すると、さらに詳細な情報が表示されます。これは主に診断目的で使用されます。

-h --help

ヘルプメッセージを表示して終了します。

-L --license -V --version

ソフトウェアのバージョン、ライセンス条項と条件を表示します。

-1(または--fast)から-9(または--best)

圧縮時にブロックサイズを100KB、200KB、...、900KBに設定します。解凍時には効果がありません。MEMORY MANAGEMENTを参照してください。--fastおよび--bestエイリアスは、主にGNU gzipとの互換性のために使用されます。特に、--fastは処理を大幅に高速化するわけではありません。また、--bestは単にデフォルトの動作を選択するだけです。

--

その後のすべての引数をファイル名として扱います。これは、ファイル名がハイフンで始まる場合(例:bzip2 -- -myfilename)に使用します。

--repetitive-fast --repetitive-best

これらのフラグは、バージョン0.9.5以降では冗長です。これらは、以前のバージョンでソートアルゴリズムの動作をある程度制御するためのものでしたが、バージョン0.9.5以降では、改善されたアルゴリズムにより、これらのフラグは関係がなくなりました。

MEMORY MANAGEMENT

bzip2は、大きなファイルをブロックに分割して圧縮します。ブロックサイズは、達成される圧縮率と、圧縮および解凍に必要なメモリ量に影響します。-1から-9までのフラグは、ブロックサイズをそれぞれ100,000バイトから900,000バイト(デフォルト)に設定します。解凍時には、圧縮時に使用されたブロックサイズが圧縮ファイルのヘッダーから読み取られ、bunzip2はファイルを解凍するために必要なメモリを割り当てます。ブロックサイズは圧縮ファイルに保存されているため、-1から-9までのフラグは解凍時には関係なく、無視されます。

圧縮と解凍に必要なメモリ(バイト単位)は、次のように推定できます。

圧縮:400k + (8 x ブロックサイズ)

解凍:100k + (4 x ブロックサイズ) または
100k + (2.5 x ブロックサイズ)

大きなブロックサイズを使用すると、追加的なメリットは急速に減少します。ほとんどの圧縮は、最初の2つまたは3つの数百kのブロックサイズから得られます。これは、小さなマシンでbzip2を使用する場合に考慮すべき点です。また、解凍に必要なメモリは、圧縮時に選択したブロックサイズによって決定されることも重要です。

デフォルトの900kブロックサイズで圧縮されたファイルの場合、bunzip2は約3700kバイトのメモリを必要として解凍します。4メガバイトのマシン上で任意のファイルを解凍できるように、bunzip2には、約半分のメモリ、つまり約2300kバイトを使用して解凍するオプションがあります。解凍速度も半分になるため、必要に応じてのみこのオプションを使用してください。関連するフラグは-sです。

一般に、メモリの制約内で可能な限り大きなブロックサイズを使用するようにしてください。これにより、圧縮率が最大化されます。圧縮と解凍の速度は、ブロックサイズの影響をほとんど受けません。

もう1つの重要な点は、1つのブロックに収まるファイル(つまり、大きなブロックサイズを使用する場合によく遭遇するファイル)です。実際に使用されるメモリ量は、ファイルサイズに比例します。たとえば、-9フラグを使用して20000バイトのファイルを圧縮すると、コンプレッサーは約7600kのメモリを割り当てますが、実際に使用するのは400k + 20000 * 8 = 560kバイトだけです。同様に、デコンプレッサーは3700kを割り当てますが、実際に使用するのは100k + 20000 * 4 = 180kバイトだけです。

以下に、さまざまなブロックサイズでの最大メモリ使用量をまとめた表を示します。また、カルガリーテキスト圧縮コーパスにある合計3,141,622バイトの14個のファイルの合計圧縮サイズも記録されています。この列は、圧縮がブロックサイズによってどのように変化するかを示します。これらの数値は、コーパスが小さいファイルで構成されているため、大きいファイルの場合の大きなブロックサイズの利点を過小評価する傾向があります。

圧縮 フラグ 使用量 解凍 -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

破損したファイルからデータを回復する

bzip2は、通常900kバイトのブロックでファイルを圧縮します。各ブロックは独立して処理されます。 メディアまたは送信エラーにより、複数のブロックを含む.bz2ファイルが破損した場合、ファイル内の破損していないブロックからデータを回復できる場合があります。


各ブロックの圧縮表現は、48ビットのパターンで区切られており、これにより、ブロックの境界を合理的に確実に検出できます。各ブロックには独自の32ビットCRCも含まれており、これにより、破損したブロックと破損していないブロックを区別できます。

^ zip2recoverは、.bz2ファイル内のブロックを検索し、各ブロックを個別の.bz2ファイルに書き出すことを目的とするシンプルなプログラムです。次に、bzip2 -tを使用して、生成されたファイルの整合性をテストし、破損していないファイルを解凍できます。

^ zip2recoverは、単一の引数、つまり破損したファイルの名前を取り、"rec00001file.bz2"、"rec00002file.bz2"などの複数のファイルを書き出します。これらの出力ファイル名は、その後の処理でワイルドカードを使用する場合(例:bzip2 -dc rec*file.bz2 > recovered_data)に、ファイルが正しい順序で処理されるように設計されています。

^ zip2recoverは、多くの場合、大きな.bz2ファイルで使用すると最も役立ちます。なぜなら、大きなファイルには多くのブロックが含まれているからです。破損した単一ブロックファイルで使用しても意味がありません。なぜなら、破損したブロックは回復できないからです。メディアまたは伝送エラーによるデータ損失を最小限に抑えたい場合は、より小さいブロックサイズで圧縮することを検討してください。

パフォーマンスに関する注意点

圧縮のソート段階では、ファイル内の類似の文字列がまとめて処理されます。このため、「aabaabaabaab ...」(数百回繰り返される)のような、非常に長い繰り返しシンボルのシーケンスを含むファイルは、通常よりも圧縮に時間がかかる場合があります。バージョン0.9.5以降では、以前のバージョンよりも大幅に改善されています。最悪の場合と平均の場合の圧縮時間の比率は、約10:1です。以前のバージョンでは、この比率は約100:1でした。-vvvvオプションを使用すると、詳細な進捗状況を監視できます。

解凍速度は、これらの現象の影響を受けません。

^ zip2は通常、数メガバイトのメモリを割り当てて、そのメモリ全体をかなりランダムな方法で処理します。つまり、圧縮と解凍の両方のパフォーマンスは、主にマシンのキャッシュミスへの対応速度によって決まります。このため、コードにわずかな変更を加えてミス率を減らすと、パフォーマンスが著しく向上することが観察されています。bzip2は、非常に大きなキャッシュを備えたマシンで最高のパフォーマンスを発揮すると考えられます。

注意事項

I/Oエラーメッセージは、期待ほど役に立ちません。bzip2は、I/Oエラーを検出し、正常に終了するように努めますが、問題の詳細が誤解を招くように見える場合があります。

このマニュアルページは、bzip2のバージョン1.0.8に適用されます。このバージョンで作成された圧縮データは、以前のパブリックリリース(バージョン0.1pl2、9.0、0.9.5、1.0.0、1.0.1、1.0.2以降)と完全に前方および後方互換性がありますが、次の例外があります。0.9.0以降では、複数の連結された圧縮ファイルを正しく解凍できます。0.1pl2はこれを行うことができません。最初のファイルのみを解凍した後で停止します。


bzip2recoverの1.0.2より前のバージョンは、圧縮ファイルのビット位置を表現するために32ビット整数を使用していたため、512メガバイトを超える圧縮ファイルを処理できませんでした。
バージョン0.2以降では、一部のプラットフォーム(GNUがサポートするターゲット、およびWindows)で64ビット整数が使用されます。 bzip2recoverがそのような制限付きでビルドされたかどうかを確認するには、引数なしで実行してください。 いずれにしても、MaybeUInt64を符号なし64ビット整数に設定して再コンパイルできる場合は、制限のないバージョンを自分でビルドできます。

著者

ジュリアン・セワード、_。

https://sourceware.org/bzip2/

bzip2に組み込まれているアイデアは、少なくとも以下の人々によるものです。マイケル・バローズとデイビッド・ウィーラー(ブロックソート変換)、デイビッド・ウィーラー(再び、ハフマンコーダー)、ピーター・フェンウィック(元のbzipにおける構造化コーディングモデル、および多くの改良)、およびアリストア・モファット、ラドフォード・ニール、イアン・ウィッテン(元のbzipにおける算術コーダー)。 彼らの助け、サポート、アドバイスに深く感謝します。 ソース配布に含まれるマニュアルを参照して、ドキュメントのソースへのリンクを参照してください。 クリスチャン・フォン・ロークスは、より高速なソートアルゴリズムを調べて圧縮を高速化するように勧めました。 ベラ・ルブキンは、最悪の場合の圧縮パフォーマンスを改善するように勧めました。 ドナ・ロビンソンは、ドキュメントをXML形式に変換しました。 bz*スクリプトは、GNU gzipのものから派生しています。 多くの人がパッチを送信し、移植性の問題を解決し、マシンを貸し、アドバイスを提供し、一般的に協力してくれました。