LinuxでGzipを使用してファイルを圧縮および解凍する方法
公開: 2022-06-28 多くのファイル圧縮ユーティリティがありますが、すべてのLinuxディストリビューションで必ず見つかるのはgzip
です。 圧縮ツールを1つだけ使用する方法を学ぶ場合は、 gzip
にする必要があります。
関連:ファイル圧縮はどのように機能しますか?
アルゴリズムとツリー
gzip
データ圧縮ツールは1990年代初頭に作成され、現在でもすべてのLinuxディストリビューションで使用されています。 利用可能な圧縮ツールは他にもありますが、どのLinuxコンピューターで作業する必要があるかに関係なく、 gzip
を使用できます。 したがって、 gzip
の使用方法を知っている場合は、何もインストールしなくても問題ありません。
gzip
は、PKZIPで有名なPhil Katzによって発明され、特許を取得したDEFLATEアルゴリズムの実装です。 DEFLATEアルゴリズムは、すべてテーマのバリエーションで動作する以前の圧縮アルゴリズムを改善しました。 圧縮されるデータがスキャンされ、一意の文字列が識別されてバイナリツリーに追加されます。
一意の文字列には、ツリー内での位置に基づいて一意のIDトークンが割り当てられます。 トークンはデータ内の文字列を置き換えるために使用され、トークンは置き換えられたデータよりも小さいため、ファイルは圧縮されます。 元の文字列をトークンに置き換えると、データが再膨張して非圧縮状態に戻ります。
DEFLATEアルゴリズムは、最も頻繁に検出される文字列に最小のトークンが割り当てられ、最も頻繁に検出されない文字列に大きなトークンが割り当てられるというツイストを追加しました。 DEFLATEアルゴリズムには、以前の2つの圧縮方法、ハフマンコーディングとLZ77圧縮のアイデアも組み込まれています。
これを書いている時点では、DEFLATEアルゴリズムは30年近く前のものです。 30年前は、データストレージのコストが高く、伝送速度が遅かった。 データ圧縮は非常に重要でした。
今日のデータストレージははるかに安価であり、伝送速度は桁違いに高速です。 しかし、保存するデータは非常に多く、世界中の人々がクラウドストレージとストリーミングサービスにアクセスしています。 アップロードまたは送信する必要のあるものを縮小するだけの場合や、ローカルハードドライブのスペースを取り戻そうとしている場合でも、データ圧縮は依然として非常に重要です。
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
がアーカイブファイルを削除したことがわかります。 アーカイブファイルを保持するには、 -k
(保持)オプションと-d
(解凍)オプションを再度使用する必要があります。
lscalc-sheet。*
gzip -d calc-sheet.ods.gz
lscalc-sheet。*
今回、gzipはアーカイブファイルを削除しません。
関連:削除されたファイルを回復できる理由とそれを防ぐ方法
解凍と上書き
元のファイル(または同じファイルを持つ別のファイル)が存在するディレクトリでファイルを抽出しようとすると、 gzip
は、抽出を中止するか、既存のファイルを上書きするかを選択するように求めます。
gzip -d text-file.txt.gz
ディレクトリ内のファイルがアーカイブのファイルで上書きされることを事前に知っている場合は、-f(強制)オプションを使用します。
gzip -df text-file.txt.gz
ファイルが上書きされ、コマンドラインに静かに戻ります。
ディレクトリツリーの圧縮
-r
(再帰)オプションを使用すると、 gzip
はディレクトリツリー全体のファイルを圧縮します。 しかし、結果はあなたが期待するものではないかもしれません。
この例で使用するディレクトリツリーは次のとおりです。 各ディレクトリには、テキストファイルが含まれています。
ツリーレベル1
ディレクトリツリーでgzip
を使用して、何が起こるか見てみましょう。
gzip -r level1 /
ツリーレベル1
その結果、 gzip
はディレクトリ構造内のテキストファイルごとにアーカイブファイルを作成しました。 ディレクトリツリー全体のアーカイブは作成されませんでした。 実際、 gzip
はアーカイブに1つのファイルしか置くことができません。
ディレクトリツリーとそのすべてのファイルを含むアーカイブファイルを作成できますが、別のコマンドを実行する必要があります。 tar
プログラムは、多くのファイルのアーカイブを作成するために使用されますが、独自の圧縮ルーチンはありません。 しかし、 tar
で適切なオプションを使用することにより、 tar
にアーカイブファイルをgzip
経由でプッシュさせることができます。 このようにして、圧縮されたアーカイブファイルとマルチファイルまたはマルチディレクトリアーカイブを取得します。
tar -czvf level1.tar.gz level1
tar
オプションは次のとおりです。
- c :アーカイブを作成します。
- z :ファイルを
gzip
プッシュします。 - v :詳細モード。
tar
が何をしているのかをターミナルウィンドウに印刷します。 - f level1.tar.gz :アーカイブファイルに使用するファイル名。
これにより、ディレクトリツリー構造とディレクトリツリー内のすべてのファイルがアーカイブされます。
関連: Linuxでtarコマンドを使用してファイルを圧縮および抽出する方法
アーカイブに関する情報の取得
-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
を使用してファイルを解凍できます。
関連: Linux上の10個の最大のファイルまたはディレクトリを一覧表示します