ファイル圧縮
ユーティリティは数多くありますが、すべての Linux ディストリビューションで確実に見つかるのは
gzip
です。 1 つの圧縮ツールのみの使用方法を学習する場合は、
gzip
使用する必要があります。
アルゴリズムとツリー
gzip
データ圧縮ツールは 1990 年代初頭に作成され、今でもすべての Linux ディストリビューションに含まれています。利用可能な圧縮ツールは他にもありますが、どの Linux コンピュータで作業する必要があるとしても、
gzip
は見つかります。したがって、
gzip
使用方法を知っていれば、何もインストールすることなくそのまま使用できます。
gzip
、
PKZIP
で有名な
Phil Katz
によって発明され
、特許を取得した
DEFLATE アルゴリズムの実装です。 DEFLATE アルゴリズムは、すべてテーマのバリエーションで動作する以前の圧縮アルゴリズムを改良しました。圧縮されるデータがスキャンされ、一意の文字列が識別されてバイナリ ツリーに追加されます。
一意の文字列には、ツリー内の位置に基づいて一意の ID トークンが割り当てられます。トークンはデータ内の文字列を置換するために使用されます。トークンは置換されるデータよりも小さいため、ファイルは圧縮されます。元の文字列をトークンに置き換えると、データが非圧縮状態に再インフレートされます。
DEFLATE アルゴリズムには、最も頻繁に遭遇する文字列には最小のトークンが割り当てられ、最も頻繁に遭遇しない文字列にはより大きなトークンが割り当てられるという工夫が加えられました。 DEFLATE アルゴリズムには、 ハフマン コーディング と LZ77 圧縮 という 2 つの以前の圧縮方法のアイデアも組み込まれています。
この記事の執筆時点では、DEFLATE アルゴリズムは 30 年近く前のものです。 30 年前、データ ストレージのコストは高く、伝送速度も遅かったです。データ圧縮は非常に重要でした。
現在、データ ストレージははるかに安価になり、伝送速度は桁違いに速くなります。しかし、保存すべきデータはさらに多く、世界中の人々が クラウド ストレージ や ストリーミング サービス にアクセスしています。アップロードまたは送信する必要があるものを圧縮することだけを行っている場合でも、または ローカル ハード ドライブ上のスペースを取り戻そう としている場合でも、データ圧縮は依然として非常に重要です。
gzipコマンド
ファイルが大きいほど、圧縮率は高くなります。これには 2 つの理由があります。 1 つは、大きなファイル全体に同一のバイト シーケンスが多数繰り返されることです。 2 番目の理由は、解凍を行うために、文字列とトークンのリストを圧縮ファイルに保存する必要があることです。ファイルが非常に小さい場合、そのオーバーヘッドによって圧縮の利点が台無しになる可能性があります。ただし、ファイルがかなり小さい場合でも、サイズはある程度縮小される可能性があります。
ファイルの圧縮
ファイルを圧縮 (または zip) する
には、ファイルの名前を
gzip
コマンドに渡すだけです。ファイルの元のサイズを確認し、圧縮してから、圧縮ファイルのサイズを確認します。
ls -lh 計算シート.ods
gzip 計算シート.ods
ls -lh cal-*
元のファイルである「calc-sheet.ods」というスプレッドシートは 11 KB、圧縮ファイル (アーカイブ ファイルとも呼ばれます) は 9.3 KB です。アーカイブ ファイルの名前は、元のファイルの名前に「.gz」が追加されたものであることに注意してください。
ls
コマンドの最初の使用では、特定のファイルであるスプレッドシートがターゲットになります。
ls
の 2 番目の使用では、「calc-」で始まるすべてのファイルが検索されますが、圧縮ファイルのみが検索されます。これは、デフォルトで
gzip
アーカイブ ファイルを作成し、元のファイルを削除するためです。
それは問題ではありません。元のファイルが必要な場合は、アーカイブ ファイルから取得できます。ただし、元のファイルを保持したい場合は、
-k
(保持) オプションを使用できます。
gzip -k calc-sheet.ods
ls -lh 計算シート.*
今回は、元の ODS ファイルが保持されます。
ファイルの解凍
GZ アーカイブ ファイルを解凍 (または解凍) するには、
-d
(解凍) オプションを使用します。これにより、圧縮ファイルがアーカイブから抽出され、元のファイルと区別できないように解凍されます。
ls 計算シート.*
gzip -d calc-sheet.ods.gz
ls 計算シート.*
今回は、
gzip
元のファイルを解凍した後、アーカイブ ファイルを削除したことがわかります。アーカイブ ファイルを保持するには、
-k
(保持) オプションと
-d
(解凍) オプションを再度使用する必要があります。
ls 計算シート.*
gzip -d calc-sheet.ods.gz
ls 計算シート.*
今回は、gzip はアーカイブ ファイル を削除 しません。
解凍と上書き
元のファイルが存在するディレクトリ、または同じファイルを含む別のファイルが存在するディレクトリにファイルを抽出しようとすると、
gzip
抽出を中止するか既存のファイルを上書きするかを選択するよう求めます。
gzip -d テキストファイル.txt.gz
ディレクトリ内のファイルをアーカイブのファイルで上書きしてもよいことが事前にわかっている場合は、-f (強制) オプションを使用します。
gzip -df テキストファイル.txt.gz
ファイルは上書きされ、何も言わずにコマンド ラインに戻ります。
ディレクトリツリーの圧縮
-r
(再帰) オプションを使用すると、
gzip
ディレクトリ ツリー全体のファイルを圧縮します。しかし、結果は期待どおりではないかもしれません。
この例で使用するディレクトリ ツリーは次のとおりです。各ディレクトリにはテキスト ファイルが含まれています。
ツリーレベル1
ディレクトリ ツリーで
gzip
使用して、何が起こるかを見てみましょう。
gzip -r レベル1/
ツリーレベル1
その結果、
gzip
ディレクトリ構造内のテキスト ファイルごとにアーカイブ ファイルを作成します。ディレクトリ ツリー全体のアーカイブは作成されませんでした。実際、
gzip
アーカイブに 1 つのファイルしか配置できません。
ディレクトリ ツリーとそのすべてのファイルを含むアーカイブ ファイルを作成できますが、別のコマンドを実行する必要があります。
tar
プログラムは
多くのファイルのアーカイブを作成するために使用されますが、独自の圧縮ルーチンはありません。ただし、
tar
で適切なオプションを使用すると、
tar
gzip
を介してアーカイブ ファイルをプッシュできるようになります。このようにして、圧縮されたアーカイブ ファイルと複数ファイルまたは複数ディレクトリのアーカイブを取得します。
tar -czvf レベル1.tar.gz レベル1
tar
オプションは次のとおりです。
- c : アーカイブを作成します。
-
z
: ファイルを
gzip経由でプッシュします。 -
v
: 詳細モード。
tarが何をしているのかをターミナル ウィンドウに表示します。 - f level1.tar.gz : アーカイブ ファイルに使用するファイル名。
これにより、ディレクトリ ツリー構造とディレクトリ ツリー内のすべてのファイルがアーカイブされます。
アーカイブに関する情報の取得
-l
(リスト) オプションは、アーカイブ ファイルに関する情報を提供します。アーカイブ内のファイルの圧縮サイズと非圧縮サイズ、圧縮率、ファイル名が表示されます。
gzip -l leve1.tar.gz
gzip -l テキストファイル.txt.gz
-t
(テスト) オプションを使用して、アーカイブ ファイルの整合性をチェックできます。
gzip -t level1.tar.gz
すべて問題がなければ、何も言わずにコマンド ラインに戻ります。ニュースがないのは良いニュースです。
アーカイブが 破損して いるか、アーカイブではない場合は、それについて通知されます。
gzip -t not-an-archive.gz
速度と圧縮
アーカイブの作成速度または圧縮の程度を優先することを選択できます。これを行うには、オプションとして
-1
から先頭
-9
までの数値を指定します。
-1
オプションは圧縮を犠牲にして最高の速度を提供し、
-9
オプションは速度を犠牲にして最高の圧縮を提供します。
これらのオプションのいずれかを指定しない限り、gzip は
-6
を使用します。
gzip -1 計算シート.ods
ls -lh 計算シート.ods.gz
gzip -9 calc-sheet.ods
ls -lh 計算シート.ods.gz
gzip -6 calc-sheet.ods
ls -lh 計算シート.ods.gz
これほど小さいファイルでは、実行速度に大きな違いは見られませんでしたが、圧縮にはわずかな違いがありました。
興味深いことに、レベル 9 圧縮の使用とレベル 6 圧縮の使用に違いはありません。特定のファイルから圧縮できる圧縮率には限界があり、この場合、レベル 6 の圧縮でその限界に達しました。 9 まで上げても、ファイルサイズはそれ以上減少しませんでした。 ファイルが大きくなる と、レベル 6 とレベル 9 の違いがより顕著になります。
圧縮されているが保護されていない
圧縮を
暗号化
やその他の形式の保護と混同しないでください。ファイルを圧縮しても、セキュリティやプライバシーは強化されません。ファイルにアクセスできる人は誰でも、
gzip
を使用してファイルを解凍できます。





