バックアップファイルがディスクを圧迫している、サーバー間のファイル転送が遅い——そういった場面で真っ先に使えるのがgzip圧縮です。まず動くコマンドを示してから、実務で必要な応用パターンを解説します。
単一ファイルの圧縮と展開(基本)
単一ファイルを圧縮するには gzip、展開するには gunzip(または gzip -d)を使います。
# ファイルを圧縮(元ファイルは削除され .gz ファイルが生成される)
gzip backup.sql
# 圧縮後のファイルを確認
ls -lh backup.sql.gz
# .gz ファイルを展開(.gz が削除され元ファイルが復元される)
gunzip backup.sql.gz
# gzip -d でも同じ結果になる
gzip -d backup.sql.gz
注意:gzip はデフォルトで元ファイルを削除します。本番データを扱う場合は後述の -k オプションを必ず使ってください。
ディレクトリまるごと圧縮するには tar と組み合わせる
gzip 単体はディレクトリを直接圧縮できません。ディレクトリ全体をまとめて圧縮するには tar と組み合わせてtar.gzアーカイブを作成します。
# ディレクトリを tar.gz に圧縮
# -c: 作成 / -z: gzip圧縮 / -f: ファイル名指定 / -v: 進捗表示(任意)
tar -czf archive.tar.gz /path/to/directory/
# 作成したアーカイブの内容を確認(展開せずにリスト表示)
tar -tzf archive.tar.gz
# tar.gz を展開(カレントディレクトリに展開)
tar -xzf archive.tar.gz
# 展開先ディレクトリを指定する場合
tar -xzf archive.tar.gz -C /tmp/restore/
ある運用現場では、夜間バッチで /var/log/app/ を日付付きtar.gzに固めてオブジェクトストレージへ転送するスクリプトをsystemdタイマーに仕込み、ストレージ費用を大幅に削減しています。
元ファイルを残したまま圧縮する
本番ファイルを圧縮する際、元ファイルが消えてしまうのは危険です。-k(keep)オプションで元ファイルを保持したまま圧縮できます。
# 元ファイルを残したまま圧縮
gzip -k largefile.log
# 圧縮後に両方が存在することを確認
ls -lh largefile.log largefile.log.gz
圧縮後に元ファイルを手動で削除するフローにしておくと、「圧縮が正常に完了したか確認してから削除する」という手順が自然に組み込めます。スクリプト化する場合は gzip -t による整合性チェック(後述)を挟んでから削除するのが安全です。
圧縮率を確認・調整する
-v オプションで圧縮率を表示できます。また -1〜-9 で圧縮レベルを調整できます。数字が大きいほど圧縮率は上がりますが、CPU時間も増えます。
# 圧縮率を表示しながら圧縮
gzip -v backup.sql
# 出力例: backup.sql: 95.6% -- replaced with backup.sql.gz
# 最速(低圧縮率)— 大量ファイルをCPUを節約して処理したいとき
gzip -1 hugefile.csv
# 最高圧縮率(低速)— 保管コスト優先のとき
gzip -9 archive.tar
# 圧縮済みファイルの情報を表示(元サイズ・圧縮後サイズ・圧縮率)
gzip -l backup.sql.gz
テキストデータ(SQL、ログ、CSV)はデフォルトの -6 でも90%超の圧縮率が出ることが多いです。一方、すでに圧縮済みの画像や動画ファイルにgzipをかけてもほぼ縮みません。対象ファイルの種類を見て使い分けましょう。
圧縮形式の選び方 — gzip / xz / zstd
現代のLinux環境では複数の圧縮形式が利用できます。目的に応じて使い分けると効果的です。
# xz — 高圧縮率(カーネルソース等の長期保管向け)、低速
tar -cJf archive.tar.xz /path/to/dir/
tar -xJf archive.tar.xz
# zstd — 高速かつ高圧縮率(AlmaLinux 9 / Ubuntu 22.04+ で標準利用可能)
# systemdジャーナルの圧縮でも採用されている現代的な選択肢
tar --zstd -cf archive.tar.zst /path/to/dir/
tar --zstd -xf archive.tar.zst
# bzip2 — gzipより圧縮率が高いが遅い。古いtarballとの互換目的以外では出番が減っている
tar -cjf archive.tar.bz2 /path/to/dir/
日常的な運用バックアップには速度と互換性のバランスが良いgzip(tar.gz)が最も無難な選択です。長期保管でサイズを極限まで小さくしたい場合はxz、最新環境で速度と圧縮率を両立したい場合はzstdが有力な選択肢です。
展開せず中身を確認する・整合性チェック
圧縮ファイルを展開せずに内容を確認したり、ファイルが壊れていないかテストしたりする操作も覚えておくと便利です。
# .gz を展開せずにテキスト内容を表示
zcat backup.sql.gz | head -20
# ページャで閲覧
zless backup.sql.gz
# .gz ファイル内をgrep
zgrep "ERROR" /var/log/app/app.log.gz
# 整合性チェック(-t: テストモード)
gzip -t backup.sql.gz && echo "OK" || echo "CORRUPT"
# tar.gz の整合性チェック
tar -tzf archive.tar.gz > /dev/null && echo "OK" || echo "CORRUPT"
自動バックアップスクリプトには整合性チェックをセットにしておくのが鉄則です。「圧縮はできたが展開できなかった」というケースはディスクの空き不足や途中中断で起きやすく、チェックなしだと復元が必要なタイミングに初めて気づくことになります。
シェルスクリプトで gzip を使う場合は set -e(エラー時即終了)と -k(元ファイル保持)を組み合わせておくと、圧縮失敗時に元ファイルが失われるリスクを防げます。また gzip はシンボリックリンクを辿らない点も注意してください。リンク先ファイルを圧縮したい場合はリンク先パスを明示的に指定する必要があります。
「コマンドは打てる。次は”現場で通用する型”を最短で身につけたい」——そんなあなたへ。
ネットの断片的なTipsをコピペするだけでは、体系的な運用スキルはなかなか積み上がりません。リナックスマスター.JPの無料メルマガ「リナマガ」では、現場で実際に使うLinuxサーバー運用の考え方を、順を追って実務目線でお届けしています。いま登録された方には、安全なサーバー構築の「型」をまとめた『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼント中です。
>> 図解60P『Linux入門マニュアル』を無料で受け取る
(メルマガ登録は10秒・いつでも解除OK)
※ 「独学の時間がもったいない」「プロから現場の技術を最短で学びたい」という本気の方には、2日で実務レベルが身につく初心者向けハンズオンセミナーもご用意しています。
