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

公開: 2022-06-28
赤い背景のLinux端末。
fatmawati achmad zaenuri / Shutterstock.com

多くのファイル圧縮ユーティリティがありますが、すべてのLinuxディストリビューションで必ず見つかるのはgzipです。 圧縮ツールを1つだけ使用する方法を学ぶ場合は、 gzipにする必要があります。

関連:ファイル圧縮はどのように機能しますか?

アルゴリズムとツリー

gzipデータ圧縮ツールは1990年代初頭に作成され、現在でもすべてのLinuxディストリビューションで使用されています。 利用可能な圧縮ツールは他にもありますが、どのLinuxコンピューターで作業する必要があるかに関係なく、 gzipを使用できます。 したがって、 gzipの使用方法を知っている場合は、何もインストールしなくても問題ありません。

gzipは、PKZIPで有名なPhil Katzによって発明され、特許を取得したDEFLATEアルゴリズムの実装です。 DEFLATEアルゴリズムは、すべてテーマのバリエーションで動作する以前の圧縮アルゴリズムを改善しました。 圧縮されるデータがスキャンされ、一意の文字列が識別されてバイナリツリーに追加されます。

一意の文字列には、ツリー内での位置に基づいて一意のIDトークンが割り当てられます。 トークンはデータ内の文字列を置き換えるために使用され、トークンは置き換えられたデータよりも小さいため、ファイルは圧縮されます。 元の文字列をトークンに置き換えると、データが再膨張して非圧縮状態に戻ります。

ベンチマーク:最高のファイル圧縮形式は何ですか?
関連するベンチマーク:最適なファイル圧縮形式は何ですか?

DEFLATEアルゴリズムは、最も頻繁に検出される文字列に最小のトークンが割り当てられ、最も頻繁に検出されない文字列に大きなトークンが割り当てられるというツイストを追加しました。 DEFLATEアルゴリズムには、以前の2つの圧縮方法、ハフマンコーディングとLZ77圧縮のアイデアも組み込まれています。

これを書いている時点では、DEFLATEアルゴリズムは30年近く前のものです。 30年前は、データストレージのコストが高く、伝送速度が遅かった。 データ圧縮は非常に重要でした。

Linuxでディスクスペースを解放する4つの方法
Linuxでディスクスペースを解放するための関連する4つの方法

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

gzipコマンド

ファイルが大きいほど、圧縮率が高くなります。 これは2つの理由によるものです。 1つは、大きなファイル全体で、同じバイトシーケンスが何度も繰り返されることです。 2番目の理由は、解凍を実行できるように、文字列とトークンのリストを圧縮ファイルに保存する必要があることです。 非常に小さなファイルでは、オーバーヘッドによって圧縮のメリットが失われる可能性があります。 ただし、ファイルがかなり小さい場合でも、サイズがいくらか縮小される可能性があります。

ファイルの圧縮

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

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

スプレッドシートの圧縮

元のファイルである「calc-sheet.ods」と呼ばれるスプレッドシートは11KBであり、圧縮ファイル(アーカイブファイルとも呼ばれます)は9.3KBです。 アーカイブファイルの名前は、「。gz」が追加された元のファイルの名前であることに注意してください。

lsコマンドの最初の使用は、特定のファイルであるスプレッドシートを対象としています。 lsの2番目の使用では、「calc-」で始まるすべてのファイルが検索されますが、圧縮ファイルのみが検索されます。 これは、デフォルトでは、 gzipがアーカイブファイルを作成し、元のファイルを削除するためです。

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

 gzip -k calc-sheet.ods
 ls-lhcalc-sheet。* 

ファイルを圧縮して元のファイルを保持する

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

ファイルの解凍

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

 lscalc-sheet。*
 gzip -d calc-sheet.ods.gz
 lscalc-sheet。* 

gzipでファイルを解凍する

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

 lscalc-sheet。*
 gzip -d calc-sheet.ods.gz
 lscalc-sheet。* 

ファイルを解凍してアーカイブファイルを保持する

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

関連:削除されたファイルを回復できる理由とそれを防ぐ方法

解凍と上書き

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

 gzip -d text-file.txt.gz 

アーカイブ内のファイルがすでにディレクトリに存在する場合、gzipからのプロンプトを上書きします

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

 gzip -df text-file.txt.gz 

既存のファイルを強制的に上書きする

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

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

-r (再帰)オプションを使用すると、 gzipはディレクトリツリー全体のファイルを圧縮します。 しかし、結果はあなたが期待するものではないかもしれません。

この例で使用するディレクトリツリーは次のとおりです。 各ディレクトリには、テキストファイルが含まれています。

 ツリーレベル1 

ディレクトリツリー構造をテストする

ディレクトリツリーでgzipを使用して、何が起こるか見てみましょう。

 gzip -r level1 /
 ツリーレベル1 

gzipを実行した後のディレクトリ構造

その結果、 gzipはディレクトリ構造内のテキストファイルごとにアーカイブファイルを作成しました。 ディレクトリツリー全体のアーカイブは作成されませんでした。 実際、 gzipはアーカイブに1つのファイルしか置くことができません。

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

 tar -czvf level1.tar.gz level1

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

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

ディレクトリツリーを通過するtarからの出力

これにより、ディレクトリツリー構造とディレクトリツリー内のすべてのファイルがアーカイブされます。

関連: Linuxでtarコマンドを使用してファイルを圧縮および抽出する方法

アーカイブに関する情報の取得

-l (リスト)オプションは、アーカイブファイルに関する情報を提供します。 アーカイブ内のファイルの圧縮サイズと非圧縮サイズ、圧縮率、およびファイルの名前が表示されます。

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

-l listオプションを使用して、アーカイブの圧縮統計を表示します

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

 gzip -t level1.tar.gz 

-tオプションを使用したアーカイブのテスト

すべてが順調であれば、コマンドラインに静かに戻ります。 良いニュースはありません。

アーカイブが破損しているか、アーカイブでない場合は、そのことについて通知されます。

 gzip -t not-an-archive.gz 

-tオプションを使用して、アーカイブではないファイルをテストする

速度と圧縮

アーカイブの作成速度または圧縮の程度を優先するように選択できます。 これを行うには、オプションとして-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 

速度と圧縮の優先順位が異なるgzipを使用する

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

興味深いことに、レベル9の圧縮とレベル6の圧縮の使用に違いはありません。 どのファイルからも非常に多くの圧縮を引き出すことができます。この場合、レベル6の圧縮でその制限に達しました。 9までクランキングしても、ファイルサイズはそれ以上減少しませんでした。 ファイルが大きいほど、レベル6とレベル9の違いがより顕著になります。

圧縮され、保護されていない

圧縮を暗号化または任意の形式の保護と間違えないでください。 ファイルを圧縮しても、セキュリティやプライバシーの強化は得られません。 ファイルにアクセスできる人は誰でも、 gzipを使用してファイルを解凍できます。

関連: Linux上の10個の最大のファイルまたはディレクトリを一覧表示します