ウェブサイト検索

LinuxでGzipを使用してファイルを圧縮および解凍する方法


多くのファイル圧縮ユーティリティがありますが、すべてのLinuxディストリビューションで必ず見つけられるのはgzipです。圧縮ツールを一つだけ学ぶとしたら、それはgzipであるべきです。

アルゴリズムと木

gzip データ圧縮ツールは1990年代初頭に作成され、現在でもすべてのLinuxディストリビューションで見つかります。他にも圧縮ツールはありますが、どのLinuxコンピュータで作業する必要があっても、必ず gzip がインストールされています。したがって、gzip の使い方を知っていれば、何もインストールする必要なく作業を進めることができます。

gzipは、PKZIPで有名なフィル・カッツによって発明され、特許が取得されたDEFLATEアルゴリズムの実装です。DEFLATEアルゴリズムは、すべてがテーマの変種で動作していた以前の圧縮アルゴリズムを改善しました。圧縮されるデータがスキャンされ、ユニークな文字列が特定されてバイナリツリーに追加されます。

ユニークな文字列は、ツリー内の位置によってユニークなIDトークンが割り当てられます。これらのトークンはデータ内の文字列を置き換えるために使用され、トークンは置き換えられるデータよりも小さいため、ファイルが圧縮されます。トークンを元の文字列と置き換えることで、データは圧縮前の状態に戻ります。

DEFLATEアルゴリズムは、最も頻繁に遭遇する文字列に最小のトークンを割り当て、最も頻繁に遭遇しない文字列により大きなトークンを割り当てるという工夫を加えました。また、DEFLATEアルゴリズムは、2つの以前の圧縮手法であるハフマン符号化とLZ77圧縮からのアイデアも取り入れています。

執筆時点で、DEFLATEアルゴリズムはほぼ30年の歴史があります。30年前はデータストレージのコストが高く、伝送速度も遅かったため、データ圧縮は非常に重要でした。

データストレージは今日、はるかに安価であり、転送速度も桁違いに速くなっています。しかし、保存するデータがこれまで以上に多く、世界中の人々がクラウドストレージやストリーミングサービスにアクセスしています。データ圧縮は依然として非常に重要です。たとえアップロードや転送する必要のあるものを縮小するだけであっても、またはローカルハードドライブのスペースを取り戻そうとしているとしても。

gzipコマンド

ファイルが大きいほど、圧縮の効果が良くなります。これには二つの理由があります。一つ目は、大きなファイルには重複した同一のバイトのシーケンスが多く存在するからです。二つ目は、圧縮ファイル内に文字列やトークンのリストを保存する必要があり、それが解凍を可能にするためです。非常に小さなファイルの場合、そのオーバーヘッドが圧縮の利点を打ち消す可能性があります。しかし、かなり小さなファイルでも、サイズが減少する可能性はあります。

ファイルを圧縮する

ファイルを圧縮(またはzip)するには、ファイルの名前をgzipコマンドに渡すだけです。元のファイルサイズを確認し、圧縮してから、圧縮ファイルのサイズを確認します。

ls -lh calc-sheet.ods
gzip calc-sheet.ods
ls -lh cal-*

元のファイル、"calc-sheet.ods"というスプレッドシートは11KBで、圧縮ファイル---アーカイブファイルとも呼ばれる---は9.3KBです。アーカイブファイルの名前は元のファイルの名前に".gz"が追加されたものです。

最初のlsコマンドの使用は、特定のファイルであるスプレッドシートを対象としています。2回目のlsの使用は「calc-」で始まるすべてのファイルを探しますが、圧縮ファイルしか見つかりません。それは、デフォルトではgzipがアーカイブファイルを作成し、元のファイルを削除するからです。

それは問題ではありません。元のファイルが必要な場合は、アーカイブファイルから取得できます。しかし、元のファイルを保持したい場合は、-k(保持)オプションを使用できます。

gzip -k calc-sheet.ods
ls -lh calc-sheet.*

今回は元のODSファイルが保持されます。

ファイルを解凍する

GZアーカイブファイルを解凍するには、-d(解凍)オプションを使用します。これにより、アーカイブから圧縮されたファイルが抽出され、元のファイルと区別がつかない状態に解凍されます。

ls calc-sheet.*
gzip -d calc-sheet.ods.gz
ls calc-sheet.*

今回は、gzipが元のファイルを抽出した後にアーカイブファイルを削除したことがわかります。アーカイブファイルを保持するには、-k(保持)オプションと、-d(解凍)オプションを再度使用する必要があります。

ls calc-sheet.*
gzip -d calc-sheet.ods.gz
ls calc-sheet.*

今回は、gzipがアーカイブファイルを削除しません。

解凍と上書き

元のファイル、または同じ名前の別のファイルが存在するディレクトリでファイルを抽出しようとすると、gzip は抽出を中止するか、既存のファイルを上書きするかを選択するように促します。

gzip -d text-file.txt.gz

事前にアーカイブのファイルでディレクトリ内のファイルが上書きされることに同意している場合は、-f(強制)オプションを使用してください。

gzip -df text-file.txt.gz

ファイルは上書きされ、静かにコマンドラインに戻されます。

ディレクトリツリーの圧縮

-r(再帰的)オプションは、gzipがディレクトリツリー内のファイルをすべて圧縮することを引き起こします。しかし、その結果は予想とは異なるかもしれません。

こちらが今回の例で使用するディレクトリツリーです。各ディレクトリにはテキストファイルが含まれています。

tree level1

ディレクトリツリーにgzipを使って、どんなことが起こるか見てみましょう。

gzip -r level1/
tree level1

結果は、gzipがディレクトリ構造内の各テキストファイルのためにアーカイブファイルを作成したということです。全体のディレクトリツリーのアーカイブは作成されませんでした。実際、gzipはアーカイブに単一のファイルしか入れることができません。

ディレクトリツリーとそのすべてのファイルを含むアーカイブファイルを作成できますが、別のコマンドを利用する必要があります。tarプログラムは多くのファイルのアーカイブを作成するために使用されますが、独自の圧縮ルーチンはありません。しかし、tarに適切なオプションを使用することで、tarにアーカイブファイルをgzipを通過させることができます。これにより、圧縮されたアーカイブファイルと、複数のファイルまたは複数のディレクトリのアーカイブを得ることができます。

tar -czvf level1.tar.gz level1

tar オプションは次のとおりです:

  • c: アーカイブを作成する。
  • z: gzipでファイルをプッシュします。
  • v: 詳細モード。tarが何をしているかをターミナルウィンドウに表示します。
  • f level1.tar.gz: アーカイブファイルに使用するファイル名です。

これはディレクトリツリー構造とその中のすべてのファイルをアーカイブします。

アーカイブに関する情報を取得すること

-l(リスト)オプションは、アーカイブファイルに関するいくつかの情報を提供します。アーカイブ内のファイルの圧縮サイズと非圧縮サイズ、圧縮比、ファイル名を表示します。

gzip -l leve1.tar.gz
gzip -l text-file.txt.gz

アーカイブファイルの整合性は、-t(テスト)オプションを使用して確認できます。

gzip -t level1.tar.gz

すべてが問題なければ、あなたは静かにコマンドラインに戻されます。無事であればそれが最良の知らせです。

アーカイブが壊れている場合やアーカイブでない場合は、それについて通知されます。

gzip -t not-an-archive.gz

速度と圧縮

アーカイブの作成速度を優先するか、圧縮率を優先するか選ぶことができます。これは、オプションとして-1から最高の-9の数値を指定することで行います。-1のオプションは圧縮を犠牲にして最も速い速度を提供し、-9は速度を犠牲にして最も高い圧縮を提供します。

これらのオプションのいずれかを指定しない限り、gzipは-6を使用します。

gzip -1 calc-sheet.ods
ls -lh calc-sheet.ods.gz
gzip -9 calc-sheet.ods
ls -lh calc-sheet.ods.gz
gzip -6 calc-sheet.ods
ls -lh calc-sheet.ods.gz

このように小さなファイルでは、実行速度に大きな違いは見られませんでしたが、圧縮には若干の違いがありました。

興味深いことに、レベル9の圧縮とレベル6の圧縮には違いがありません。特定のファイルから引き出せる圧縮の限界があり、この場合、その限界はレベル6の圧縮で達成されました。レベルを9に上げてもファイルサイズのさらなる減少はありませんでした。より大きなファイルでは、レベル6とレベル9の違いがより顕著になるでしょう。

圧縮されており、保護されていません

圧縮を暗号化やその他の保護手段と勘違いしないでください。ファイルを圧縮しても、セキュリティやプライバシーが向上するわけではありません。あなたのファイルにアクセスできる人は誰でも、gzipを使って解凍することができます。

関連記事: