Infra Engineer

アーカイブファイルの作成 ~tar、cpioコマンド~
2021.07.29
Lv1

アーカイブファイルの作成 ~tar、cpioコマンド~

本記事の対象者

LPIC level1習得を目指す初学者の方
コマンドの基本的な用途について、要点を絞って解説します。


今回の内容

今回は、tar・cpioコマンドについて解説します。アーカイブファイルの作成や展開・コピーに関するコマンドです。複数の関連ファイルをまとめて他に渡したい時、まとめて圧縮したい時などに使用します。

tar
cpio
まとめ
確認問題


tar

「tar」コマンドは、tar形式のアーカイブファイルの作成・展開に使用します。
元のファイルやディレクトリは失われません。また、アーカイブファイルはそれらをひとまとまりとして扱います。
アーカイブにすることで中の個別のファイルをディレクトリの中身のように扱うことはできなくなります。そのまま塊の状態で扱い、中身の個別のファイルを扱う段階で展開します。tar形式のファイルに「ls」を実行しても中身を表示させることはできません。
※アーカイブファイルとは、複数のファイルをひとつにまとめたファイルのことです。「圧縮」とは厳密には異なります。

tarコマンド
意味 tar形式アーカイブファイルの作成と展開
書式 tar [オプション] [ファイル名 or ディレクトリ名]

主なオプションは以下です。

オプション(操作) 説明(こちらはひとつだけ指定可能)
-c 新規にアーカイブを作成する。
–createに同じ。(createは「作る」の意)
-t アーカイブの内容一覧を表示する。
–listに同じ。
-x アーカイブからファイルを抽出する。(展開する)
–extractに同じ。(extractは「抽出」の意)
-r アーカイブにファイルを追加する。
–appendに同じ。(appendは「追加」の意)
–delete アーカイブからファイルを削除する。
※-dオプション(アーカイブとファイルシステムの比較)が別に存在するので注意。
オプション(その他) 説明(こちらは複数指定可能)
-f アーカイブファイル名を指定する。
–fileに同じ。
-v 処理の詳細情報を表示する。
–verboseに同じ。(verboseは「冗長」の意)
-z gzip形式でアーカイブを圧縮・解凍する。(拡張子「.tar.gz」)
–gzipに同じ。
-j gzip形式よりも圧縮率が高いBZIP2形式でアーカイブを圧縮・解凍する。(拡張子「.tar.bz2」)
–bzip2に同じ。
-J(大文字) BZIP2形式よりも圧縮率が高いXZ形式でアーカイブを圧縮・解凍する。(拡張子「.tar.xz」)
例)
「exdir001」「exdir002」ディレクトリから「exdirex.tar」というアーカイブを作成。(-c) ※表示結果は一部省略しています。
[root@localhost ~]# tar cvf exdirex.tar exdir001 exdir002
exdir001/
exdir001/xaq
exdir001/xan
...(中略)
[root@localhost ~]# ls
exdir001 exdir002 exdirex.tar

「-c」オプションで「exdirex.tar」というアーカイブファイルを作成しています。
「v」「f」オプションを組み合わせて、アーカイブファイル名を指定し、処理の詳細情報を表示しています。

例)
「exdirex.tar」アーカイブファイルを「exdir003」ディレクトリに展開。(-x) ※表示結果は一部省略しています。
[root@localhost ~]# mkdir exdir003
[root@localhost ~]# tar xvf exdirex.tar -C exdir003
exdir001/
exdir001/xaq
exdir001/xan
 ...(中略)
[root@localhost ~]# ls exdir003
exdir001 exdir002
[root@localhost ~]# ls
exdir001 exdir002 exdirex.tar exdir003 

「-x」オプションで「exdirex.tar」アーカイブを展開しています。
「-C」はカレントディレクトリを指定したディレクトリに変更してから実行するオプションです。これで展開先を「exdir003」にしています。
exdir003を確認すると展開後の「exdir001」「exdir002」があるのが分かります。また、元の「exdirex.tar」が削除されるわけではありません。

例)
「exdir001」ディレクトリをアーカイブ化して、同時にgzip形式の圧縮を行う。
[root@localhost ~]# ls
exdir001
[root@localhost ~]# ls exdir001
ex.txt
[root@localhost ~]# tar cvfz exdir.tar.gz exdir001
exdir001/
exdir001/ex.txt
[root@localhost ~]# ls
exdir001 exdir.tar.gz

tarコマンドは実際にはこのように複数ファイルをまとめて圧縮する際に使用できます。


cpio

「cpio」コマンドは、アーカイブへのファイルのコピーや、アーカイブからファイルをコピーする際に使用します。
アーカイブ形式としてtar形式とcpio形式の2種類を扱うことができます。

cpioコマンド
意味 ・アーカイブへファイルのコピーをする。
・アーカイブからファイルをコピーする。
書式 ・cpio [オプション] < ファイル名
・コマンド | cpio [オプション]

主なオプションは以下です。

オプション 説明
-i アーカイブからファイルを取得する。(入力モード、コピーインモード)
–extractに同じ。(extractは「抽出」の意)
-o アーカイブを作成する。(出力モード、コピーアウトモード)
–createに同じ。(createは「作る」の意)
-t ファイル名の一覧を表示する。
–listに同じ。
例)
「sample」をファイル名に含むテキストファイル全てを「sample.cpio」アーカイブとして作成。(-o)
[root@localhost ~]# ls sample*.txt | cpio -ov &gt; sample.cpio
sample001.txt
sample002.txt
1ブロック
[root@localhost ~]# ls
sample001.txt sample002.txt sample.cpio

これは出力モードです。「|(パイプ)」の左の「ls sample*.txt」の標準入力からファイルリストを受け取り、そのファイルリストから標準出力を通して「sample.cpio」を作成しています。「>」は標準出力先の指定です。
「sample.cpio」アーカイブが作成されているのが分かります。また、元のテキストファイルが削除されるわけではありません。

例)
「sample.cpio」アーカイブの内容を出力。(-i)
[root@localhost ~]# cpio -itv &lt; sample.cpio
-rw-rw-r--   1 root  root  0 Jul 29 11:16 sample001.txt
-rw-rw-r--   1 root  root  0 Jul 29 11:16 sample002.txt
1 ブロック

標準入力から「sample.cpio」アーカイブを受け取り、そのアーカイブの内容をを表示しています。
「<」は、これの右から標準入力を受け取ることを示します。


まとめ

今回は、アーカイブに関する「tar」コマンドと「cpio」コマンドについて解説しました。
これらは単体ではアーカイブ化のみを行い、圧縮は行いません。「tar」コマンドはオプションを使用することでアーカイブ化と圧縮を同時に行うことができます。
tar形式とcpio形式では何が違うのか気になるという方は是非調べてみてください。(cpioは廃れる可能性もあるコマンドのようですが、現状まだLPICの試験範囲です。実務ではあまりお目にかかることはないかもしれません)

最後に確認問題で今回学習した内容を是非確かめてください。

確認問題

問題1

「sample」ディレクトリから「sample.tar」というアーカイブを作成するコマンドはどれか。

A) tar cvf sample sample.tar
B) tar xvf sample.tar sample
C) tar cf sample.tar sample
D) tar xf sample sample.tar

解答・解説
答え:C

A) ⇒ 「f」はアーカイブファイル名の指定です。この後に「sample」を書くことはできません。
B) ⇒ 「x」はアーカイブの展開です。
C) ⇒ 正解です。「v」は詳細表示のオプションであり、必須ではありません。
D) ⇒ 「x」はアーカイブの展開です。

問題2

「sample.cpio」からファイルを抽出するコマンドとして正しいものはどれか。

A) cpio -t < sample.cpio
B) cpio -i > sample.cpio
C) cpio -iv < sample.cpio
D) ls sample | cpio -o > sample.cpio

解答・解説
答え:C

A) ⇒ 「t」は一覧の表示です。
B) ⇒ 「>」は標準出力先の指定です。
C) ⇒ 正解です。「v」は詳細表示のオプションです。
D) ⇒ 「ls sample」の標準出力のファイル一覧を受け取り、「sample.cpio」アーカイブを作成するコマンドです。