【Linux】gzipコマンドとzipの違いとは?圧縮方法の種類/xz/bzip2

この記事からわかること

  • Linuxgzipとは?
  • 基本的なコマンド使い方圧縮 /解凍方法
  • ファイルディレクトリの圧縮
  • zipとの違い
  • bzip2xzについて

index

[open]

\ アプリをリリースしました /

みんなの誕生日

友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-

posted withアプリーチ

ファイルを圧縮をするメリット

ファイルをやり取りをするときなどに容量が大きいと読み込みに時間が掛かったり、メモリを食ってしまったりと何かと不都合が生じやすいです。

ファイルを圧縮して容量を小さくする事で取り扱いやすくし、円滑に作業を進められるようにと様々な圧縮形式が用いられています

Linuxでも以下のような圧縮形式を扱うことができます。

圧縮形式の種類

どの圧縮形式もファイル(またはディレクトリ)を圧縮して容量を小さくするという役割は変わりません。

gzipコマンドの使い方

gzip(GNU zip:ジージップ)はファイルのみを圧縮できる圧縮形式です。ディレクトリは圧縮できませんが比較的単純なアルゴリズムが用いられているので高速で圧縮することができます。

圧縮するにはgzipコマンドの引数に圧縮したいファイル名を指定するだけです。実行すると元ファイルは削除され圧縮された拡張子「.gz」付きのファイルが作成されます。

$ gzip sample.txt
$ ls 
sample.txt.gz

解凍するにはgunzipコマンドを使います。引数に解答したい圧縮ファイル名を渡します。圧縮時と同様に元圧縮ファイルは削除され、解凍されたファイルが作成されます。

$ gunzip sample.txt.gz
$ ls
sample.txt

元ファイルを残しておきたい場合gzip/gunzipコマンドのオプションに-cを付けます。引数のファイル名はを使って圧縮前と解凍後の両方を指定します。

$ gzip -c sample.txt > sample.gz
$ gunzip -c sample.gz > sample.txt

ディレクトリの圧縮には対応しておらずエラーになるので注意してください。

$ gzip image
gzip: image is a directory

gzip/gunzipのオプション一覧

gzipのオプション

オプション 役割
c (--stdout) 標準出力へ出力する
d (--decompress) 解凍
n (--no-name) 元の名前とタイムスタンプを保存または復元しない
N (--name) 元の名前とタイムスタンプを保存または復元する
r (--recursive) 再帰的にディレクトリ上で動作
S (--suffix=接尾辞) 圧縮ファイルに接尾辞を指定
1 (--fast) 速度重視の圧縮
9 (--best) 圧縮率重視の圧縮

gunzipのオプション

オプション 役割
c (--stdout) 元ファイルを残す
n (--no-name) 元の名前とタイムスタンプを保存または復元しない
N (--name) 元の名前とタイムスタンプを保存または復元する
r (--recursive) 再帰的にディレクトリ上で動作
S (--suffix=接尾辞) 圧縮ファイルに接尾辞を指定

ディレクトリをgzipで圧縮する方法

ファイルの圧縮はgzipコマンドでしたがディレクトリを圧縮するにはtarコマンドを使用したあとにgzipコマンドを実行しなければいけません。

tarコマンドは圧縮ではなくディレクトリ内のファイルやサブディレクトリを1つのファイルにまとめるコマンドです。まとめられたファイルのことをアーカイブ(書庫)と呼びます。tarコマンドでアーカイブを作成する時はオプション-cvfをつけます。

アーカイブを作成して圧縮

$ tar -cvf imgarchive.tar image // アーカイブを作成
$ gzip imgarchive.tar // 圧縮
$ ls
imgarchive.tar.gz

アーカイブを展開して解凍

アーカイブを展開するにはtarコマンドのオプションにxvfを指定します。tarコマンドのオプションは「-」を省略してもOKです。

$ tar xvf imgarchive.tar // 展開

tarコマンドの圧縮オプション

実はアーカイブを作成するtarコマンドにはgzip形式の圧縮を行えるオプションが備わっています。指定するだけでアーカイブ作成と圧縮までを一気に行うことも可能です。

$ tar -czvf imgarchive.tar image
$ ls
imgarchive.tar.gz
オプション 役割
c アーカイブを作成
x アーカイブを展開
v 結果を表示
f ファイルを指定
j bzip2形式(※)の圧縮
J xz形式(※)の圧縮
z gzip形式の圧縮

※:bzip2/xz形式の圧縮については後述しています。

zip形式の圧縮コマンドの使い方

親しみのあるzip形式の圧縮もコマンドラインから操作が可能です。zip形式の圧縮はファイルやディレクトリの区別がなく全て圧縮できるのがメリットです。圧縮時には何%圧縮されたかが表示されます。

$ zip sample.zip sample.txt
adding: sample.txt (stored 70%)

解凍するにはunzipコマンドを使用します。実行すると「replace sample.sh?」と聞かれるので上書きしたければyを入力します。

$ unzip sample.zip
Archive:  sample.zip
replace sample.sh? [y]es, [n]o, [A]ll, [N]one, [r]ename: y
extracting: sample.sh  

zip形式のコマンドでは圧縮時/解凍時は元ファイルも削除されず残ります

ディレクトリを圧縮する場合はオプション-rを使用します。

$ zip -r image.zip image
adding: image/ (stored 0%)
adding: image/slide-1.jpg (deflated 1%)
adding: image/slide-2.jpg (deflated 2%)
adding: image/slide-3.jpg (deflated 0%)
adding: image/slide-4.jpg (deflated 1%)

gzipとzipの違い

gzipとzipの違いは単に圧縮形式の違いで、細かい違いはありますが使用用途は同じです。しかしLinuxのディストリビューションによってはzipコマンドが入っていない場合もあるので注意してください。

gzip gip
コマンド gzip ファイル名 zip [オプション] 圧縮ファイル名 ファイル名
圧縮可能 ファイルのみ ファイル/ディレクトリ
実行後のファイル 削除される 残る
拡張子 .gz .zip

bzip2形式とxz形式のメリット

gzipやzip形式の圧縮方法に比べてより圧縮率が高いのがbzip2(ビージップツー)やxzです。しかし圧縮速度はgzip形式に軍配が上がるので完全に上位互換というわけでもないようです。

圧縮率

低  gzip < bzip2 < xz  高

速度

低   bzip2 < xz < gzip  高

両者のコマンドはgzipコマンドのコマンド名が入れ替わっただけで実行できます。

bzip2コマンド

$ bzip2 sample.txt                  
$ bunzip2 sample.txt.bz2
オプション 役割
c (--stdout) 標準出力へ出力する
z (--compress) 強制的に圧縮
d (--decompress) 強制的に解凍
f (--force) 既存の出力ファイルを上書き
s (--small) メモリの使用量を抑える
1 〜 9 ブロックサイズを指定
100k〜900k
--fast 上記-1の別名
--best 上記-9の別名

xzコマンド

  • 拡張子:「.xz」
  • 圧縮コマンド:$ xz ファイル名
  • 解凍コマンド:$ unxz ファイル名
$ xz sample.txt       
$ unxz sample.txt.xz
オプション 役割
c (--stdout) 標準出力へ出力する
-k (--keep) 圧縮/解凍元ファイルを残す
z (--compress) 強制的に圧縮
d (--decompress,
--uncompress)
強制的に解凍
l (--list) 情報を一覧表示
e (--extreme) CPU時間を使用して圧縮率を向上
0 〜 9 圧縮プリセット(デフォルトは6)

まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。

ご覧いただきありがとうございました。

searchbox

スポンサー

ProFile

ame

趣味:読書,プログラミング学習,サイト制作,ブログ

IT嫌いを克服するためにITパスを取得しようと勉強してからサイト制作が趣味に変わりました笑
今はCMSを使わずこのサイトを完全自作でサイト運営中〜

New Article

index