目標
「ファイルの種類」について確認する
「アーカイブファイルとディレクトリファイル」について概要を理解する。
「アーカイブと圧縮」について概要を理解する。
「ファイルの圧縮コマンドと解凍コマンド」の基本操作を理解する。
「アーカイブファイル作成コマンドとオプションを利用した圧縮」の基本操作を理解する。
「ddコマンド」でのファイルのコピーについて基本操作を理解する。
ファイル
ファイルの種類
Linuxではファイルの種類として次のものがあります。
ファイルの種類 | ls -lコマンドで表示した時の結果 |
普通のファイル(Reguler File) | 「-」 |
ディレクトリファイル | 「d」 |
シンボリックリンク | 「l」 |
キャラクタ型デバイスファイル ※特殊ファイル | 「c」 |
ブロック型デバイスファイル ※特殊ファイル | 「b」 |
アーカイブファイルとディレクトリファイル
アーカイブファイルはファイルやディレクトリをひとまとめにしたファイル(普通のファイル)のことです。まとめるものとして似て非なるものにディレクトリ(ディレクトリファイル)があります。
実際の表現とは異なりますが、違いをイラストでイメージするなら次のようになります。

tarコマンドでアーカイブファイルを作成して中身を確認してみたいと思います。
[rocky001@rockylinux001 ~]$ tar -cvf archiverocky .
[rocky001@rockylinux001 ~]$ ls -l
total 100
–rw-rw-r–. 1 rocky001 rocky001 51200 May 1 16:23 archiverocky
drwxrwxr-x. 2 rocky001 rocky001 6 Apr 24 14:31 dir1
drwxrwxr-x. 2 rocky001 rocky001 6 Apr 24 14:31 dir2
drwxrwxr-x. 2 rocky001 rocky001 6 Apr 24 14:31 dir3
–rw-rw-r–. 1 rocky001 rocky001 0 Apr 24 14:30 linux3.txt
–rw-rw-r–. 1 rocky001 rocky001 436 Apr 28 19:42 mergesplitfile.txt
–rw-rw-r–. 1 rocky001 rocky001 436 Apr 28 18:50 nusortrocky1.txt
–rw-rw-r–. 1 rocky001 rocky001 444 Apr 28 18:52 nusortrocky2.txt
–rw-rw-r–. 1 rocky001 rocky001 226 Apr 25 16:24 rocky1.txt
–rw-rw-r–. 1 rocky001 rocky001 194 Apr 28 19:51 rocky1copy.txt
–rw-rw-r–. 1 rocky001 rocky001 227 Apr 25 16:34 rocky2.txt
–rw-rw-r–. 1 rocky001 rocky001 585 Apr 26 14:26 rocky3.txt
–rw-rw-r–. 1 rocky001 rocky001 43 Apr 26 14:44 rocky4.txt
–rw-rw-r–. 1 rocky001 rocky001 0 Apr 24 15:20 rocky5.txt
–rw-rw-r–. 1 rocky001 rocky001 226 Apr 28 18:49 sortrocky1.txt
–rw-rw-r–. 1 rocky001 rocky001 227 Apr 28 18:52 sortrocky2.txt
–rw-rw-r–. 1 rocky001 rocky001 213 Apr 28 19:34 splitfileaa
–rw-rw-r–. 1 rocky001 rocky001 223 Apr 28 19:34 splitfileab
「–」は普通のファイルです。「d」はディレクトリです。
archiverockyは「-」となっています。
アーカイブと圧縮
アーカイブはファイルをまとめたものなので「圧縮」ではありません。アーカイブファイルは「tarコマンド」や「cpioコマンド」を利用することで作成できます。「tarコマンド」ではオプションを指定することで同時に圧縮も行えます。※cpioコマンドではオプションによる圧縮・解凍はありません。

ファイルの圧縮と解凍を行うコマンド
gzipコマンド/gunzipコマンド/zcatコマンド
gzipコマンド…Linuxでよく利用される圧縮のコマンドです。拡張子には「.gz」が使われます。
文法:
gzip [省略できるOP] ファイル名
gzip [r][省略できるOP] ディレクトリ名
※OPはオプションのこと
gunzipコマンド…拡張子「.gz」のファイルを解凍します
文法:
gunzip ファイル名
zcatコマンド…gzipコマンドで圧縮したファイルの中身を確認できます。
文法:
zcat ファイル名
実際にgzipコマンドで「rocky1.txt」を圧縮してみようと思います。
※gzipコマンドでファイルを圧縮すると元のファイルは削除されてしまいます。
[rocky001@rockylinux001 ~]$ ls
archiverocky dir2 linux3.txt nusortrocky1.txt rocky1.txt rocky2.txt rocky4.txt sortrocky1.txt splitfileaa dir1 dir3 mergesplitfile.txt nusortrocky2.txt rocky1copy.txt rocky3.txt rocky5.txt sortrocky2.txt splitfileab
[rocky001@rockylinux001 ~]$ gzip rocky1.txt
[rocky001@rockylinux001 ~]$ ls
archiverocky dir2 linux3.txt nusortrocky1.txt rocky1.txt.gz rocky2.txt rocky4.txt sortrocky1.txt splitfileaa dir1 dir3 mergesplitfile.txt nusortrocky2.txt rocky1copy.txt rocky3.txt rocky5.txt sortrocky2.txt splitfileab

続けて圧縮したファイルをオプション「d」を利用して解凍してみます。
[rocky001@rockylinux001 ~]$ gzip -d rocky1.txt.gz

続いて任意のディレクトリ内のファイルを一度に圧縮してみようと思います。
[rocky001@rockylinux001 ~]$ mv rocky2.txt rocky3.txt rocky4.txt sortrocky1.txt sortrocky2.txt dir1/.
[rocky001@rockylinux001 ~]$ ls
archiverocky dir2 linux3.txt nusortrocky1.txt rocky1.txt rocky5.txt splitfileab
dir1 dir3 mergesplitfile.txt nusortrocky2.txt rocky1copy.txt splitfileaa
[rocky001@rockylinux001 ~]$ ls dir1
rocky2.txt rocky3.txt rocky4.txt sortrocky1.txt sortrocky2.txt

dir1が圧縮されていないことと、dir1内の全ファイルが圧縮されているのを確認します。
[rocky001@rockylinux001 ~]$ gzip -r dir1
[rocky001@rockylinux001 ~]$ ls
archiverocky dir2 linux3.txt nusortrocky1.txt rocky1.txt rocky5.txt splitfileab
dir1 dir3 mergesplitfile.txt nusortrocky2.txt rocky1copy.txt splitfileaa
[rocky001@rockylinux001 ~]$ ls dir1
rocky2.txt.gz rocky3.txt.gz rocky4.txt.gz sortrocky1.txt.gz sortrocky2.txt.gz

続けてdir1の中身を全て解凍してみたいと思います。
[rocky001@rockylinux001 ~]$ gzip -rd dir1
[rocky001@rockylinux001 ~]$ ls dir1
rocky2.txt rocky3.txt rocky4.txt sortrocky1.txt sortrocky2.txt

今度はホームディレクトリ「rocky001」にある「rocky1.txt」を残したまま圧縮ファイルを作成してみます。これには標準出力で出力したものを圧縮するといった操作が必要とします。
[rocky001@rockylinux001 ~]$ gzip -c rocky1.txt > rocky1.txt.gz
[rocky001@rockylinux001 ~]$ ls
archiverocky dir2 linux3.txt nusortrocky1.txt rocky1.txt rocky1copy.txt splitfileaa dir1 dir3 mergesplitfile.txt nusortrocky2.txt rocky1.txt.gz rocky5.txt splitfileab

圧縮したファイルの中身を確認してみようと思います。
[rocky001@rockylinux001 ~]$ zcat rocky1.txt.gz

bzip2コマンド/bunzip2コマンド/bzcatコマンド
bzip2コマンド…gzipよりも圧縮効率が高い圧縮のコマンドです。デメリットはファイルをより圧縮できる分の処理時間がかかります。拡張子には「.bz2」が使われます。
文法:
bzip2 [省略できるOP] ファイル名
※OPはオプションのこと
bunzip2コマンド…拡張子「.bz2」のファイルを解凍します。
文法:
bunzip2 ファイル名
bzcatコマンド…bunzipコマンドで圧縮したファイルの中身を確認できます。
文法:
bzcat ファイル名
ここでは「bzip2コマンド」を利用してファイルを圧縮して「bunzip2コマンド」を利用してファイルを解凍してみようと思います。
[rocky001@rockylinux001 ~]$ bzip2 rocky1.txt
[rocky001@rockylinux001 ~]$ ls
archiverocky dir2 linux3.txt nusortrocky1.txt rocky1.txt.bz2 rocky1copy.txt splitfileaa dir1 dir3 mergesplitfile.txt nusortrocky2.txt rocky1.txt.gz rocky5.txt splitfileab

上で圧縮したファイルを解凍します。
[rocky001@rockylinux001 ~]$ bunzip2 rocky1.txt.bz2
[rocky001@rockylinux001 ~]$ ls
archiverocky dir2 linux3.txt nusortrocky1.txt rocky1.txt rocky1copy.txt splitfileaa dir1 dir3 mergesplitfile.txt nusortrocky2.txt rocky1.txt.gz rocky5.txt splitfileab

アーカイブファイル作成コマンドとオプションを利用した圧縮
tarコマンド
tarコマンド…複数のファイルやディレクトリを(tar形式の)アーカイブファイルとしてひとつにまとめたり展開することができます。「z」オプションを利用するとgzipを使った圧縮と解凍、「j」オプションを利用するとbzip2を使った圧縮と解凍を行えます。
文法:
tar [省略できるOP] ファイル名(またはディレクトリ名)
※OPはオプションのこと
※tarコマンドではオプションにつける「-」を省略できます。
cpioコマンド
cpioコマンド…複数のファイルやディレクトリを(cpio形式の)アーカイブファイルとしてひとつにまとめたり、アーカイブファイルからファイルの抽出を行うことができます。※オプションによる圧縮・解凍の操作はありません。
文法:
cpio フラグ [省略できるOP]
【作成(コピーアウトモード)】
find ファイル名 | cpio -o [省略できるOP] > アーカイブファイル
ls ディレクトリ名 | cpio -o [省略できるOP] > アーカイブファイル
【抽出(コピーインモード)】
cpio -i [省略できるOP] < アーカイブファイル
【別ディレクトリへのファイルのコピー(コピーパスモード)】
find ファイル名 | cpio -p アーカイブファイル
※OPはオプションのこと
cpioコマンドを利用してアーカイブファイルを作成してみたいと思います。
dir1ディレクトリ内のファイルを確認します。
[rocky001@rockylinux001 ~]$ ls dir1
rocky2.txt rocky3.txt rocky4.txt sortrocky1.txt sortrocky2.txt
このうち「rocky」が最初に付くファイルをファイルリストにしたいと思います。
まずはdir1内の「rocky」とファイルを確認します。
[rocky001@rockylinux001 ~]$ find dir1/rocky*
dir1/rocky2.txt
dir1/rocky3.txt
dir1/rocky4.txt
確認ができたのでファイルリストをパイプでcpioコマンドに渡してアーカイブファイルを作成したいと思います。
[rocky001@rockylinux001 ~]$ find dir1/rocky* | cpio -o > rocky.cpio
2 blocks
rocky.cpioというアーカイブファイルが作成されたのが確認できます。
[rocky001@rockylinux001 ~]$ ls
archiverocky dir2 linux3.txt nusortrocky1.txt rocky.cpio rocky1.txt.gz rocky5.txt splitfileab dir1 dir3 mergesplitfile.txt nusortrocky2.txt rocky1.txt rocky1copy.txt splitfileaa

作成したアーカイブファイルを展開してみようと思います。
rocky001の中身を確認します。
[rocky001@rockylinux001 ~]$ ls
archiverocky dir2 linux3.txt nusortrocky1.txt rocky.cpio rocky1.txt.gz rocky5.txt splitfileab dir1 dir3 mergesplitfile.txt nusortrocky2.txt rocky1.txt rocky1copy.txt splitfileaa
dir1を削除しておきます。
[rocky001@rockylinux001 ~]$ rm -r dir1
[rocky001@rockylinux001 ~]$ ls
archiverocky dir3 mergesplitfile.txt nusortrocky2.txt rocky1.txt rocky1copy.txt splitfileaa dir2 linux3.txt nusortrocky1.txt rocky.cpio rocky1.txt.gz rocky5.txt splitfileab
rocky1.cpioをフラグ「i」を利用して展開できるか試してみます。
※ディレクトリがないので作成できません。
[rocky001@rockylinux001 ~]$ cpio -i < rocky.cpio
cpio: dir1/rocky2.txt: Cannot open: No such file or directory
cpio: dir1/rocky3.txt: Cannot open: No such file or directory
cpio: dir1/rocky4.txt: Cannot open: No such file or directory
2 blocks
次はオプション「d」を付けて必要なディレクトリを作成するようにします。
[rocky001@rockylinux001 ~]$ cpio -id < rocky.cpio
2 blocks
中身を確認します。「dir1」が作成されています。
[rocky001@rockylinux001 ~]$ ls
archiverocky dir2 linux3.txt nusortrocky1.txt rocky.cpio rocky1.txt.gz rocky5.txt splitfileab dir1 dir3 mergesplitfile.txt nusortrocky2.txt rocky1.txt rocky1copy.txt splitfileaa
dir1の中身を確認します。アーカイブファイルを展開できています。
[rocky001@rockylinux001 ~]$ ls dir1
rocky2.txt rocky3.txt rocky4.txt

ddコマンド
ddコマンド…指定したファイルを指定した別のファイルへコピーするコマンドです。ddコマンドはハードディスクなどのデバイスをそのまま取り扱うことが可能です。
文法:
dd if=入力ファイル of=出力ファイル [※OPです。bs=バイト数] [※OPです。count=回数] [省略可能なOP]
※OPはオプションのこと
ddコマンドを利用して指定したファイルを別ファイルへコピーしてみたいと思います。
catコマンドで「rocky1.txt」の内容を確認します。
[rocky001@rockylinux001 ~]$ cat rocky1.txt
baseball
rugby
…
…
…
golf
tennis
ddコマンドで「rocky1.txt」を「rocky6.txt」にコピーします。
[rocky001@rockylinux001 ~]$ dd if=rocky1.txt of=rocky6.txt
0+1 records in
0+1 records out
226 bytes copied, 0.000350009 s, 646 kB/s
catコマンドで「rocky6.txt」の中身を確認します。
[rocky001@rockylinux001 ~]$ cat rocky6.txt
baseball
rugby
…
…
…
golf
tennis

今回は以上になります。

ブックマークのすすめ
「ほわほわぶろぐ」を常に検索するのが面倒だという方はブックマークをお勧めします。ブックマークの設定は別記事にて掲載しています。

