アーカイブファイルの作成 ~tar、cpioコマンド~
本記事の対象者
LPIC level1習得を目指す初学者の方
コマンドの基本的な用途について、要点を絞って解説します。
今回の内容
今回は、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」) |
[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」オプションを組み合わせて、アーカイブファイル名を指定し、処理の詳細情報を表示しています。
[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」が削除されるわけではありません。
[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に同じ。 |
[root@localhost ~]# ls sample*.txt | cpio -ov > sample.cpio sample001.txt sample002.txt 1ブロック [root@localhost ~]# ls sample001.txt sample002.txt sample.cpio
これは出力モードです。「|(パイプ)」の左の「ls sample*.txt」の標準入力からファイルリストを受け取り、そのファイルリストから標準出力を通して「sample.cpio」を作成しています。「>」は標準出力先の指定です。
「sample.cpio」アーカイブが作成されているのが分かります。また、元のテキストファイルが削除されるわけではありません。
[root@localhost ~]# cpio -itv < 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の試験範囲です。実務ではあまりお目にかかることはないかもしれません)
最後に確認問題で今回学習した内容を是非確かめてください。
確認問題
「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
「sample.cpio」からファイルを抽出するコマンドとして正しいものはどれか。
A) cpio -t < sample.cpio
B) cpio -i > sample.cpio
C) cpio -iv < sample.cpio
D) ls sample | cpio -o > sample.cpio