SEワンタンの独学備忘録

IT関連の独学した内容や資格試験に対する取り組みの備忘録

【LPIC101】 ファイル管理圧縮系コマンド LPICで学ぶLinux⑯

ファイルの圧縮コマンド

Linuxシステム上では圧縮形式としてはgzipがよく使用されている感じはありますが、その他にもいくつかの圧縮コマンドが用意されています。
試験的には基本的な圧縮コマンド数種とオプションを押さえておけばよいでしょう。

gzipコマンド

拡張子「.gz」で表わされるgzipはLinuxシステム上では高頻度で見かける圧縮方式であると思います。
他の圧縮コマンドのオプションなどもgzipコマンドに似たところがあるので、まずは確実に押さえておきたいコマンドの一つ。

普通に実行すると、ファイルに対してgz拡張子を付与した圧縮ファイルを生成します。

[wantan@localhost lpic]$ gzip uniq.txt
[wantan@localhost lpic]$ ll | grep uniq
-rw-rw-r--. 1 wantan wantan    43  810 05:48 uniq.txt.gz

オプション

オプション 内容
-d 圧縮ファイルを展開(解凍)する
-c ファイルを標準出力へ出力する
-r ディレクトリ内のファイルをすべて圧縮

■圧縮ファイルを解凍する

[wantan@localhost lpic]$ gzip -d uniq.txt.gz
[wantan@localhost lpic]$ ll | grep uniq
-rw-rw-r--. 1 wantan wantan    17  810 05:48 uniq.txt

ファイルの解凍には「-d」オプションを使用する他にgunzipコマンドを使用する方法でも同じ解凍ができます。

[wantan@localhost lpic]$ gunzip uniq.txt.gz
[wantan@localhost lpic]$ ll | grep uniq
-rw-rw-r--. 1 wantan wantan    17  810 05:48 uniq.txt

■圧縮前のファイルも残す

-c」オプションは標準出力に出力を行うため、元々のファイル自体は残ります。
そこで標準出力をリダイレクトで受けてファイルを指定することにより、元ファイルを残して圧縮ファイルを生成することができます。

[wantan@localhost lpic]$ gzip -c uniq.txt > uniq.txt.gz
[wantan@localhost lpic]$ ll | grep uniq
-rw-rw-r--. 1 wantan wantan    17  810 05:48 uniq.txt
-rw-rw-r--. 1 wantan wantan    43  815 17:13 uniq.txt.gz

■ディレクトリの中身を圧縮する

普通にディレクトリを圧縮しようとするとエラーになります。

[wantan@localhost lpic]$ gzip file/
gzip: file/ is a directory -- ignored

なので、「-r」オプションを使用します。

[wantan@localhost lpic]$ gzip -r file/
[wantan@localhost lpic]$ ll file/
合計 16
-rw-rw-r--. 1 wantan wantan 44  810 06:45 files.gz
-rw-rw-r--. 1 wantan wantan 30  810 06:45 test1.txt.gz
-rw-rw-r--. 1 wantan wantan 30  810 06:45 test2.txt.gz
-rw-rw-r--. 1 wantan wantan 30  810 06:45 test3.txt.gz

ディレクトリの中身のファイルが圧縮されるので、ディレクトリごとまとめたい場合などには後述するアーカイブと組み合わせる必要があります。

■おまけ
圧縮ファイルの内容をディスプレイに表示する。
試験には出るか不明ですが、圧縮コマンドには圧縮されたファイルの内容を表示するcat系コマンドが用意されています。
gzipであればzcatコマンドなど。

[root@localhost lpic]# zcat sort.txt
10
2
55
9test
rt
27

Sort
 spase
000
oooo
abc
AAAAAAAA
098765
nnnnnnn
bzip2コマンド

bzip2は拡張子「bz2」で表さられる圧縮コマンドの一つです。
試験的には問われることは少なそうですが、gzipと比較したときに圧縮率が高い、圧縮処理に時間がかかるという特徴があります。

個人的な感覚としてはかなり大きいファイルの圧縮を行ったとき、処理に結構な時間がかかるようになったと思います。
試験的には基本的な使い方としてのオプションの方が大事です。

[root@localhost lpic]# bzip2 uniq.txt
[root@localhost lpic]# ll | grep uniq
-rw-rw-r--. 1 wantan wantan    45  810 05:48 uniq.txt.bz2

オプション


基本的にはgzipと同じような使い方になります。

オプション 内容
-d 圧縮ファイルを展開(解凍)する
-c ファイルを標準出力へ出力する

■bzipファイルの解凍

bzipについてもオプションとbunzip2コマンドでの解凍があります。
gunzipと全く同じなので、そこまで意識する必要はないかと思います。

[root@localhost lpic]# bunzip2 -d uniq.txt.bz2
[root@localhost lpic]# bunzip2 uniq.txt.bz2
xzコマンド

xzコマンドも同じく圧縮コマンドですが、bzipと比較してさらに圧縮率が高く処理に時間がかかります。

[root@localhost lpic]# xz uniq.txt
[root@localhost lpic]# ll | grep uniq
-rw-rw-r--. 1 wantan wantan    76  810 05:48 uniq.txt.xz

オプション


これまでのコマンドと比較して微妙に違うので意識して覚える必要があります。

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

■xzファイルを解凍する
こちらもオプションとコマンドでの解凍があります。

[wantan@localhost lpic]$ xz -d uniq.txt.xz
[wantan@localhost lpic]$ unxz uniq.txt.xz

■元ファイルを残して圧縮する

[wantan@localhost lpic]$ xz -k uniq.txt
[wantan@localhost lpic]$ ll | grep uniq
-rw-rw-r--. 1 wantan wantan    17  810 05:48 uniq.txt
-rw-rw-r--. 1 wantan wantan    76  810 05:48 uniq.txt.xz

アーカイブコマンド

ここでいうアーカイブは複数のファイルを一つのディレクトリにまとめることをさします。
一般には圧縮コマンドとセットで使われることが多いと思います。

tarコマンド

アーカイブの形式として一番メジャーなのは「tar」形式でしょう。
試験的にもアーカイブコマンドとしては一番出題確率が高いと思われます。

出題範囲のオプションがとにかく多いので、あまり使ったことのない場合にはオプションを覚えるのに苦労すると思われます。

オプション


慣例的にオプションは「-」ハイフンをつけずに実行することができます。
ここに示したもの以外にも本来はいくつかありますが、試験的に重要なものに絞っています。

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

■アーカイブを生成する
ファイル名を指定して、アーカイブを生成する。

[wantan@localhost file]$ tar cf test.tar test1.txt
[wantan@localhost lpic]$ ll | grep test
-rw-rw-r--. 1 wantan wantan 10240  816 02:31 test.tar
-rw-rw-r--. 1 wantan wantan    83  813 01:37 test.txt
-rw-rw-r--. 1 wantan wantan    62  89 22:47 testfile.txt

■gzipで圧縮してアーカイブする
tarアーカイブではオプションによりアーカイブ時に圧縮をかけることも可能です。

同じようにbzip2の場合は「-j」オプション、xzの場合は「-J」オプションを使用することで同様のことができます。
試験的にはオプションと圧縮形式の紐づけをしっかり覚えておいた方がいいでしょう。

[wantan@localhost file]$ tar cfz test.tar.gz test1.txt test2.txt
[wantan@localhost file]$ ll | grep test
-rw-rw-r--. 1 wantan wantan 131  816 02:46 test.tar.gz
-rw-rw-r--. 1 wantan wantan   0  816 02:46 test1.txt
-rw-rw-r--. 1 wantan wantan   0  810 06:45 test2.txt
-rw-rw-r--. 1 wantan wantan   0  810 06:45 test3.txt
drwxrwxr-x. 2 wantan wantan   6  816 02:43 testd

■アーカイブ内のファイルを表示する
アーカイブ化したファイルは展開しなければ内容ファイルを確認することができないので、展開せずに中身のファイルを確認したい場合には「-t」オプションを用います。

[wantan@localhost file]$ tar tf test.tar
test1.txt

■アーカイブからファイルを取り出す
解凍に等しいですが、ファイルを取り出すのでアーカイブファイル自体はそのまま残ります

[wantan@localhost file]$ tar xf test.tar
cpioコマンド

私はちゃんと使ったことがありませんでしたが、Linuxの圧縮系コマンドには「cpio」コマンドも存在します。
cpio」コマンドは試験的には出題頻度はやや落ちると思われ、オプションを全て覚えるまでいかなくていいと思っているもののtarコマンドとは少し勝手が違うのでやや注意です。

cpioコマンドでは、オプションの他にフラグというオプションと併用するものがあります。
以下、主要なものだけ確認していきます。

フラグ

フラグ 内容
-i [オプション] パターン アーカイブからファイルを抽出
-o [オプション] アーカイブを作成
-p [オプション] ディレクトリ ファイルを別のディレクトリにコピー

オプション

オプション 内容
-A 既存のアーカイブにファイルを追加
-d 必要なディレクトリを作成
-r ファイル名を対話的に変更
-t 入力された内容を一覧表示
-v ファイル名の一覧を表示

■アーカイブファイルを作成する
「-o」フラグで作成する場合、標準入力から対象ファイルを選定し、アーカイブファイルは標準出力に出力するのでファイルに保存する場合にはリダイレクトで渡してあげる必要があります。
また。通常は1ファイルを対象にするわけではなく複数ファイルを対象にする場合が多いでしょう。

[wantan@localhost file]$ ls test1.txt | cpio -o > ./test.cpio
1 block

■アーカイブファイルを展開する
標準入力にアーカイブファイルを渡し、-iオプションを付与することで展開できます。

[wantan@localhost testd]$ cpio -i < test.cpio
1 block
[wantan@localhost testd]$ ll
合計 4
-rw-rw-r--. 1 wantan wantan 512  817 23:07 test.cpio
-rw-rw-r--. 1 wantan wantan   0  817 23:26 test1.txt

最低限は、作成と展開のコマンド形式を押さえておけばいいでしょう。

ddコマンド

ddコマンドはこれまで全く知りませんでした。
入力側に指定したファイルからの入力を、ファイルもしくは標準出力に送るコマンドです。

以下のように一般的なファイルを扱うこともできますが、これだけであればcpコマンドでも容易に同じことができます。

[wantan@localhost testd]$ dd if=./test1.txt of=./ddtest.txt
0+0 レコード入力
0+0 レコード出力
0 バイト (0 B) コピーされました、 0.000739646 秒、 0.0 kB/秒
[wantan@localhost testd]$ ll
合計 4
-rw-rw-r--. 1 wantan wantan   0  817 23:32 ddtest.txt
-rw-rw-r--. 1 wantan wantan 512  817 23:07 test.cpio
-rw-rw-r--. 1 wantan wantan   0  817 23:26 test1.txt

実際に使用する場合には、デバイスの内容をまるごとコピーしたりするのが実践的な使い方のようです。

dd if=/dev/sda of=/home/wantan/ddsdatest

オプション

オプション 内容
if= 入力側ファイルを指定
of= 出力側ファイルを指定
bs= 入出力のブロックサイズを指定
count= 回数分の入力ブロックをコピー

各オプションも試験ではピンポイントで出題される可能性があると思います。

ーーーーーーーーーーーーーーーー

・前回(第十五回)
www.wantanblog.com

・次回(第十七回)
www.wantanblog.com