MAGAZINE

キャリテク!マガジン

コラム

転ばぬ先のバックアップ (3) 複数のファイルを圧縮・解凍・確認する – tar.gz 編

こんにちは。株式会社パイプラインの濱田です。

我々エンジニアにとってバックアップの成否はビジネスの継続性を支えるうえで重要なタスクの1つと考えます。作業前の小さなバックアップからシステム全体のバックアップまで、一口にバックアップといっても重要度や影響度は異なり、

バックアップやリストアの手法にもそれぞれ特徴があります。
今回は、複数のファイルを圧縮して1つのファイルとして保存する方法について取り上げてみたいと思います。

tar.gz形式ファイルの圧縮、解凍、アーカイブファイルの確認

Linuxでファイルの圧縮を行う場合、tarコマンドを用いて行うことがよくあります。後述するzip形式での圧縮・解凍を行うzipコマンドやunzipコマンドがインストールされていないことがあっても、tarコマンドがインストールされていないことは皆無に近く、tarコマンドを用いたファイルの圧縮、解凍、アーカイブファイルの確認方法は必ず覚えておきましょう。

複数のファイルをtar.gzアーカイブにまとめて圧縮する

カレントディレクトリ ( /var/www/html ) にある複数のファイルを /var/www/DocumentRoot.tar.gz にまとめて圧縮します。

tar czf ../DocumentRoot.tar.gz *

tarコマンドのオプションはそれぞれ次の意味をもちます。

オプション意味
c新しくアーカイブを作成する
zアーカイブをgzip形式で圧縮する
fアーカイブファイル名を指定する

上記コマンド例では、圧縮したいファイルをワイルドカード「*」で指定しているため、ファイル名がアルファベットまたは数字ではじまる複数のファイルやディレクトリがまとめて圧縮されます。圧縮対象のファイルを詳細に表示したい場合、vオプションも同時に付与すると、圧縮時の詳細を確認することができます。

しかし、上記の方法ではカレントディレクトリにあるドット「.」ではじまるファイルやディレクトリは圧縮ファイルに含まれません(サブディレクトリにあるドット始まりのファイルやディレクトリは圧縮対象に含まれます)。これでは .htaccess などのファイルがバックアップ取得漏れをおこすためよろしくありません。ドットから始まるファイル名も含めて圧縮するには次のように行います。

tar czf ../DocumentRoot.tar.gz $(ls -A)

このように、圧縮対象のファイルやディレクトリの指定の仕方を変更してあげればよいのです。「$()」はプロセス置換といい、上記の例では、lsコマンドのAオプションをつけて実行した結果をプロセス置換として取り込み、圧縮対象にしています。lsコマンドにA(大文字指定です)オプションをつけて実行してみると、 .htaccessなどドット始まりのファイルが含まれるので、その効果がおわかりいただけるかと思います。

圧縮されたアーカイブを解凍する

アーカイブファイルをカレントディレクトリに解凍するには、以下のコマンドを実行します。

tar xzf ../DocumentRoot.tar.gz

先ほどの圧縮時は、tarコマンドのオプションに「c」を与えましたが、解凍時は「x」を与えています。圧縮時と解凍時のコマンドを整理してみましょう。

操作コマンド解説
圧縮tar czf ../DocumentRoot.tar.gz $(ls -A)カレントディレクトリにあるすべてのファイル(ls -Aの結果をプロセス置換で取り込む)を上層ディレクトリにDocumentRoot.tar.gzというアーカイブとして圧縮する
解凍tar xzf ../DocumentRoot.tar.gz上層ディレクトリにあるDocumentRoot.tar.gzというアーカイブに圧縮されたファイルやディレクトリすべてをカレントディレクトリに解凍する

圧縮する際のコマンドオプション「c」がcompressの略、解凍する際のコマンドオプション「x」がexpandの略と覚えるとイメージしやすいかと思います。

1つのファイルのみ解凍する

先ほどはアーカイブファイルからすべてのファイルを解凍しましたが、ファイルサイズやファイル数によってはこうした解凍方法が適切ではないこともあります。解凍したいファイルが1つだけの場合は以下のように解凍します。

tar xzf ../DocumentRoot.tar.gz .htaccess

上記例では、アーカイブファイルの直下にある .htaccess ファイルをカレントディレクトリに解凍しています。深い階層のディレクトリにあるファイルも「tar xzf ../DocumentRoot.tar.gz wp-content/themes/twentynineteen/functions.php」のようにして解凍することもできます。

アーカイブファイルの中身を解凍せずに確認する

tar.gzアーカイブにどんなファイルが圧縮されているか、アーカイブを解凍しなくても確認することができます。コマンドは以下の通りです。

tar tzf ../DocumentRoot.tar.gz

上記コマンドを実行すると、以下のように出力されます。

.htaccess
.well-known/
index.php
license.txt
readme.html
wp-activate.php
wp-admin/
wp-admin/link-parse-opml.php
wp-admin/users.php
wp-admin/images/
(以下略)

出力結果の末尾に「/」がついている行がディレクトリを表します。

詳細に出力したい場合は以下のように、オプションに「v」を付与して実行します。

tar tvzf ../DocumentRoot.tar.gz

実行結果は以下のように、「ls -l」コマンドを実行したときのような詳細が表示されます。

-rw-r--r-- nullpopopo/nullpopopo 584 2017-08-21 12:43 .htaccess
drwxr-xr-x nullpopopo/nullpopopo   0 2021-04-25 13:10 .well-known/
-rw-r--r-- nullpopopo/nullpopopo 405 2020-04-01 20:16 index.php
-rw-r--r-- nullpopopo/nullpopopo 19915 2021-03-10 20:16 license.txt
-rw-r--r-- nullpopopo/nullpopopo  7345 2021-05-13 20:14 readme.html
-rw-r--r-- nullpopopo/nullpopopo  7165 2021-03-10 20:16 wp-activate.php
drwxr-xr-x nullpopopo/nullpopopo     0 2020-12-09 20:15 wp-admin/
-rw-r--r-- nullpopopo/nullpopopo  2654 2020-08-12 04:00 wp-admin/link-parse-opml.php
-rw-r--r-- nullpopopo/nullpopopo 21484 2021-03-10 20:16 wp-admin/users.php
drwxr-xr-x nullpopopo/nullpopopo     0 2021-03-10 20:16 wp-admin/images/
(以下略)

いかがでしたでしょうか。アーカイブ作成をすることにより、ファイルのパーミッションをそのままに残しながらバックアップを取得することが可能になりました。これにより、アーカイブが残っている限りにおいては、ファイルの操作ミスによりパーミッションを変更してしまった(そして元のパーミッションを忘れてしまった)場合も、容易にファイルを復元することが可能になります。

次回は、Linux上でのzipファイル圧縮、解凍について取り上げてみたいと思います。

まずはエンジニアデビューしたい、という方は、3ヶ月間学びながらお給料が貰える KCCSキャリアテック キャリテク!の門を叩いてみてはいかがでしょう。
https://www.kcct.co.jp/careetec/

関連記事

facebook シェアシェア
LINE シェアシェア