技術者になりたい何か

技術者になりたい何かの覚書的な何かです

Linuxでのファイル・ディレクトリの圧縮とか解凍とか

ファイルの圧縮解凍

Linuxにおけるファイル圧縮の種類

gzip 良く使われる。拡張子は.gz。解凍コマンドgunzip or gzip -d。
・bzip2 gzipより圧縮効率は高いが時間がかかる。拡張子は.bz2。解凍コマンドbunzip or bzip2 -d。
・xz bzip2よりさらに圧縮効率が高く、時間がかかる。拡張子は.xz。解凍コマンドunxz or xz -d

ファイル圧縮それぞれの使い方

gzip

オプション
-d 圧縮ファイルを展開する
-c 標準出力へ出力する
-r ディレクトリ内のファイルを全て圧縮する(ディレクトリ自体を圧縮するわけではない)

実行例

$ ls
test01 test02 test03
$ gzip -r .
$ ls
test01.gz test02.gz test03.gz

圧縮前のファイルを残したいときは、-cで標準出力に出力したものをリダイレクトで保存する。

$ ls
test01 test02 test03
$ gzip -c test01 > test01.gz
$ ls
test01 test01.gz test02 test03

・bzip2

オプション
-d 圧縮ファイルを展開
-c 圧縮ファイルを標準出力に展開

実行例

$ ls
test01 test01.gz test02 test03
$ bzip2 test02
$ ls
test01 test01.gz test02.bz2 test03
$ bzip2 -c test03 > test03.bz
$ ls
test01 test01.gz test02.bz2 test03 test03.bz

・xz

オプション
-d 圧縮ファイルを展開
-k 圧縮・解凍後に元ファイルを削除しない
-l 圧縮ファイル内のファイルを一覧表示する

$ ls
test01 test02 test03
$ xz -k test01
$ ls
test01 test01.xz test02 test03
$ xz -l test01.xz
xz: --list is not implemented yet.

-l の使い方がよく分からなかった。

アーカイブの作成・展開

tar.gzとかtar.bzとか。
複数ファイルをまとめたアーカイブ(書庫)を作成⇒アーカイブを圧縮・展開する。
とはいえ感覚的にはディレクトリを圧縮・展開するようなものと思っておけばよい?
ちなみにソースファイルなどはtar.gz形式で配布されている事も多く、この圧縮されたファイルをtarball、tar玉と呼んだりもする。

オプション
-c アーカイブを作成する
-x アーカイブからファイルを取り出す
-t アーカイブの内容を確認
-f アーカイブファイル名を指定
-z gzipによる圧縮展開
-j bzip2による圧縮展開
-J 7zipによる圧縮展開
-v 詳細表示

など。
ちなみにtarコマンドはオプション指定時に-を省略できる数少ないコマンドの一つでもある。

よく使うパターン

$ tar cfz hoge.tar.gz hoge/

hoge/をアーカイブ作成、ファイル名hoge.tar.gz、gzipで圧縮

$ tar xvzf hoge.tar.gz

 

hoge.tar.gzを詳細表示しながら展開

$ ls
tartest test01 test01.xz test02 test03
$ tar cfz tartest.tar.gz tartest/
$ ls
tartest tartest.tar.gz test01 test01.xz test02 test03
$ mv tartest tartestbac
$ ls
tartest.tar.gz tartestbac test01 test01.xz test02 test03
$ tar xvzf tartest.tar.gz
tartest/
tartest/test1
tartest/test3
tartest/test2
$ ls
tartest tartest.tar.gz tartestbac test01 test01.xz test02 test03

どんな時に使うの?

ソースコード配布するときとか。Windowsでいう「zipでくれ」っていう感じ。
(ちなみにLinuxでもzipは扱えるが、標準で入ってないデストリビューションとかもある)

・ログファイル圧縮するときとか
ログローテ後のログファイルがgzになってることよくあるあれですね。
そのまま放置しとくとログ量が大変なことになるので、ある程度の期間なり容量によって圧縮するように
cronとかで設定しておく。
さらに圧縮後数ヶ月とかで別の場所に移動するとか(logtape)、削除するとかするのが通常。

圧縮後のログはそのままじゃ見れないのでzcatとか使って見る。
展開しようと思えば展開できるけど、展開するときは作業ディレクトリでやろう。(/var/log配下でやったりすると後がめんどい)

# zcat mail.log.1.gz | grep "検索ワード"

# zgrep '検索ワード' messages.1.gz

 

mail.log.1.gzとかmessages.1.gz がgz形式で圧縮されたログファイルになる。

 

 

  

[改訂第3版]Linuxコマンドポケットリファレンス

[改訂第3版]Linuxコマンドポケットリファレンス