ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
概要
bzip2 は、1996 年に英国のプログラマ Julian Seward が発表したフリーソフトウェアのデータ圧縮プログラムおよびその出力形式です。当時主流だった gzip(DEFLATE)に対して「より時間をかけても良いので圧縮率を高めたい」というニーズに応える形で登場し、Linux/UNIX 系のソースコード配布フォーマットとして急速に普及しました。
名前の「bz」は内部で使う Burrows-Wheeler Transform(BWT)に由来するという俗説がありますが、Seward 自身は「特に深い意味はない」と述べています。「2」は前身のプロトタイプ「bzip」から仕様を変更した第二世代という意味で付与されました。
2010 年代に入ると、より高圧縮の xz(LZMA2) や、高速かつ圧縮率も高い Zstandard へと配布形式の主役が移りつつあります。Linux カーネル公式 tarball は 2013 年に bzip2 配布を停止し xz へ移行、Debian や Fedora の多くのパッケージも xz に置換されました。とはいえ、依然として古い OSS の tarball、組み込み Linux のソース配布、研究データのアーカイブなどで bz2 ファイルは大量に流通しており、現代のエンジニアも扱う必要があります。
内部構造とマジックナンバー
bzip2 ファイルは固定ヘッダ(マジック + ブロックサイズ指定)で始まり、その後に複数の圧縮ブロックが連結されます。
| オフセット | 内容 | 値の例 |
|---|---|---|
| 0-2 | マジックナンバー | 42 5A 68 (BZh) |
| 3 | ブロックサイズ(ASCII 数字) | 31〜39 ('1'〜'9'、100KB 単位) |
| 4-9 | 圧縮ブロック開始マーカ | 31 41 59 26 53 59 |
| ... | 圧縮データ本体 | BWT → MTF → Huffman |
| 末尾 | EOF マーカ + CRC32 | 17 72 45 38 50 90 + 32bit CRC |
圧縮処理は次の 3 段で行われます。
- Burrows-Wheeler Transform (BWT): 入力ブロック(最大 900KB)の循環シフトを辞書順ソートし、最終列を取り出すことで「同じ文字が連続しやすい列」に並び替える。
- Move-to-Front (MTF) 変換: 直前に現れた文字を 0 に近い値へマップし、続けて RLE(連長符号化)でゼロの連続を圧縮する。
- Huffman 符号化: 出現頻度に応じた可変長符号で最終的にビット列へ落とし込む。
BWT は理論的に「順序を入れ替えるだけで情報は失わない」可逆変換であり、ここで「圧縮しやすい配置」を作ってから本来の圧縮を行うのが bzip2 の本質的アイデアです。
主な用途
- OSS ソースコード配布:
foo-1.2.3.tar.bz2形式で公開される伝統的な tarball - 長期保管アーカイブ: 圧縮率重視で、解凍速度より保管サイズを優先する場合
- ログ・データの圧縮: テキスト主体のデータで、gzip より一段高い圧縮率を得たい場合
- 科学技術データ: ゲノム配列、FASTQ 等の繰り返しが多いテキストデータと相性が良い
関連形式との比較
| 形式 | アルゴリズム | 圧縮率 | 速度 | メモリ使用量 | 並列化 |
|---|---|---|---|---|---|
| gzip | DEFLATE (LZ77+Huffman) | 中 | 速い | 少 | pigz で可 |
| bzip2 | BWT+MTF+Huffman | 高 | 遅い | 中(〜7.6MB) | pbzip2/lbzip2 で可 |
| xz | LZMA2 | 非常に高 | 非常に遅い | 大(〜数百MB) | xz -T で可 |
| zstd | FSE+LZ77 派生 | 中〜高(可変) | 非常に速い | 中 | 標準対応 |
コマンド・ツール
# 圧縮 (元ファイルは消えて file.txt.bz2 になる)
bzip2 file.txt
# 元ファイルを保持しつつ圧縮
bzip2 -k file.txt
# 圧縮レベル指定 (1=高速低圧縮, 9=低速高圧縮、デフォルト 9)
bzip2 -9 file.txt
# 解凍
bunzip2 file.txt.bz2
# または
bzip2 -d file.txt.bz2
# 標準出力に展開(パイプ用)
bzcat file.txt.bz2 | grep ERROR
# tar との組み合わせ (.tar.bz2 / .tbz2)
tar cjvf archive.tar.bz2 ./dir/ # j = bzip2
tar xjvf archive.tar.bz2 # 展開
# 並列圧縮(マルチコア活用)
pbzip2 -p4 -k large.log # 4 並列で圧縮
lbzip2 -n 8 -k huge.dat # 8 並列、より新しい実装
注意点・落とし穴
- 破壊的動作がデフォルト:
bzip2 fileを実行するとfileは削除されfile.bz2だけが残る。スクリプト内で使う場合は-k(keep)を忘れずに。 - 並列化は標準実装にない:
bzip2本体はシングルスレッド。大きなファイルではpbzip2またはlbzip2を使わないと CPU を活かせない。 - ランダムアクセス不可: ブロック単位の圧縮ではあるが、解凍時には先頭から順に処理する必要がある。巨大ファイルの一部だけ取り出すような用途には不向き。
- xz/zstd への移行潮流: 新規プロジェクトで bz2 を選ぶ理由はほとんどない。配布効率(圧縮率)なら xz、速度なら zstd を優先するのが現代的。
- ヘッダ破損の脆さ: 先頭の 4 バイトが壊れるだけで解凍不能になる。リカバリ機能は無いので、ミラー保管か別途 PAR2 等を併用すること。
関連リンク
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページはありません
- ZIP(.zip)
- TAR(.tar)
- GZ / GZIP(.gz / .tgz)
- 7z(.7z)
- RAR(.rar)
- BZ2 / BZIP2(.bz2 / .tbz2)
- XZ / LZMA2(.xz / .txz)
- Zstandard(.zst / .zstd)
- CAB(.cab)
- LZH(.lzh / .lha)
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript base URL 取得方法|window.location.origin と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- IPv6とは|128bitアドレス・コロン16進表記/::省略・リンクローカル・SLAAC・デュアルスタック NEW 2026-06-22 12:34:44
- MAC アドレスフィルタリングの仕組みと限界 | ネットワーク入門 NEW 2026-06-22 12:19:10
- VPNとは|暗号トンネル・サイト間/リモートアクセス・IPsec/SSL-VPN/WireGuardを解説 NEW 2026-06-22 12:19:10
- Web通信プロトコル入門 HTTP/2・HTTP/3・WebSocket・gRPC・WebRTC | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/2 とは 多重化・HPACK・バイナリフレーム | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/3 (QUIC) とは UDP ベースの低遅延 Web 通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebRTC とは ブラウザ間 P2P の音声・映像・データ通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- gRPC とは HTTP/2 + Protocol Buffers の高速 RPC | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebSocket とは 全二重リアルタイム通信 ws/wss | ネットワーク入門 NEW 2026-06-22 12:17:25
- HAProxy とは frontend/backend と設定例 | ネットワーク入門 NEW 2026-06-22 12:17:24
- TLS/SSLの仕組み|ハンドシェイク・暗号スイート・前方秘匿性・証明書検証をわかりやすく解説 NEW 2026-06-22 12:17:24
- CDN とは エッジキャッシュ・TTL・Cloudflare/CloudFront | ネットワーク入門 NEW 2026-06-22 12:17:24
- iptables/nftablesとは|テーブル・チェーン・ルール例・永続化をLinux視点で解説 NEW 2026-06-22 12:17:24
- ファイアウォールとは|パケットフィルタ・ステートフル・DMZ・次世代FW(L4/L7)を解説 NEW 2026-06-22 12:17:24
- 証明書と認証局(CA)とは|X.509・信頼チェーン・DV/OV/EV・失効(CRL/OCSP)を解説 NEW 2026-06-22 12:17:24
コメントを削除してもよろしいでしょうか?