目標

「ファイルの種類」について確認する
「アーカイブファイルとディレクトリファイル」について概要を理解する。
「アーカイブと圧縮」について概要を理解する。
「ファイルの圧縮コマンドと解凍コマンド」の基本操作を理解する。
「アーカイブファイル作成コマンドとオプションを利用した圧縮」の基本操作を理解する。
「ddコマンド」でのファイルのコピーについて基本操作を理解する。

ファイル

ファイルの種類

Linuxではファイルの種類として次のものがあります。

ファイルの種類ls -lコマンドで表示した時の結果
普通のファイル(Reguler File)「-」
ディレクトリファイル「d」
シンボリックリンク「l」
キャラクタ型デバイスファイル 
※特殊ファイル
「c」
ブロック型デバイスファイル
※特殊ファイル
「b」

アーカイブファイルとディレクトリファイル

アーカイブファイルはファイルやディレクトリをひとまとめにしたファイル(普通のファイル)のことです。まとめるものとして似て非なるものにディレクトリ(ディレクトリファイル)があります。

ディレクトリもファイルの仲間です。但し、通常ファイル(普通のファイル)のようにファイルを編集することはありません。※ディレクトリの中にあるファイル名の変更などは行えます。ファイルをまとめておくことのできる「特別なファイル」をディレクトリと呼びます。

実際の表現とは異なりますが、違いをイラストでイメージするなら次のようになります。

ディレクトリは「ファイルの名前」と「ファイルを管理する番号(i-node番号)」の対応表をもつファイルです。この番号へのリンク(ハードリンク)があることでファイル名を利用して操作が可能となります。

※i-node番号はユーザーが直接利用することはありません。

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はオプションのこと

コマンドの参考資料はこちら

オプションには「d」「c」「f」などがあります。
「d」:圧縮ファイルを解凍する。
「c」:標準出力への出力。
「r」:ディレクトリ内のひとつひとつのファイルを圧縮。
※ディレクトリ自体の圧縮ではありません。

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

続いて任意のディレクトリ内のファイルを一度に圧縮してみようと思います。

次のコマンドは長くて記事上では改行されていますが、本来は一行です。
「mvコマンド」では複数のファイルを同時に同じディレクトリに移動する時は「mv ファイル1 ファイル2 … 移動先ディレクトリ/.」のように入力します。最後の「/.」が重要な部分です。

[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はオプションのこと

コマンドの参考資料はこちら

オプションには「d」「c」などがあります。
「d」:圧縮ファイルを解凍する。
「c」:標準出力への出力。
「z」:圧縮を行います。

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コマンドではオプションにつける「-」を省略できます。

コマンドの参考資料はこちら

オプションでは「c」「f」「t」「v」「r」「x」「z」などをよく利用します。
「c」:アーカイブを作成します。
「f」:アーカイブファイルの名前を指定します。
「t」:アーカイブの内容を確認します。
「v」:詳細情報を表示します。
「r」:アーカイブにファイルを追加します。
「x」:アーカイブからファイルを取り出します。
「z」:gzipを使った圧縮・解凍を行います。
「–delete」:アーカイブからファイルを削除します。

cpioコマンド

cpioコマンド…複数のファイルやディレクトリを(cpio形式の)アーカイブファイルとしてひとつにまとめたり、アーカイブファイルからファイルの抽出を行うことができます。※オプションによる圧縮・解凍の操作はありません。

文法:
cpio フラグ [省略できるOP]

作成(コピーアウトモード)
find ファイル名 | cpio -o [省略できるOP] > アーカイブファイル
ls ディレクトリ名 | cpio -o [省略できるOP] > アーカイブファイル
抽出(コピーインモード)
cpio -i [省略できるOP] < アーカイブファイル
別ディレクトリへのファイルのコピー(コピーパスモード)
find ファイル名 | cpio -p アーカイブファイル

※OPはオプションのこと

コマンドの参考資料はこちら

cpioコマンドでのアーカイブファイルの作成には「findコマンド」や「lsコマンド」などの標準入力を利用してファイルリストを指定して作成します。

cpioコマンドではフラグとして「i」「o」「p」、オプションとして「d」「t」などがよく利用されます。
「d」:コマンド利用時に必要なディレクトリを作成します。
「t」:アーカイブファイルの中身を確認できます。

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 if=/dev/sdb of=/dev/sdc とするとデバイス「/dev/sdb」のパーティション情報・ファイルシステムを含めたディスクの内容をデバイス「/dev/sdc」へコピーすることができます。

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

今回は以上になります。

「Linux」おすすめ書籍6選【初心者・脱初心者用】| 現役エンジニア&プログラミングスクール講師「Linux」初心者の方がLinuxの操作や仕組みを理解するためのお勧めの書籍について取り上げています。また中級者として更に進んだ学習ができる書籍についても1冊取り上げています。ページの下部には「おすすめのITスクール情報」「おすすめ求人サイト」について情報を掲載中。...

ブックマークのすすめ

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

「お気に入り」の登録・削除方法【Google Chrome / Microsoft Edge】「お気に入り」の登録・削除方法【Google Chrome / Microsoft Edge】について解説している記事です。削除方法も掲載しています。...
【パソコン選び】失敗しないための重要ポイント | 現役エンジニア&プログラミングスクール講師【パソコン選び】失敗しないための重要ポイントについての記事です。パソコンのタイプと購入時に検討すべき点・家電量販店で見かけるCPUの見方・購入者が必要とするメモリ容量・HDDとSSDについて・ディスプレイの種類・バッテリーの持ち時間や保証・Officeソフト・ウィルス対策ソフトについて書いています。...