Ubuntuのbzip2コマンド徹底解説:圧縮・解凍から元ファイル保持まで

概要

Linux環境において優れた圧縮性能を発揮する bzip2 コマンドについて、現場で役立つ実践的なオプションや利用パターンを分かりやすくまとめました。圧縮・展開時に元ファイルを消失させない安全策から、データ整合性の確認、圧縮効率の比較検証に至るまで、ターミナル操作を交えながらステップバイステップで解説します。関連ユーティリティである bunzip2 や bzcat の使い分けも自然と身につく構成になっています。

パッケージ確認と基本的な圧縮操作:元ファイルの保持(-k, -v)

作業環境に bzip2 が導入されているかを調べ、未インストールの場合はあらかじめパッケージマネージャー経由でセットアップを済ませておきます。

which bzip2 || (sudo apt-get update -qq && sudo apt-get install -y bzip2)

動作テストを行うため、まずは echo コマンドで検証用テキストファイル sample1.txt を用意しましょう。

echo ‘Hello Ubuntu Linux bzip2 compression test’ > sample1.txt

bzip2 はブロックソート法(Burrows-Wheeler変換)を採用しており、一般的なgzip等と比較して高い圧縮率を誇るファイル圧縮ツールです。
標準仕様では、圧縮処理が完了すると対象の元ファイルが自動的に消去され、拡張子 .bz2 を持つファイルへ置き換わります。詳細ログを表示する -v フラグを付与すると、処理の進捗状況や縮小率をリアルタイムに把握できます。
⚙️ [頻出主要オプション]

-d : 圧縮済みの .bz2 ファイルを展開(解凍)します。
-k : 圧縮や解凍の実行後も、元のファイルを削除せずストレージに残します。
-v : 処理対象のステータスや圧縮率などの詳細情報を標準出力に表示します。
-f : 同名の出力ファイルが既に存在していても、確認なしで強制的に上書きします。
-t : アーカイブのデータ構造に破損がないかを非破壊でテスト・検証します。
-c : ファイルへの直接書き込みを抑止し、圧縮・展開結果を標準出力(stdout)へ流します。
-1 〜 -9 : 圧縮時に確保するブロックサイズを指定し、処理速度と圧縮効率のバランスを調整します(デフォルト値は -9)。

bzip2 -v sample1.txt

続いて、元データを手元に残したまま圧縮を行う挙動を確かめるため、テスト用ファイル sample2.txt を新規作成します。

echo ‘Keep original file option test’ > sample2.txt

bzip2 -vk sample2.txt を実行します。詳細ログを出力させつつ、-k フラグを併用することで元データが削除されないよう保護します。
この指定を行うと、入力元の sample2.txt と生成された sample2.txt.bz2 が両方ともディレクトリ内に安全に保持されます。

bzip2 -vk sample2.txt

ls -l sample* を実行して各ファイルの状態をチェックします。-k なしで元データが置き換わった sample1.txt.bz2 と、オプションによって元ファイルが併存している sample2.txt / sample2.txt.bz2 の挙動の違いが明確に確認できます。

ls -l sample*

アーカイブの解凍と整合性検証(-d, -t, bunzip2)

アーカイブが壊れていないか、あるいは転送エラーがないかを事前に調べるには、bzip2 -tv sample1.txt.bz2 を実行します。
-t オプションを指定すれば、ディスク上に実ファイルを展開することなく内部チェックサムを照合して整合性のみを安全に診断可能です。

bzip2 -tv sample1.txt.bz2

検証が完了したら、bzip2 -dv sample1.txt.bz2 を走らせてアーカイブを展開します。
ここでは -k を付与していないため、展開作業が終わった段階で元の .bz2 アーカイブは自動消去され、復元されたプレーンテキスト sample1.txt だけが残ります。

bzip2 -dv sample1.txt.bz2

圧縮ファイルをバックアップとして残しながら解凍したい場合は、bunzip2 -vk sample2.txt.bz2 を使用します。
bunzip2 は内部的に bzip2 -d と等価な解凍専用コマンドであり、-k オプションを組み合わせることで sample2.txt.bz2 を維持したまま中身を取り出せます。

bunzip2 -vk sample2.txt.bz2

展開処理を終えた後、対象ファイル群の配置状況を ls -l sample* で一覧表示して確かめます。

ls -l sample*

展開不要の中身プレビューと標準出力パイプライン(-c, bzcat)

標準出力を活かしたファイル作成や、圧縮状態のまま中身を閲覧する手順を検証するため、sample3.txt を作成します。

echo ‘Check bzcat content without extraction’ > sample3.txt

bzip2 -c sample3.txt > sample3.txt.bz2 のように実行し、標準出力をリダイレクトして圧縮ファイルへ保存します。
-c を指定すると圧縮ストリームが直接端末(stdout)へ送出されるため、リダイレクト記号(>)と組み合わせることで、元ファイルを一切変更することなく新しいアーカイブを書き出せます。

bzip2 -c sample3.txt > sample3.txt.bz2

わざわざアーカイブを解凍することなく中身のテキストだけをサッと確認したいときは、bzcat sample3.txt.bz2 が便利です。
このコマンドは実質的に bzip2 -dc と同じ働きをし、余分なディスク領域を消費したり展開の手間を挟んだりすることなく、端末スクリーンへ直接テキストを出力できます。

bzcat sample3.txt.bz2

リダイレクト経由で作成された結果、元の sample3.txt と新設の sample3.txt.bz2 の双方が欠損なく整っているかを ls -l sample3* で確認しましょう。

ls -l sample3*

圧縮レベル(-1〜-9)のチューニングと容量の比較検証

圧縮レベルごとの処理傾向や出来上がりサイズの違いを比較するため、seq 1 50000 > large_data.txt で十分なボリュームを持つ数値テキストデータを生成します。

seq 1 50000 > large_data.txt

最速の処理を優先するレベル1設定で、bzip2 -1 -vk -c large_data.txt > large_fast.bz2 を実行してみましょう。
-1 モードではブロックサイズが100kに抑えられ、メモリ消費量を最小限にしつつ素早く圧縮を完了させたいユースケースに適しています。

bzip2 -1 -vk -c large_data.txt > large_fast.bz2

次に、最高効率を狙うレベル9設定で bzip2 -9 -vk -c large_data.txt > large_best.bz2 を実行します。
-9 は bzip2 のデフォルト動作でもあり、900kの大きなブロックを確保してCPUリソースを投入することで、可能な限り小さなファイルサイズへとまとめ上げます。

bzip2 -9 -vk -c large_data.txt > large_best.bz2

各レベルで仕上がったアーカイブの容量差を ls -lh large* で比較します。
元のデータサイズ283Kに対し、高速重視の -1 で生成した large_fast.bz2(56K)と、最大圧縮の -9 による large_best.bz2(67K)の数値を観察でき、データ特性に応じた圧縮挙動の違いが掴めます。

ls -lh large*

今回はUbuntuをベースに、bzip2 ファミリーの各種オプションの挙動や実践的な活用テクニックをハンズオン形式で紹介しました。
作業目的やインフラ環境のストレージ要件に合わせてこれらのスイッチを適切に組み合わせ、効率的なファイル管理に役立ててください。