Linuc 101 Linux コマンド -- gzip, tar, xz, -- ファイルのアーカイブと圧縮
why
Linuc 101 の学習中、
ファイル圧縮をするコマンドが多く、オプションも混じりやすいくなったので整理する
gzip, tar, xz, をまとめた
圧縮コマンド の比較
Qiita の圧縮コマンド一覧
gzip が一般的で、bzip がより強力で、xz はもっと強力だが、圧縮後のサイズが大き聞くなるパターンがある(これは小さいテキストファイルを圧縮する時にでくわした)zip は win でしか使われないらしい。win では 7zip が圧縮率高くて強度の高い暗号が作れていいらしい
gzip
gzip 方式で圧縮するコマンド
引数なしの場合
ls hoge.text gzip hoge.text ls hoge.text.gz
ファイル名に.gz がついたファイルが残る
引数なしでは圧縮前のファイルは残らない。
cat hoge.text.gz `hoge.textKI-I(JpE
圧縮されたファイルは cat では出力できない。
vi ではなぜか開ける...
圧縮前後のファイルサイズの比較
ll total 8 -rw-r--r-- 1 kaede staff 270 Apr 28 10:16 hoge.text ll total 8 -rw-r--r-- 1 kaede staff 44 Apr 28 10:16 hoge.text.gz
gzip にした後のファイルサイズを見てみると、 270 bite -> 44 bite で 1/6 ほどの削減されている。
gzip -d -- 圧縮したファイルを展開、解凍
ls hoge.text.gz gzip -d hoge.text.gz ll total 8 -rw-r--r-- 1 kaede staff 270 Apr 28 10:16 hoge.text
-d コマンドで、作成した .gz の圧縮ずみファイルを展開できる。
gzip -c file > file.gz -- 元のファイルも残して圧縮
gzip -c だけでは使えない。
標準出力の出力先をファイルに指定する >
を使う必要があるらしい。
ls hoge.text gzip -c hoge.text > hoge.text.gz ls hoge.text hoge.text.gz
出力先の指定が必要だが、これで元のファイルも残して圧縮できる。
gzip -r -- 再帰的に圧縮する
子ディレクトリもまとめて圧縮できるってことだろうか?
階層を作ってみる
tree . └── dirA └── dirB └── dirC └── innerDirc.txt 3 directories, 1 file
3つの階層の下にテキストファイルを置く
gzip dirA/ gzip: dirA/ is a directory
gzip -r dirA/ gzip kaede$ ll dirA/dirB/dirC/ total 8 -rw-r--r-- 1 kaede staff 47 Apr 28 10:45 innerDirc.txt.gz
-r のオプションをつけるとフォルダの中のフォルダの中のファイルを圧縮できる。
gzip -v
圧縮率を見せながら圧縮できるらしい
tar
Unix で一番メジャーな圧縮コマンド? gzip より難しい。
アーカイブをする。
アーカイブとは複数のファイルを一つのファイルにまとめること。
しかし、一つのファイルでもアーカイブは作れる。 gmail のアーカイブもこういうコマンドを内部で走らせているのだろうか?
ps コマンドのようにアルファベットを3つほど組み合わせる引数指定。
また、まとめたアーカイブの中を
- 展開せずに見たり
- さらに追加したり
- 中身の一部を削除したり
といった操作が可能なので、zip とはかなり違う。
引数なし
tar hoge.txt Usage: List: tar -tf <archive-filename> Extract: tar -xf <archive-filename> Create: tar -cf <archive-filename> [filenames...] Help: tar --help
引数なしでは使えない。
ファイル指定の f と、
アーカイブの中身をリスト表示する t
アーカイブを展開する x
アーカイブを作成する c
のどれかを使わなければいけない。
アーカイブ作成 -- tar -cvf file.tar file.txt
まず、アーカイブを作成する create の c
tar -cvf hoge.tar hoge.txt a hoge.txt ls hoge.tar hoge.txt
gz と違って圧縮前のテキストファイルは削除されない。
gz と違って.txt.gz と拡張子を重ねる形にはならない。というかファイル名を指定する
-cvf 作成するアーカイブ、作成元のファイル、と言う順番なので注意。
tar -cvf arc.tar hoge.txt hoge2.txt a hoge.txt a hoge2.txt ls arc.tar hoge.tar hoge.txt hoge2.txt
複数のファイルからアーカイブを作ることもできる。
正規表現の *
を使えばフォルダないもまとめてアーカイブに放り込める。
tar -tf -- アーカイブの中身を表示
tar -tf arc.tar hoge.txt hoge2.txt
-tf を使えばアーカイブの中身を表示できる。
展開はされないので、元のファイルもなくならないし、展開されたファイルもでてこない。
tar -xf -- アーカイブの中身を展開
extract の x
expand ではなかった
tar -xf arc.tar
-xf を使えばアーカイブの中身を展開できる
xz
xz 方式でファイルを圧縮、展開できる
引数なし
ll total 8 -rw-r--r-- 1 kaede staff 13 Apr 29 12:07 hoge.txt xz hoge.txt RYOs-MBP:xz kaede$ ll total 8 -rw-r--r-- 1 kaede staff 72 Apr 29 12:07 hoge.txt.xz
なぜかファイルサイズが増える
xz -d file.xz -- 解凍
xz -d hoge.txt.xz ls hoge.txt
普通の解凍コマンド
xz -k file -- 元のファイルを残して圧縮
xz -k hoge.txt ls hoge.txt hoge.txt.xz
xz fileA fileB -- 複数のファイルを個別に圧縮する
ls textA textB xz textA textB ls textA.xz textB.xz
複数ファイルを指定すると、 gzip のように一つに纏まるわけではなく、個別に圧縮される。
一つのファイルに圧縮する方法は未検索
xz - l -- 圧縮先の xz ファイルの中身を見る
xz -l textA.xz Strms Blocks Compressed Uncompressed Ratio Check Filename 1 1 72 B 15 B 4.800 CRC64 textA.xz
xz ファイルの圧縮前と圧縮後のサイズと、倍率などがわかる