MAGAZINE

キャリテク!マガジン

コラム

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

こんにちは。株式会社パイプラインの濱田です。前回は複数のファイルをtar.gz形式で圧縮・解凍、そして解凍せずに中身を確認する方法について取り上げました。今回はzip形式で複数のファイルを圧縮・解凍、そして中身の確認を行う方法について取り上げます。

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

Linuxではおよそ標準的なファイルの圧縮形式のtar.gzですが、反面、Windowsなどのユーザーがtar.gzファイルを解凍するには、コマンドラインからtarコマンドを利用するか、別途tar.gz形式に対応したアーカイバをインストールする必要があります。ある程度のリテラシーがある層にはこれでもよいのですが、GUIからダブルクリックで開くことのできるzip形式でファイルを圧縮する需要はそれなりにあるでしょう。

zipコマンド unzipコマンドをインストールする

Linuxディストリビューションのインストール方法によっては、zipコマンドやunzipコマンドがインストールされていない場合があります。これらコマンドがインストールされているかどうかは以下のコマンドを実行して確認します。

which zip

例 1 zipコマンド有無確認

which unzip

例 2 unzipコマンド有無確認

いずれもコマンドラインのフルパスが表示されればインストールされています。反対に、コマンド実行後に何も表示されずプロンプトに戻るようであれば、whichコマンドで検索したコマンドはインストールされていない可能性があります。zipコマンドおよびunzipコマンドのインストールは次のように行います。パッケージのインストールはsu -コマンドでrootユーザーにスイッチしてから実行するか、下記コマンドの先頭にsudo をつけて実行します。

yum install zip unzip

例 3 zipおよびunzipパッケージのインストール (CentOS 7)

dnf install zip unzip

例 4 zipおよびunzipパッケージのインストール (CentOS 8)

sudo apt install zip unzip

例 5 zipおよびunzipパッケージのインストール (Ubuntu 20.04.2 LTS)

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

カレントディレクトリ内にある2つのファイル「df.txt」と「dmesg.txt」を「example.zip」ファイルにまとめて圧縮してみましょう。「ls -lh df.txt dmesg.txt」コマンドを実行し、2ファイルの容量を見てみます。

hamada@DESKTOP-FUJ2F2G:~/tmp$ ls -lh df.txt dmesg.txt
-rw-r--r-- 1 hamada hamada  376 Jul 19 20:36 df.txt
-rw-r--r-- 1 hamada hamada 256K Jul 19 20:36 dmesg.txt

そして「zip example.zip df.txt dmesg.txt」コマンドを実行し、これら2ファイルをexample.zipファイルに圧縮します。

hamada@DESKTOP-FUJ2F2G:~/tmp$ zip example.zip df.txt dmesg.txt
  adding: df.txt (deflated 53%)
  adding: dmesg.txt (deflated 88%)

圧縮の過程において、53%から88%の間でファイルサイズが縮小されています。それでは、「ls -lh df.txt dmesg.txt example.zip」コマンドを実行し、zipファイルも含めて容量を確認してみましょう。

hamada@DESKTOP-FUJ2F2G:~/tmp$ ls -lh df.txt dmesg.txt example.zip
-rw-r--r-- 1 hamada hamada  376 Jul 19 20:36 df.txt
-rw-r--r-- 1 hamada hamada 256K Jul 19 20:36 dmesg.txt
-rw-r--r-- 1 hamada hamada  31K Jul 19 21:09 example.zip

2つのテキストファイルのサイズが300キロバイト程度でしたが、zip圧縮すると31キロバイト程度にまでファイルサイズが縮小されました。画像などのバイナリファイルはzip圧縮してもそれほどファイルサイズが変わりませんが、テキストファイルをzip圧縮すると、圧縮後のサイズは元のファイルの1/10くらいまで縮小することが可能です。

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

それでは、先ほど圧縮したファイルが解凍できるかを確認するため、2つのテキストファイルを削除し、zipファイルを解凍してみましょう。「rm -f df.txt dmesg.txt ; ls -lh」コマンドを一行で実行します。

hamada@DESKTOP-FUJ2F2G:~/tmp$ rm -f df.txt dmesg.txt ; ls -lh
total 48K
-rw-r--r-- 1 hamada hamada 31K Jul 19 21:09 example.zip

カレントディレクトリにはexample.zipのみが残りました。それではunzipコマンドでexample.zipを解凍し、lsコマンドでカレントディレクトリの中身を見てみましょう。「unzip example.zip ; ls -lh」コマンドを一行で実行します。

hamada@DESKTOP-FUJ2F2G:~/tmp$ unzip example.zip ; ls -lh
Archive:  example.zip
  inflating: df.txt
  inflating: dmesg.txt
total 496K
-rw-r--r-- 1 hamada hamada  376 Jul 19 20:36 df.txt
-rw-r--r-- 1 hamada hamada 256K Jul 19 20:36 dmesg.txt
-rw-r--r-- 1 hamada hamada  31K Jul 19 21:09 example.zip

先ほどカレントディレクトリに存在しなかった、df.txtとdmesg.txtが復活しました。また、解凍する前のexample.zipファイルもカレントディレクトリに残っていることがわかります。

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

それでは、再度2つのテキストファイルを削除し、次にdmesg.txtだけを解凍してみましょう。
「rm -f df.txt dmesg.txt ; unzip -j example.zip 」コマンドを一行で実行します。

hamada@DESKTOP-FUJ2F2G:~/tmp$ rm -f df.txt dmesg.txt ; unzip -j example.zip
dmesg.txt ; ls -lh
Archive:  example.zip
  inflating: dmesg.txt
total 432K
-rw-r--r-- 1 hamada hamada 256K Jul 19 20:36 dmesg.txt
-rw-r--r-- 1 hamada hamada  31K Jul 19 21:09 example.zip

カレントディレクトリに、example.zipファイルとdmesg.txtのみが存在し、df.txtが存在していないことがおわかりいただけたかと思います。

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

先ほどまでの例では、自身で作成したファイルが何かわかっていたので、zipファイルから特定のファイルだけを指定して解凍することができましたが、zipファイルを解凍せず、zipファイルの中にどんなファイルが格納されているかを知ることもできます。「unzip -t example.zip」コマンドを実行します。

hamada@DESKTOP-FUJ2F2G:~/tmp$ unzip -t example.zip
Archive:  example.zip
    testing: df.txt                   OK
    testing: dmesg.txt                OK
No errors detected in compressed data of example.zip.

unzipコマンドの-tオプションは、zipファイルが破損していないかをテストするためのコマンドですが、ご覧のように、どんなファイルが含まれているかを確認することもできます。

大量のファイルから特定のファイルを探すには、unzipコマンドからgrepコマンドへパイプラインで渡してあげると視覚的にわかりやすいでしょう。example.zipファイルにdmesg.txtファイルが含まれているかを確認するには「unzip -t example.zip | grep dmesg.txt」コマンドを実行します。

hamada@DESKTOP-FUJ2F2G:~/tmp$ unzip -t example.zip | grep dmesg.txt
    testing: dmesg.txt                OK

Linuxサーバーでzipファイルを扱うには、最低限これだけ覚えておくとよいでしょう。

さて、これまでは自ホスト内にファイルをバックアップする方法を取り上げてきましたが。これではバックアップとして不十分です。都度または定期的にファイルをバックアップすることで、オペミスなどのファイル損失から素早くファイルを復旧させることは確かにできますが、下記ユースケースを考慮すると、別ホストにバックアップを取る必要があります。

  • 自ホストにのみにバックアップを採ると、サーバー障害時にファイルを復旧させることができない
  • 同じファイルを複数サーバーに配置したい

次回からは、外部ディスクなどへファイルをバックアップする方法について取り上げます。

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

関連記事

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