Linuxコマンド tar(tar形式のアーカイブ)
Linuxのtarコマンドの基本的な使用方法、オプション・ファンクション解説。サンプルを交えたコマンドの実用例等、記載しています。
実用例として、アーカイブ作成、内容表示、ファイル・ディレクトリのアーカイブ化、展開方法、既存アーカイブへの追加、Zip、Bzip2使用した圧縮及び展開、アーカイブ同士の統合方法、アーカイブ内の一部削除など記載。
RHEL Fedora CentOS Vine Deblan Ubuntu Plamo
参考サイト:tar
- 概要・使用方法
 - アーカイブの内容を表示する(非圧縮)
 - 既存のアーカイブファイルにファイルやディレクトリを追加する。
 - 既存のアーカイブファイルの末尾にファイルやディレクトリを追加する。
 - アーキアイブファイルの内容一覧を表示する。
 - アーカイブファイルを展開します。
 - アーキアイブから一部のファイルやディレクトリを取り出す。
 - アーカイブ内のファイルやディレクトリを削除する
 - ファイルを指定してアーカイブを作成する(標準入力/出力)
 - Zip形式で圧縮しアーカイブを作成する
 - Zip形式で圧縮したアーカイブを展開する
 - Bzip2形式で圧縮しアーカイブを作成する
 - Bzip2形式で圧縮されたアーカイブを展開する
 - tarアーカイブにtarアーカイブを統合する
 
概要・使用方法
tar(tape archives)は、UNIX系OSの標準フォーマットである。複数のファイルを1つにまとめたり、ファイルのユーザ情報とグループ情報、パーミッション、最終更新日時、ディレクトリ構造など同時にアーカイブすることができる。元々は、複数のファイルをまとめるための機能であり、圧縮機能はなかった。大半はアーカイブと同時にcompressやgzip、bzip2などの圧縮方法を用いて圧縮。これによりファイルはそれぞれ,.tarZ、.tar.gz、.tar.bz2となる。
デフォルトでは圧縮しないので、-z、-j、-Jオプションを使うことで圧縮ファイルにも対応します。
tarで作成されるアーカイブは、一般に「tar玉」「tarball」と呼ばれている。
使用方法は、tarコマンドの後にファンクションを指定、次にオプションを指定します。アーカイブファイルは-fオプションで指定します。指定しない場合は、標準入力/標準出力が利用されます。
tarコマンドは、そもそもテープストリーマにファイルをバックアップする目的で作成されたコマンドであるため、ファイルとして作成するにはオプションを指定する必要があります。
使用方法は、tarコマンドの後にファンクションを指定、次にオプションを指定します。アーカイブファイルは-fオプションで指定します。指定しない場合は、標準入力/標準出力が利用されます。
書式
$tar [ファンクション][オプション] アーカイブ [ファイル名またはディレクトリ名]多くの場合は、-vオプションを併用し実行結果を表示するようにします。ファイルの属性まで含めて表示されます。オプションのハイフン(-)は、省略することができます。
サンプル:新規にアーカイブファイルを作成する
$tar cf file.tar file1 file2
$tar cvf file.tar file1 file2実行結果を表示するオプション付き
実行結果
[centos@work sample]$tar cf file.tar file1 file2
[centos@work sample]$ls
file1  file2  file.tar
[centos@work sample]$ 複数ディレクトリをアーカイブする方法
ファイルが多数ある場合は、扱いづらいのでディレクトリにまとめて、アーカイブすると良いでしょう。
$tar cvf dir.tar dir1 dir2実行結果
[centos@work sample]$tar cvf dir.tar dir1 dir2
dir1/
dir1/sample2.txt
dir1/sample1.txt
dir2/
dir2/sample4.txt
dir2/sample3.txtファンクション
| -A, –catenate,–concatenate  | アーカイブにファイルを追加する | 
| -c, –create  | アーカイブを作成する | 
| -d –diff, –compare  | アーカイブと実際のファイルの差分を出力する | 
| –delete | アーカイブから指定したファイルを削除する | 
| -r –append  | 指定したファイルをアーカイブの最後に追加する | 
| -t –list  | アーカイブの内容を一覧で表示する | 
| -u –update  | アーカイブの中にあるファイルと同名のファイルより新しいものを追加する。 | 
| -x -extract,–get  | アーカイブからファイルを取得する。存在するアーカイブがあれば上書きせずにバックアップを作成する。 –backup=numberedと指定すればバックアップファイルの末尾に番号をつける  | 
オプション
| -C ディレクトリ名 –directory ディレクトリ名  | ディレクトリに移動し、アーカイブもしくは展開する | 
| –exclude=パターン | パターにマッチしたファイルをアーカイブもしくは展開しない | 
| -f アーカイブ –file [ホスト名] アーカイブ  | 指定したアーカイブ、もしくはデバイスを利用する | 
| –force-local | 指定したアーカイブ、もしくはデバイスを利用する | 
| –group グループ名 | 指定したアーカイブに「:」があった場合、ローカルファイルとして認識する | 
| –group グループ名 | 指定したグループにしてファイルをアーカイブに追加する | 
| -h –dereference  | シンボリックリンク先をアーカイブする | 
| -Z –compress,–uncompress  | compress形式を利用して圧縮/展開する | 
| -z –gzip、–ungzip  | gzip形式を利用して圧縮/展開する | 
| -j –bzip2  | bzip2形式を利用して圧縮/展開する | 
| -J | xz形式を利用して圧縮/展開する | 
| -k –keep-old-files -extract、–get  | 展開時に既に同じファイル名があった場合は、上書きしない | 
| -m –touch  | 展開したファイルの変更時間を反映しない | 
| –modeモード | 指定したパーミッションでアーカイブにファイルを追加する。 「644」の値を利用する  | 
| -N 日付 –after-date 日付、 –newer日付  | 指定した日付より新しいファイルを格納する | 
| -O –to-stdout  | 展開したファイルを標準出力に出力する | 
| –remove-files | アーカイブ追加後に指定したファイルを削除する | 
| –same-owner | アーカイブ内のファイル属性を引き継いで展開する | 
| -T ファイル名 –files-from ファイル名  | 展開もしくは圧縮するファイルを指定したファイルからファイル名を読み込む | 
| -v –verbose  | 処理したファイルの一覧を表示する | 
| -X ファイル名 –exclude-from ファイル名  | 指定したファイル名パターンを除外してから処理する | 
| –suffix=文字 | 出力ファイル名が既に存在する場合はバックアップを作成する。 ファイル名に指定した文字を末尾に付加する。  | 
| –null | ファイル区切りをNULL文字として読む | 
アーカイブの内容を表示する(非圧縮)
アーカイブの内容を表示することができます。比較的よく使うコマンドになります。非圧縮アーカイブが対象となります。
サンプル
$tar tvf cmd.tar実行結果
[centos@work sample]$ ls
cmd.tar  file1  file2  file3  file.tar
[centos@work sample]$tar tvf cmd.tar 
-rwxr-xr-x root/root    100184 2018-05-25 00:32 bin/ps
[centos@work sample]$ 既存のアーカイブファイルにファイルやディレクトリを追加する。
ログファイルなど月に1度や週に1度、毎日といった頻度でアーカイブの更新が必要があります。そのような場合、アーカイブを展開してファイルやディレクトリを追加してアーカイブを作成するのは非効率的なので、既存のアーカイブに追加する方法を使用する。
-uオプションを付けてtarコマンドを実行すると良いでしょう。
サンプル
$tar uvf logfile.tar apachelog_20220101.log実行結果
[centos@work sample]$ tar tvf log.tar 
-rw-rw-r-- centos/centos         5 2022-02-15 15:25 apache_202201.log
-rw-rw-r-- centos/centos         5 2022-02-15 15:25 apache_202202.log
[centos@work sample]$tar uvf log.tar apache_202203.log 
apache_202203.log
[centos@work sample]$tar tvf log.tar 
-rw-rw-r-- centos/centos         5 2022-02-15 15:25 apache_202201.log
-rw-rw-r-- centos/centos         5 2022-02-15 15:25 apache_202202.log
-rw-rw-r-- centos/centos         5 2022-02-15 15:29 apache_202203.log
[centos@work sample]$  既存のアーカイブファイルの末尾にファイルやディレクトリを追加する。
-uオプションでアーカイブファイルにファイルやディレクトリの追加する場合は、同一名称のファイルやディレクトリが存在する場合、タイムスタンプにより、新しいもの一方だけがアーカイブ内に格納されます。
しかし、既存のファイルを保持してアーカイブの末尾にファイルを追加したいこともあります。その場合は、-rオプションを指定してコマンドを実行します。
サンプル
$ tar rvf logfile.tar apachelog_20220101.log実行結果
[centos@work sample]$ tar tvf log.tar 
-rw-rw-r-- centos/centos        5 2022-02-15 15:25 apache_202201.log
-rw-rw-r-- centos/centos        5 2022-02-15 15:25 apache_202202.log
-rw-rw-r-- centos/centos        5 2022-02-15 15:29 apache_202203.log
[centos@work sample]$ tar rvf log.tar apache_202203.log 
apache_202203.log
[centos@work sample]$ tar tvf log.tar 
-rw-rw-r-- centos/centos        5 2022-02-15 15:25 apache_202201.log
-rw-rw-r-- centos/centos        5 2022-02-15 15:25 apache_202202.log
-rw-rw-r-- centos/centos        5 2022-02-15 15:29 apache_202203.log
-rw-rw-r-- centos/centos        5 2022-02-15 15:29 apache_202203.log
[centos@work sample]$ アーキアイブファイルの内容一覧を表示する。
サンプル
$ tar tf file.tar file3実行結果
[centos@work sample]$ls
file1  file2  file3  file.tar
[centos@work sample]$tar tf file.tar
file1
file2
file3
[centos@work sample]$ アーカイブファイルを展開します。
アーカイブファイルを展開するには、-xオプションを付けてtarコマンドを実行します。保存対象がテープではなくファイルである場合はには-fオプションをを付けてください。
展開後もアーカイブファイルは削除されません。展開したディレクトリにアーカイブ内に含まれる同名のファイルやディレクトリがあった場合は、タイムスタンプにより比較され、新しいほうだけが残ります。
ただし、-kオプションを付けて実行することにより、取り出すディレクトリに同名のファイルが存在する場合、エラーメッセージを表示して処理が中断されます。
サンプル
$ tar xf file.tar
$ tar xvf file.tar 実行結果
[centos@work sample]$ls
file.tar
[centos@work sample]$tar xf file.tar
[centos@work sample]$ls
file1  file2  file3  file.tar
[centos@work sample]$ アーキアイブから一部のファイルやディレクトリを取り出す。
基本的には、アーカイブの展開と同様のオプションになりますが、引数にファイル名を指定することで、一部のファイルやディレクトリを展開することができます。
ディレクトリを指定した場合は、再帰的にサブディレクトリも展開します。展開ディレクトリに同名のファイル名、ディレクトリ名がある場合は、タイムスタンプにより比較され、新しいほうでで上書きされます。ただし、-kオプションを付けて実行した場合は、エラーメッセージが表示され中断させることもできます。
サンプル
$ tar xf file.tar ファイル名、ディレクトリ名実行結果
[centos@work sample]$tar xvf log.tar apache_202201.log 
apache_202201.log
[centos@work sample]$ls
apache_202201.log  apache_202203.log  log.tarアーカイブ内のファイルやディレクトリを削除する
アーカイブファイルから格納されているファイルやディレクトリを削除することができます。削除するためには、-deleteオプションを使用します。これは他のtarコマンドのオプションとは異なり、ハイフン2つから構成するロングオプション(–)になり、省略することができません。
また、他のオプションより前に指定する必要があります。
サンプル
$tar --delete -vf アーカイブファイル アーカイブ内のファイル名及びディレクトリ名実行結果
[centos@work sample]$tar tvf log.tar 
-rw-rw-r-- centos/centos         5 2022-02-15 15:25 apache_202201.log
-rw-rw-r-- centos/centos         5 2022-02-15 15:25 apache_202202.log
-rw-rw-r-- centos/centos         5 2022-02-15 15:29 apache_202203.log
-rw-rw-r-- centos/centos         5 2022-02-15 15:29 apache_202203.log
[centos@work sample]$tar --delete -vf log.tar apache_202201.log 
[centos@work sample]$tar tvf log.tar 
-rw-rw-r-- centos/centos         5 2022-02-15 15:25 apache_202202.log
-rw-rw-r-- centos/centos         5 2022-02-15 15:29 apache_202203.log
-rw-rw-r-- centos/centos         5 2022-02-15 15:29 apache_202203.log
[centos@work sample]$ ファイルを指定してアーカイブを作成する(標準入力/出力)
サンプル
$ tar cv /bin/ls /bin/ps > cmd.tar
$ tar tv < cmd.tar実行結果
[centos@work sample]$ls
file.tar
[centos@work sample]$tar xf file.tar
[centos@work sample]$ls
file1  file2  file3  file.tar
[centos@work sample]$ Zip形式で圧縮しアーカイブを作成する
tarコマンドのフィルタとして、よく用いられるZipコマンドを使用して圧縮する方法。拡張子は慣習として「.tgz」及び「tar.gz」が使用します。
サンプル
$tar czvf アーカイブファイル名 ファイル名、ディレクトリ名実行結果
[centos@work sample]$tar czvf log.tgz apache_202201.log 
apache_202201.log
[centos@work sample]$ls -la
total 28
drwxrwxr-x 2 centos/centos  4096 Feb 15 16:56 .
drwx------ 9 centos/centos  4096 Feb 15 15:29 ..
-rw-rw-r-- 1 centos/centos     5 Feb 15 15:25 apache_202201.log
-rw-rw-r-- 1 centos/centos   136 Feb 15 16:56 log.tgz
-rw-rw-r-- 1 centos/centos 10240 Feb 15 16:49 log.tar
[centos@work sample]$ Zip形式で圧縮したアーカイブを展開する
展開を意味する-xオプション、及びzipをフィルタにすることを意味する-zオプションを使用します。
サンプル
$tar xzvf アーカイブファイル名 ファイル名・・・、ディレクトリ名・・・実行結果
[centos@work sample]$tar xzvf log.tgz 
apache_202201.log
[centos@work sample]$ls
apache_202201.log  log.tar  log.tgz
[centos@work sample]$ Bzip2形式で圧縮しアーカイブを作成する
Bzip2形式で圧縮しアーカイブを作成するには、-jオプションを使用します。アーカイブの拡張子は慣習として、「.tbz2」及び「.tar.bz2」という拡張子にします。
サンプル
$tar cvjf アーカイブファイル名.tbz2 ファイル名・・・、ディレクトリ名・・・Bzip2形式で圧縮されたアーカイブを展開する
Bzip2形式で圧縮しアーカイブを作成するには、-jオプションを使用します。展開を意味する-xオプションも併用します。
サンプル
$tar xvjf アーカイブファイル名.tbz2tarアーカイブにtarアーカイブを統合する
-Aオプションを使用することで、2つのアーカイブを1つのアーカイブに統合することができます。左辺に指定したアーカイブファイルに統合します。
サンプル
$tar Avf アーカイブ名.tar アーカイブ名.tar 実行結果
[centos@work sample]$ tar tf log1.tar
apache_202201.log
[centos@work sample]$ tar tf log2.tar
apache_202202.log
apache_202203.log
apache_202203.log
[centos@work sample]$ tar Avf log1.tar log2.tar 
[centos@work sample]$ tar tf log1.tar
apache_202201.log
apache_202202.log
apache_202203.log
apache_202203.log
[centos@work sample]$