キャリテク!マガジン
- TOP
- キャリテク!マガジン
- 転ばぬ先のバックアップ (3) 複数のファイルを圧縮・解凍・確認する – tar.gz 編
転ばぬ先のバックアップ (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ヶ月間学びながらお給料が貰える AltX キャリテク!の門を叩いてみてはいかがでしょう。
https://www.kcct.co.jp/careetec/