ファイルの圧縮・解凍 / アーカイブの作成・展開

ファイルの圧縮・解凍 / アーカイブの作成・展開

業務で利用することの多い、ファイルの圧縮と解凍について学びます。

ファイルの圧縮とは?

  • データを元のサイズよりも小さくすること。
    データ量の大きなファイルを小さくすることでディスク容量の消費を減らしたり、
    通信にかかる時間やネットワークへの負荷を抑えられる。

ファイルの解凍とは?

  • 圧縮されたファイルを、元の状態に戻すこと。展開、伸張、復元とも呼ばれる。

さまざまな形式の圧縮方法

圧縮・解凍コマンドの種類

gzipコマンドで、ファイルを圧縮する

gzip  [オプション] [ファイルのパス]...

gzipは複数のファイルが指定できますが、指定されたファイルごとに圧縮ファイルを作成します。
gzipで圧縮されたファイル名は、自動的に拡張子「.gz」が付けられます。
gzipコマンドを使って圧縮すると、元のファイルは削除されます。(残す方法は後で紹介)

gzipコマンドで、ファイルを圧縮する

実践①:圧縮するファイルを準備する

/etc/servicesをカレントディレクトリにコピーし、圧縮してみましょう 。

[user01@localhost ~]$ cp /etc/services ~
[user01@localhost ~]$ ls -l 
-rw-r--r-- 1 user01 user01 670293  2月  5 11:48 services

実践②:ファイルを圧縮する

では、圧縮してみましょう

[user01@localhost ~]$ gzip services
[user01@localhost ~]$ ls -l 
-rw-r--r-- 1 user01 user01 136088  2月  5 11:48 services.gz

実践③:複数のファイルをまとめて圧縮する

複数のファイルを指定することも可能。ワイルドカード「*」も使えます。

[user01@localhost ~]$ gzip *.txt

上記のように指定する事で、ファイル名の最後に「.txt」と付くファイル名に対して、
gzipコマンドを実行することが出来ます。

gunzip  圧縮ファイルのパス

実践①:ファイルを解凍する

圧縮されたファイルを解凍するには、gunzipコマンドを使います

[user01@localhost ~]$ gunzip services.gz 
[user01@localhost ~]$ ls -l 
-rw-r--r-- 1 user01 user01 670293  2月  5 11:48 services

圧縮 (解凍)前のファイルを残す方法

ファイルを圧縮、または解凍する際に、圧縮前、または解凍前のファイルを残したいことがあります。
この場合、圧縮先や、解凍先の別のディレクトリを指定することで実現します。

圧縮前のファイルを残す方法

gzip -c 圧縮したいファイル > 圧縮先のファイルのパス

解凍前のファイルを残す方法

gunzip –c 解凍したいファイル > 解凍先のファイルのパス

実践②:圧縮、解凍前のファイルを残して圧縮、解凍する

[user01@localhost ~]$ mkdir /tmp/user01
[user01@localhost ~]$ gzip -c services > /tmp/user01/services.gz
[user01@localhost ~]$ ls -l /tmp/user01
-rw-rw-r--  1 user01 user01 136088  2月 5 11:53 services.gz
[user01@localhost ~]$ ls -l 
-rw-r--r--  1 user01 user01 670293  2月 5 11:48 services
[user01@localhost ~]$ gunzip -c /tmp/user01/services.gz > /tmp/user01/services
[user01@localhost ~]$ ls -l /tmp/user01
合計 1452
-rw-rw-r--  1 user01 user01 670293  2月 5 11:55 services
-rw-rw-r--  1 user01 user01 136088  2月 5 11:53 services.gz

アーカイブファイルとは?

複数のファイルやディレクトリを一つにまとめることをアーカイブと呼び、
一つにまとめられたファイルを、アーカイブファイルと呼びます。
ファイルの長期保存やバックアップ、ファイルの転送などに利用できます。

tarコマンドでアーカイブファイルを扱う

アーカイブファイルをLINUXで扱うためには、tar コマンドを使用します。
このコマンドは、アーカイブファイルの作成や展開だけでなく、ファイルの圧縮などの処理を、
オプションで指定できます。

書式

tar [オプション] 対象のファイルのパス

主な特徴

  • オプションに「-」を付けてもつけなくてもよい
  • アーカイブファイルの作成時、元のファイルが削除されない

オプションの一覧

アーカイブファイルを作成し、複数のファイルを1つにまとめる

書式

tar cvf アーカイブファイルのパス アーカイブするディレクトリ

上記に示されたオプションは、下記のとおり
c:アーカイブファイルの作成
v:処理内容の表示
f:アーカイブファイル名の指定

事前準備①:アーカイブの対象となるディレクトリ(arc1)を作成

[user01@localhost ~]$ mkdir arc1

事前準備②:作成したディレクトリに、アーカイブの対象となるファイルを用意する

[user01@localhost ~]$ cp /etc/hosts /etc/services /etc/fstab arc1

事前準備③:ディレクトリにファイルが格納されているか確認する

[user01@localhost ~]$ ls -l arc1
合計 664
-rw-r--r-- 1 user01 user01    465  2月  6 05:11 fstab
-rw-r--r-- 1 user01 user01    158  2月  6 05:11 hosts
-rw-r--r-- 1 user01 user01 670293  2月  6 05:11 services

実践①:アーカイブ(arc1.tar)を作成する

※tarコマンドで作成したアーカイブファイル名の末尾は「.tar」が一般的です。

[user01@localhost ~]$ tar cvf arc1.tar arc1
arc1/
arc1/hosts
arc1/services
arc1/fstab

実践②:アーカイブファイルの作成を確認する

アーカイブ元のディレクトリと、アーカイブファイルの二つがあることがわかります。

[user01@localhost ~]$ ls -l
drwxrwxr-x 2 user01 user01     48  2月  6 05:11 arc1
-rw-rw-r-- 1 user01 user01 675840  2月  6 05:47 arc1.tar 

アーカイブに含まれたファイルの一覧を確認する

書式

tar -tvf アーカイブファイルのパス

実践:アーカイブに含まれたファイルの一覧を確認する

先ほど作成したアーカイブの中に含まれているファイルの一覧を表示します。

[user01@localhost ~]$ tar -tvf arc1.tar
drwxrwxr-x user01/user01     0 2020-03-19 13:34 arc1/
-rw-r--r-- user01/user01   158 2020-03-19 13:34 arc1/hosts
-rw-r--r-- user01/user01 670293 2020-03-19 13:34 arc1/services
-rw-r--r-- user01/user01    465 2020-03-19 13:34 arc1/fstab

アーカイブファイルの展開

書式

アーカイブを展開(アーカイブ処理したモノを元に戻す作業)するには、xオプションを使う

tar xvf アーカイブファイル名 [-C 展開先ディレクトリのパス]

実践:アーカイブを展開する

arc1.tarファイルを展開

[user01@localhost ~]$ tar xvf arc1.tar 
arc1/
arc1/hosts
arc1/services
arc1/fstab

複数ファイルを圧縮する(アーカイブ+圧縮)

続いて、複数のファイルをまとめて、圧縮する方法を確認していきましょう。
複数のファイルを圧縮するためには、

  1. アーカイブによって、複数のファイルを1つにまとめ、
  2. 1つにまとまったアーカイブファイルを圧縮することで実現します。

LINUXで、複数ファイルを圧縮する二つの方法

LINUXで複数ファイルの圧縮を実現ためには、tarコマンドを使った次の2つの方法があります。

  • tarコマンドで、アーカイブファイルに変換した後、圧縮する
  • tarコマンドで、アーカイブファイルの変換と圧縮を、同時に行う

書式①:アーカイブファイルに変換した後、圧縮する場合

① tar cvf アーカイブファイルのパス アーカイブするディレクトリ
② gzip -c アーカイブファイルのパス 

書式②:アーカイブファイルの変換と圧縮を、同時に行う場合

tar czvf アーカイブファイルのパス アーカイブするディレクトリ

1) 圧縮/アーカイブの対象のディレクトリ(arc2)、ファイルを用意する

[user01@localhost ~]$ mkdir arc2
[user01@localhost ~]$ cp /etc/hosts /etc/services /etc/fstab arc2
[user01@localhost ~]$ ls -l arc2
合計 664
-rw-r--r-- 1 user01 user01    465  2月  6 14:11 fstab
-rw-r--r-- 1 user01 user01    158  2月  6 14:11 hosts
-rw-r--r-- 1 user01 user01 670293  2月  6 14:11 services

2) アーカイブファイル(arc2.tar)を作成する

[user01@localhost ~]$ tar cvf arc2.tar arc2
arc2/
arc2/hosts
arc2/services
arc2/fstab
[user01@localhost ~]$ ls -l 
drwxrwxr-x 2 user01 user01     48  2月 6 14:11 arc2
-rw-rw-r-- 1 user01 user01 675840  2月 6 14:19 arc2.tar

3) arc2.tarファイルを圧縮

[user01@localhost ~]$ gzip arc2.tar
[user01@localhost ~]$ ls -l
(省略)
drwxrwxr-x 2 user01 user01     48  2月  6 14:11 arc2
-rw-rw-r-- 1 user01 user01 136642  2月  6 14:19 arc2.tar.gz

実践②: アーカイブファイルの変換と圧縮を、同時に行う場合

今度は、cオプション(アーカイブ作成)とzオプション(gzip圧縮)を指定することで、tarコマンドだけで
アーカイブと圧縮を実現します。

[user01@localhost ~]$ tar czvf arc3.tar.gz arc2
[user01@localhost ~]$ ls -l 
-rw-rw-r-- 1 user01 user01 136630  2月  6 09:12 arc3.tar.gz

圧縮されたアーカイブファイルの解凍・展開

書式①:カレントディレクトリに解凍・展開する場合

圧縮されたアーカイブを解凍・展開(圧縮を元に戻す作業)するには、x、zオプションを使う

tar xzvf アーカイブファイル名

書式②:解凍・展開先のディレクトリを指定した場合

「-Cオプション」を付けると別のディレクトリに解凍・展開できます。
デフォルトではカレントディレクトリに解凍・展開します。

tar xzvf アーカイブファイル名 -C 解凍・展開先のディレクトリ

実践:圧縮されたアーカイブファイルを解凍・展開する

[user01@localhost ~]$ tar xzvf arc3.tar.gz -C arc1
arc2/
arc2/hosts
arc2/services
arc2/fstab
[user01@localhost ~]$ ls -l arc1
drwxrwxr-x 2 user01 user01     48  2月 6 14:11 arc2
-rw-r--r-- 1 user01 user01    465  2月 6 14:11 fstab
-rw-r--r-- 1 user01 user01    158  2月 6 14:11 hosts


NEXT>> 標準入出力/リダイレクト/パイプ