このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。

【Linux】ファイルの圧縮:gzipコマンド

gzipコマンドの概要

 gzipは、ファイルを圧縮するためのGNUプロジェクトによって開発されたツールです。LZ77アルゴリズムを使用しており、圧縮率が中程度で、圧縮および解凍の速度が速いのが特徴です。圧縮されたファイルは拡張子「.gz」が付与されます。

コマンドの主なオプション

以下は、「gzip」コマンドの主なオプションの一覧です。

オプション説明
-d圧縮されたファイルを解凍します。gunzipコマンドと同等です。
-c標準出力に圧縮結果を出力します。元のファイルはそのまま残ります。
-rディレクトリを再帰的に圧縮します。指定されたディレクトリ内のすべてのファイルを圧縮します。
コマンドの主なオプション

コマンドの使用例と解説

ダミーファイルの作成

dd」コマンドを使ってダミーファイルを作成します。

 「dd」コマンドは、指定したサイズのファイルを作成するために使用できます。以下のコマンドを実行して、1GBのダミーファイルを作成します。

・「dd if=/dev/zero of=dummyfile bs=1M count=1024」コマンドを実行します。

user01@ubuntu-vm:~$ dd if=/dev/zero of=dummyfile bs=1M count=1024
1024+0 レコード入力
1024+0 レコード出力
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 1.48019 s, 725 MB/s

dd if=/dev/zero of=dummyfile1 bs=1M count=1024」コマンドの解説

 以下は、「dd if=/dev/zero of=dummyfile1 bs=1M count=1024」コマンドの各部分の意味を表にまとめたものです。

パラメータ意味
ddデータのコピーおよび変換を行うコマンド。
if=/dev/zero入力ファイル(input file)として /dev/zero を指定。/dev/zero は無限のゼロバイトストリームを生成する特殊ファイル。
of=dummyfile出力ファイル(output file)として dummyfile を指定。このファイルが新たに作成される。
bs=1Mブロックサイズ(block size)を1メガバイト(1M)に設定。各読み取りおよび書き込み操作のサイズを指定。
count=1024指定したブロックサイズ(1M)のブロックを1024個処理する。総計で1024メガバイト(1ギガバイト)のファイルを作成する。
ddコマンド

 このコマンドは、「/dev/zero」から 1メガバイト単位で 1,024ブロック(計1ギガバイト)のゼロバイトデータを読み取り、それを「dummyfile」という名前のファイルに書き込むことで、1ギガバイトのダミーファイルを作成しています。

ダミーファイルの確認

作成したダミーファイルを確認します。

・「ls -l」コマンドを実行します。

user01@ubuntu-vm:~$ ls -l
合計 2097200
-rw-rw-r-- 1 user01 user01 1073741824  5月 27 23:49 dummyfile
drwx------ 4 user01 user01       4096  5月  5 14:52 snap
drwxr-xr-x 2 user01 user01       4096  1月  1 10:51 ダウンロード
drwxr-xr-x 2 user01 user01       4096  1月  1 10:51 テンプレート
drwxr-xr-x 2 user01 user01       4096  1月  1 10:51 デスクトップ
drwxr-xr-x 2 user01 user01       4096  1月  1 10:51 ドキュメント
drwxr-xr-x 2 user01 user01       4096  1月  1 10:51 ビデオ
drwxr-xr-x 2 user01 user01       4096  1月  1 10:51 ピクチャ
drwxr-xr-x 2 user01 user01       4096  1月  1 10:51 ミュージック
drwxr-xr-x 2 user01 user01       4096  1月  1 10:51 公開

1.ファイルの圧縮

・「gzip dummyfile」コマンドを実行し、「ls -l」で圧縮された「dummyfile.gz」ファイルを確認します。

 このコマンドは、「dummyfile」を圧縮して「dummyfile.gz」というファイルを作成します。元の「dummyfile」は削除され、「dummyfile.gz」が生成されます。

user01@ubuntu-vm:~$ gzip dummyfile
user01@ubuntu-vm:~$ ls -l
合計 1049640
-rw-rw-r-- 1 user01 user01    1042079  5月 27 23:49 dummyfile.gz
drwx------ 4 user01 user01       4096  5月  5 14:52 snap
drwxr-xr-x 2 user01 user01       4096  1月  1 10:51 ダウンロード
drwxr-xr-x 2 user01 user01       4096  1月  1 10:51 テンプレート
drwxr-xr-x 2 user01 user01       4096  1月  1 10:51 デスクトップ
drwxr-xr-x 2 user01 user01       4096  1月  1 10:51 ドキュメント
drwxr-xr-x 2 user01 user01       4096  1月  1 10:51 ビデオ
drwxr-xr-x 2 user01 user01       4096  1月  1 10:51 ピクチャ
drwxr-xr-x 2 user01 user01       4096  1月  1 10:51 ミュージック
drwxr-xr-x 2 user01 user01       4096  1月  1 10:51 公開

 ファイルサイズサイズは、「1042079/1073741824」の約0.1%までに圧縮されていることが分ります。この圧縮率の高さは、元のファイルがダミーファイルであるため、このように高い圧縮率となっています。

2.ファイルの解凍

・「gzip -d dummyfile.gz」コマンドを実行し、「ls -l」コマンドで確認します。

 このコマンドは、「dummyfile.gz」を解凍して元の「dummyfile」を再現します。元の圧縮ファイル「dummyfile.gz」は削除され、「dummyfile」が生成されます。

user01@ubuntu-vm:~$ gzip -d dummyfile.gz
user01@ubuntu-vm:~$ ls -l
合計 1048616
-rw-rw-r-- 1 user01 user01 1073741824  5月 28 00:14 dummyfile
drwx------ 4 user01 user01       4096  5月  5 14:52 snap
drwxr-xr-x 2 user01 user01       4096  1月  1 10:51 ダウンロード
drwxr-xr-x 2 user01 user01       4096  1月  1 10:51 テンプレート
drwxr-xr-x 2 user01 user01       4096  1月  1 10:51 デスクトップ
drwxr-xr-x 2 user01 user01       4096  1月  1 10:51 ドキュメント
drwxr-xr-x 2 user01 user01       4096  1月  1 10:51 ビデオ
drwxr-xr-x 2 user01 user01       4096  1月  1 10:51 ピクチャ
drwxr-xr-x 2 user01 user01       4096  1月  1 10:51 ミュージック
drwxr-xr-x 2 user01 user01       4096  1月  1 10:51 公開

3.標準出力に圧縮結果を出力

・「gzip -c dummyfile > dummyfile.gz」コマンドを実行し、「ls -l」コマンドで確認します。

 このコマンドは、「dummyfile」を圧縮し、その結果を標準出力に出力します。元の「dummyfile」はそのまま残り、圧縮結果が「dummyfile.gz」として保存されます。

user01@ubuntu-vm:~$ gzip -c dummyfile > dummyfile.gz
user01@ubuntu-vm:~$ ls -l
合計 1049636
-rw-rw-r-- 1 user01 user01 1073741824  5月 28 00:14 dummyfile
-rw-rw-r-- 1 user01 user01    1042079  5月 28 00:30 dummyfile.gz
drwx------ 4 user01 user01       4096  5月  5 14:52 snap
drwxr-xr-x 2 user01 user01       4096  1月  1 10:51 ダウンロード
drwxr-xr-x 2 user01 user01       4096  1月  1 10:51 テンプレート
drwxr-xr-x 2 user01 user01       4096  1月  1 10:51 デスクトップ
drwxr-xr-x 2 user01 user01       4096  1月  1 10:51 ドキュメント
drwxr-xr-x 2 user01 user01       4096  1月  1 10:51 ビデオ
drwxr-xr-x 2 user01 user01       4096  1月  1 10:51 ピクチャ
drwxr-xr-x 2 user01 user01       4096  1月  1 10:51 ミュージック
drwxr-xr-x 2 user01 user01       4096  1月  1 10:51 公開

4.ディレクトリ内のすべてのファイルを再帰的に圧縮

ディレクトリとファイルを作成します。

以下のコマンドを実行します。

  • mkdir dir」コマンドを実行
  • date | tee dir/output1 dir/output2 dir/output3」コマンドを実行
  • ls dir」コマンドを実行
user01@ubuntu-vm:~$ mkdir dir
user01@ubuntu-vm:~$ date | tee dir/output1 dir/output2 dir/output3
2024年  5月 28日 火曜日 00:36:13 JST
user01@ubuntu-vm:~$ ls dir
output1  output2  output3

・「gzip -r dir」コマンドを実行し、「ls -l dir 」コマンドで確認します。

 このコマンドは、指定されたディレクトリ「dir」内のすべてのファイルを再帰的に圧縮します。ディレクトリ内の各ファイルが個別に圧縮されます。

user01@ubuntu-vm:~$ gzip -r dir
user01@ubuntu-vm:~$ ls -l dir
合計 12
-rw-rw-r-- 1 user01 user01 70  5月 28 00:36 output1.gz
-rw-rw-r-- 1 user01 user01 70  5月 28 00:36 output2.gz
-rw-rw-r-- 1 user01 user01 70  5月 28 00:36 output3.gz

5.作成したファイルとディレクトリの削除

この演習で作成したファイルとディレクトリを削除します。

・「rm -r dir dummyfile dummyfile.gz」コマンドを実行して、「ls」コマンドで削除されたかを確認します。

user01@ubuntu-vm:~$ rm -r dir dummyfile dummyfile.gz
user01@ubuntu-vm:~$ ls
snap          テンプレート  ドキュメント  ピクチャ      公開
ダウンロード  デスクトップ  ビデオ        ミュージック

まとめ

 「gzip」コマンドは、ファイルを圧縮するための基本的なツールであり、さまざまなオプションを使用して柔軟に操作することができます。主なオプションを理解することで、効率的にファイルの圧縮と管理を行うことが可能です。