EN JA
TAR(1)
TAR(1) FreeBSD General Commands Manual TAR(1)

名称

tarテープアーカイブを操作する

書式

tar [ bundled-flags <args>][ < file> | < pattern> ...]

tar { -c}[ options][ files | directories]

tar { -r | -u} -f archive-file [ options][ files | directories]

tar { -t | -x}[ options][ patterns]

解説

tar は、ストリーミングアーカイブファイルを作成して、操作します。この実装は、 tar, pax, cpio, zip, jar, ar, xar, rpm, 7-zip と ISO 9660 cdrom イメージから抽出することができ、 tar, pax, cpio, ar, zip, 7-zip shar アーカイブを作成することができます。

最初の書式の形式は、“バンドルされた” (bundled) オプションの単語を示します。この使用法は、歴史的な実装との互換性のために提供されています。詳細については、下記の「互換性」を参照してください。

その他の書式の形式は、好ましい使用法を示します。 tar への最初のオプションは、次のリストのモード指示子です:

-c
指定されたアイテムを含んでいる、新しいアーカイブを作成します。長いオプション形式は、 - -create です。
-r
-c と似ていますが、新しいエントリは、アーカイブに追加されます。なおこれは、通常ファイルに保存された非圧縮アーカイブに対してのみ動作することに注意してください。 -f オプションが必要です。長いオプション形式は、 - -append です。
-t
標準出力にアーカイブ内容のリストを出力します。長いオプション形式は、 - -list です。
-u
-r と似ていますが、新しいエントリの変更時刻が、アーカイブ内の対応するエントリのものよりも新しい場合のみ、追加されます。なおこれは、通常ファイルに保存された非圧縮アーカイブに対してのみ動作することに注意してください。 -f オプションが必要です。長い形式は、 - -update です。
-x
アーカイブからディスクに展開します。もし同名のファイルがアーカイブ内に複数回現れた場合、それぞれのコピーが展開され、後のものがそれ以前のコピーを上書き (置換) します。長いオプション形式は、 - -extract です。

-c, -r, -u モードにおいて、指定されたファイルまたはディレクトリは、コマンドラインで指定された順にアーカイブに追加されます。デフォルトでは、各ディレクトリ内のファイルもアーカイブされます。

展開またはリストモードでは、アーカイブをオープンする前にコマンドライン全体が読み込まれ、解析されます。コマンドラインのパス名またはパターンは、アーカイブ内の処理対象となるアイテムを示します。パターンは、シェル形式のグロブパターンであり、 tcsh(1) に文書化されています。

オプション

明記していないオプションは、全ての操作モードに適用可能です。
@ archive
(c と r モードのみ) 指定されたアーカイブがオープンされ、そのエントリが現在のアーカイブに追加されます。簡単な例として、
tar -c -f - newfile @original.tar
ではファイル newfile と、 original.tar の全てのエントリを含む、新しいアーカイブを標準出力に書き込みます。対照的に、
tar -c -f - newfile original.tar
では、二つのエントリのみの新しいアーカイブを作成します。また、
tar -czf - --format pax @-
では標準入力からアーカイブを読み込み (フォーマットは、自動的に判別)、 gzip で圧縮した pax フォーマットアーカイブに変換して、標準出力に出力します。このように、 tar は、アーカイブのフォーマットを別のものに変換するために使用することができます。
-a, - -auto-compress
(c モードのみ) 1 組の書式と圧縮を決定するアーカイブ接尾辞を使用します。単純な例として、
tar -a -cf archive.tgz source.c source.h
は、制限された pax 形式と gzip 圧縮で新しいアーカイブを作成し、
tar -a -cf archive.tar.bz2.uu source.c source.h
は、制限された pax 形式と bzip2 圧縮と uuencode 圧縮で新しいアーカイブを作成し、
tar -a -cf archive.zip source.c source.h
creates a new archive with zip format, は、zip 形式で新しいアーカイブを作成し、
tar -a -jcf archive.tgz source.c source.h
は、“-j”オプションを無視し、制限された pax 形式と gzip 圧縮で新しいアーカイブを作成し、
tar -a -jcf archive.xxx source.c source.h
は、それが未知の接尾辞か、または接尾辞がないなら、制限された pax 形式と bzip2 圧縮で新しいアーカイブを作成します。
-B, - -read-full-blocks
他の tar(1) の実装との互換性のために無視されます。
-b blocksize, - -block-size blocksize
テープドライブの I/O に対するブロックサイズを、512 バイトレコード単位で指定します。一般に、本引数は、テープドライブに読み書きする場合にのみ必要であり、たとえその場合であってもデフォルトのブロックサイズである 20 レコード (10240 バイト) は、とても普遍的な値であるので、通常必要ありません。
-C directory, - -cd directory, - -directory directory
c と r モードにおいては、続くファイルを追加する前に、ディレクトリを変更します。 x モードにおいては、アーカイブをオープンした後、エントリをアーカイブから展開する前にディレクトリを変更します。
- -chroot
(x モードのみ) 任意の -C オプションを処理した後、および任意のファイルを抽出する前にカレントディレクトリを chroot() します。
- -disable-copyfile
Mac OS X 特有です。 copyfile(3) の使用を無効にします。
- -exclude pattern
指定したパターンにマッチするファイルやディレクトリを、処理しません。なおこれは、コマンドラインで指定したパターンやファイル名よりも優先することに注意してください。
- -format format
(c, r, u モードのみ) 作成するアーカイブのフォーマットを指定するのに用います。サポートされるフォーマットには、“cpio”, “pax”, “shar”, “ustar”があります。また他のフォーマットもサポートされているかもしれません。現在サポートされているフォーマットの詳細な情報については、 libarchive-formats(5) を参照してください。 r と u モードで、既存のアーカイブを拡張するとき、ここで指定された形式は、ディスク上の既存のアーカイブの形式と互換性がなければなりません。
-f file, - -file file
指定されたファイルに対してアーカイブを読んだり書いたりします。ファイル名を - にすれば、標準入力または標準出力になります。デフォルトは、システムによって異なります。 FreeBSD では、デフォルトは、 /dev/sa0 です。 Linux では、デフォルトは、 /dev/st0 です。
- -gid id
提供されたグループ ID 番号を使用します。抽出のときに、これは、アーカイブのグループ ID を上書きします。アーカイブのグループ名は、無視されます。作成のとき、これは、ディスクから読み込むグループ ID を上書きします。また、 - -gname が指定されないなら、グループ名は、グループ ID にマッチするように設定されます。
- -gname name
提供されたグループ名を使用します。抽出のときに、これは、アーカイブのグループ名を上書きします。提供されたグループ名がシステムに存在していななら、 (アーカイブまたは - -gid オプションからの) グループ ID が代わりに使用されます。作成のとき、これは、アーカイブに格納されるグループ名を設定します。名前は、システムグループデータベースに対して検証されません。
-H
(c と r モードのみ) コマンドラインで指定されたシンボリックリンクを追跡します。リンク自身ではなく、リンクの対象をアーカイブします。
-h
(c と r モードのみ) -L と同じ意味です。
-I
-T と同じ意味です。
- -help
使用法を表示します。
- -hfsCompression
(x モードのみ) Mac OS X 特有 (v10.6 以降)。 HFS+ 圧縮で抽出された通常ファイルを圧縮します。
- -include pattern
指定したパターンにマッチしたファイルまたはディレクトリのみ処理します。なおこの指定よりも、 - -exclude による除外指定が優先することに注意してください。これを明示しなければ、デフォルトでは、全てのエントリが処理されます。この - -include オプションは、アーカイブをフィルタリングするのに特に有用です。例として、次のコマンド
tar -c -f new.tar --include='*foo*' @old.tgz
では、 old.tgz のエントリのうち、文字列‘foo’を含んでいるものだけを含む、新しいアーカイブ new.tar を作成します。
-J, - -xz
(c モードのみ) 結果のアーカイブを xz(1) で圧縮します。抽出またはリストモードで、このオプションは、無視されます。他の tar の実装と異なって、この実装は、アーカイブを読み込むとき、自動的に XZ 圧縮を識別することに注意してください。
-j, - -bzip, - -bzip2, - -bunzip2
(c モードのみ) 作成するアーカイブを bzip2(1) で圧縮します。展開またはリストモードでは、本オプションは、無視されます。なお他の tar 実装と異なって、この実装は、アーカイブを読み込むとき、自動的に bzip2 圧縮を識別することに注意してください。
-k, - -keep-old-files
(x モードのみ) 既存のファイルを上書きしません。特に、アーカイブ内にあるファイルが複数回現れても、後のコピーがそれ以前のコピーを上書きすることはしません。
- -keep-newer-files
(x モードのみ) 抽出されるアーカイブに出現するバージョンより新しい既存のファイルを上書きしません。
-L, - -dereference
(c と r モードのみ) 全てのシンボリックリンクを追跡します。通常、シンボリックリンクは、そのままアーカイブされます。本オプションにより、リンクの対象が代わりにアーカイブされます。
-l, - -check-links
(c と r モードのみ) 各ファイルへのすべてのリンクがアーカイブされていないいなら、警告メッセージを発行します。
- -lrzip
(c モードのみ) lrzip(1) で結果のアーカイブを圧縮します。抽出モードまたはリストモードで、このオプションは、無視されます。
- -lzma
(c モードのみ) オリジナルの LZMA アルゴリズムで結果のアーカイブを圧縮します。このオプションの使用は、お勧めできません、新しいアーカイブは、代わりに - -xz で作成されるべきです。他の tar の実装と異なって、この実装は、アーカイブを読み込むとき、自動的に LZMA 圧縮を識別することに注意してください。
- -lzop
(c モードのみ) lzop(1) で結果のアーカイブを圧縮します。抽出モードまたはリストモードで、このオプションは、無視されます。
-m, - -modification-time
(x モードのみ) ファイル更新時刻を展開しません。デフォルトでは、更新時刻は、アーカイブに納められている時刻に設定されます。
-n, - -norecurse, - -no-recursion
(c, r, u モードのみ) ディレクトリ内のファイルを再帰的にアーカイブしません。
- -newer date
(c, r, u モードのみ) 指定された日付よりも新しいファイルとディレクトリのみ対象とします。 ctime エントリを比較します。
- -newer-mtime date
(c, r, u モードのみ) - -newer と似ていますが、ctime エントリではなく、mtime エントリを比較します。
- -newer-than file
(c, r, u モードのみ) 指定されたファイルよりも新しいファイルとディレクトリのみ対象とします。 ctime エントリを比較します。
- -newer-mtime-than file
(c, r, u モードのみ) - -newer-than と似ていますが、ctime エントリではなく、mtime エントリを比較します。
- -nodump
(c と r モードのみ) nodump ファイルフラグを尊重して、このファイルをスキップします。
- -nopreserveHFSCompression
(x モードのみ) Mac OS X 特有 (v10.6 以降)。アーカイブされる前に HFS+ 圧縮で圧縮された抽出された通常ファイルを圧縮しません。デフォルトで、HFS+ 圧縮で通常ファイルを再び圧縮します。
- -null
( -I または -T と共に使用) ファイル名またはパターンが改行ではなく、ヌル文字で区切られているものとします。これは、 find(1)-print0 オプションによるファイル名出力を読み込むのによく使用されます。
- -no-same-owner
(x モードのみ) 所有者とグループ ID を抽出しません。これは、 - -same-owner の逆で、 tar が root 以外のユーザで実行されているなら、デフォルトの振る舞いです。
- -no-same-permissions
(x モードのみ) 全部のパーミッション (SGID、SUID、スティッキビット、ACL、拡張属性または拡張ファイルフラグ) を抽出しません。これは、 -p の逆で、 tar が root 以外のユーザで実行されているなら、デフォルトの振る舞いです。
- -numeric-owner
これは、 - -uname “” - -gname “”と同等です。抽出のとき、それによって、アーカイブのユーザとグループ名は、数値ユーザとグループ ID を優先して無視されます。作成のとき、それによって、ユーザとグループ名は、アーカイブに格納されません。
-O, - -to-stdout
(x, t モードのみ) 展開 (-x) モードでは、ファイルは、ディスクに展開されずに標準出力に書き込まれます。リスト (-t) モードでは、ファイルリストは、通常の標準出力でなく標準エラーに書き込まれます。
-o
(x モード) ユーザとグループを、アーカイブ中で指定されたものではなく、本プログラムを実行しているユーザのものを使用します。なおこれは、 -p を指定し、かつ本プログラムを root ユーザが実行していなければ意味がないことに注意してください。この場合、ファイルモードとフラグは、アーカイブからリストアされますが、アーカイブ中の ACL や所有者の情報は、破棄されます。
-o
(c, r, u モード) - -format ustar と同義語です。
- -older date
(c、r、u モードのみ) 指定された日付より古いファイルとディレクトリのみを含めます。これは、ctime エントリを比較します。
- -older-mtime date
(c、r、u モードのみ) ctime エントリの代わりに mtime エントリを比較することを除いて、 - -older と同様です。
- -older-than file
(c、r、u モードのみ) 指定されたファイルより古いファイルとディレクトリのみを含めます。これは、ctime エントリを比較します。
- -older-mtime-than file
(c、r、u モードのみ) ctime エントリの代わりに mtime エントリを比較することを除いて、 - -older-than, と同様です。
- -one-file-system
(c, r, u モード) マウントポイントをまたぎません。
- -options options
特定のモジュールのためのオプションの振る舞いを選択する。引数は、コンマで区切られたされたキーワードと値を含むテキスト文字列です。これらは、それらの形式がどのように振る舞うかを制御するために特定の形式を取り扱うモジュールに渡されます。各オプションには、次の形式の 1 つがあります:
key=value
key は、それをサポートするすべてのモジュールで指定された値に設定されます。このキーをサポートしないモジュールは、それを無視します。
key
key は、それをサポートするすべてのモジュールで有効にされます。これは、 key =1 と同等です。
!key
key は、それをサポートするすべてのモジュールで無効とされます。
module:key=value, module:key, module:!key
上記の通りですが、対応するキーと値は、名前が module にマッチしているモジュールだけ提供されます。
現在サポートされるモジュールとキーは、次のの通りです:
iso9660:joliet
Joliet 拡張をサポートします。これは、デフォルトで有効にされ、無効にするためには、 !joliet または iso9660:!joliet を使用します。
iso9660:rockridge
ロックリッジ (Rock Ridge) 拡張をサポートします。これは、デフォルトで有効にされ、無効にするためには、 !rockridge または iso9660:!rockridge を使用します。
gzip:compression-level
gzip 圧縮レベルを指定する 1 から 9 の 10 進整数。
gzip:timestamp
格納タイムスタンプ。これは、デフォルトで有効です、無効にするためには、 !timestamp または gzip:!timestamp を使用します。
lrzip:compression= type
圧縮メソッドとして type を使用します。サポートされる値は、bzip2、gzip、lzo (超高速) と zpaq (最良、非常に遅い) です。
lrzip:compression-level
lrzip 圧縮レベルを指定する 1 から 9 までの 10 進の整数。
lzop:compression-level
lzop 圧縮レベルを指定する 1 から 9 までの 10 進の整数。
xz:compression-level
xz 圧縮レベルを指定する 0 から 9 の 10 進整数。
mtree: keyword
mtree ライタモジュールによって、利用者は、どの mtree キーワードが出力中に含まれるかを指定できます。サポートしているキーワードは、次の通りです: cksum, device, flags, gid, gname, indent, link, md5, mode, nlink, rmd160, sha1, sha256, sha384, sha512, size, time, uid, uname。デフォルトは、次と同等です: “device, flags, gid, gname, link, mode, nlink, size, time, type, uid, uname”。
mtree:all
上記のキーワードのすべてを有効にする。また、利用者は、すべてのキーワードを無効にするために mtree:!all を使用できます。
mtree:use-set
出力中に /set 行の生成を有効にします。
mtree:indent
段付け (indent) オプションと 80 カラムに適合するように行を分割することによって、人間に読み込み可能な出力を生成します。
zip:compression= type
圧縮メソッドとして type を使用します。サポートされている値は、store (復元される) と deflate (gzip アルゴリズム) です。
提供されたオプションが任意のモジュールでサポートされないなら、それは、致命的なエラーです。
-P, - -absolute-paths
パス名を保持します。デフォルトでは、アーカイブの作成と展開の両方において、絶対パス名 (/ 文字で始まっているもの) の最初のスラッシュは、取り除かれます。また tar は、パス名に .. を含んでいたり、対象ディレクトリをシンボリックリンクで変更したりするアーカイブエントリの展開を拒否します。本オプションは、これらの振舞いを抑制します。
-p, - -insecure, - -preserve-permissions
(x モードのみ) ファイルパーミッションを保持します。アーカイブから各アイテムを展開する際、もしあれば、所有者、ファイルモード、ファイルのフラグと ACL を含む、全てのパーミッションをリストアしようとします。これは、 tar が root 以外のユーザで実行されているなら、デフォルトです、そして - -no-same-owner- -no-same-permissions を指定することによって上書きすることができます。
- -posix
(c, r, u モードのみ) - -format pax と同義語です。
-q, - -fast-read
(x と t モードのみ) 各パターンまたはファイル名のオペランドにマッチする最初のアーカイブエントリだけを、抽出するか、またはリストします。それぞれ指定されたパターンまたはファイル名がマッチするとすぐに終了します。デフォルトで、アーカイブは、同じ名前の複数のエントリがあるかもしれなくて、慣例により後のエントリが前のエントリを上書きするので、常に最後まで読み込まれます。このオプションは、性能の最適化として提供されています。
-S
(x モードのみ) スパースファイルとしてファイルを抽出します。ディスク上のすべてのブロックに関して、最初に、ヌルバイトだけを含むかどうかチェックして、そうでなければ、抽出します。これは、dd の conv=sparse オプションと同様に動作します。
-s pattern
pattern (パターン) に従って、ファイルまたはアーカイブメンバ名を変更します。パターンは、形式 /old/new/[ ghHprRsS]で、ここで old は、基本的な正規表現、 new は、マッチした部分の置き換え文字列です、そしてオプションの後続する文字は、置き換えがどのように操作されるかを変更します。 old がマッチしないなら、パターンは、スキップされます。 new 内の ~ は、マッチしたものに置き換えられ、\1 から\9 は、対応する捕獲されたグループの内容です。オプションの後続する g は、マッチがマッチされた部分の後の続くべきであることを指定し、最初のマッチしないパターンで停止します。オプションの後続する s は、パターンがシンボリックリンクの値に適用されることを指定します。オプションの後続する p は、成功した置換の後に、オリジナルのパス名と新しいパス名が標準エラーに印刷 (表示) されるべきであることを指定します。オプションの後続する H、R または S 文字は、ハードリンクのターゲット、通常のファイル名またはシンボリックリンクのターゲットのための置き換えを抑制します。オプションの後続する h、r または s 文字は、ハードリンクのターゲット、通常のファイル名またはシンボリックリンクのターゲットのための置き換えを有効にします。デフォルトは、すべての名前の置き換えを適用する hrs です。特に、h、r または s を指定することは決して必要ではありません。
- -same-owner
(x モードのみ) 所有者とグループ ID を抽出します。これは、 - -no-same-owner と逆で、 tar が root として実行されているなら、デフォルトの振る舞いです。
- -strip-components count
先導されるパスの要素の指定された数を削除します。要素が少ないパス名は、黙ってスキップされます。パス名は、含有/除外パターンのチェックの後でセキュリティチェックの前に編集されることに注意してください。
-T filename, - -files-from filename
x または t モードでは、 tar は、展開される名前のリストを filename から読み込みます。 c モードでは、 tar は、アーカイブされる名前を filename から読み込みます。特別な名前である“-C”からなる行には、カレントディレクトリをその次の行で指定されたディレクトリに変更する作用があります。 - -null が指定されない限り、名前は、改行で終ります。なお - -null は、“-C”を含む行の特別な取扱いを無効にすることに注意してください。注: 利用者が find(1) を使用して、ファイルのリストを生成しているなら、同様に -n を、おそらく使用することを必要とします。
- -totals
(c, r, u モードのみ) すべてのファイルを格納した後に、stderr に概要を印刷 (表示) します。
-U, - -unlink, - -unlink-first
(x モードのみ) ファイルを作成する前に、いったん削除します。これは、ほとんどのファイルが既に存在しているなら、少しの動作で最適化することができますが、ほとんどのファイルがまだ存在していないなら、状況は、より遅くなるかもしれません。また、このフラグによって、 tar は、エラーを報告する代わりに介在するシンボリックのディレクトリを削除します。その他の詳細については、下記の「セキュリティ」セクションを参照してください。
- -uid id
提供されたユーザ ID 番号を使用し、アーカイブからのユーザ名を無視します。作成するときに、 - -uname がまだ指定されていないなら、ユーザ名は、マッチするユーザ ID に設定されます。
- -uname name
提供されたユーザ名を使用します。抽出のときに、これは、アーカイブのユーザ名を上書きします。提供されたユーザ名がシステムの上に存在していないなら、それは、無視され、 (アーカイブまたは - -uid オプションからの) ユーザ ID が、代わりに使用されます。作成するときに、これは、アーカイブに格納されているユーザ名に設定します。名前は、システムユーザデータベースに対して検証されません。
- -use-compress-program program
組み込みの圧縮サポートを使用する代わりに program を通して (x または t モードでの) 入力、または (c モードで) 出力をパイプで渡します。
-v, - -verbose
冗長な出力を表示します。作成及び展開モードにおいて、 tar は、アーカイブに書き込み、またはアーカイブから読み出した各ファイルの名前をそのままリスト表示します。リストモードにおいて、 tar は、 ls(1) に似た出力を表示します。 -v オプションを追加することで、より詳細に表示します。
- -version
tarlibarchive のバージョンを印刷して、終了します。
-w, - -confirmation, - -interactive
あらゆる操作に対し、確認を求めます。
-X filename, - -exclude-from filename
指定されたファイルから除外パターンのリストを読み込みます。除外の取り扱いに関する情報については、 - -exclude を参照してください。
-y
(c モードのみ) 作成するアーカイブを bzip2(1) で圧縮します。展開またはリストモードでは、本オプションは、無視されます。なお他の tar 実装と異なり、本実装では、アーカイブを読み込む際には、bzip2 圧縮を自動的に判別することに注意してください。
-Z, - -compress, - -uncompress
(c モードのみ) 作成するアーカイブを compress(1) で圧縮します。展開またはリストモードでは、本オプションは、無視されます。なお他の tar 実装と異なり、本実装では、アーカイブを読み込む際には、compress 圧縮を自動的に判別することに注意してください。
-z, - -gunzip, - -gzip
(c モードのみ) gzip(1) で結果のアーカイブを圧縮します。抽出またはリストモードで、このオプションは、無視されます。他の tar 実装と異なって、この実装は、アーカイブを読み込むとき、自動的に gzip 圧縮を認識することに注意してください。

環境変数

次の環境変数が、 tar の実行に関係します:
TAR_READER_OPTIONS
フォーマット (format) リーダと圧縮リーダのためにデフォルトオプション。 - -options オプションは、これを上書きします。
TAR_WRITER_OPTIONS
フォーマット (format) ライタと圧縮ライタのためのデフォルトオプション。 - -options オプションは、これを上書きします。
LANG
使用するロケール。詳細は、 environ(7) を参照してください。
TAPE
デフォルトデバイス。 -f オプションは、これを上書きします。その他の詳細については、上記の -f オプションの説明を参照してください。
TZ
日付を表示する際に使用するタイムゾーン。詳細は、 environ(7) を参照してください。

終了ステータス

The tar utility exits 0 on success, and >0 if an error occurs.

使用例

二つのファイル source.csource.h を含む新しいアーカイブ file.tar.gz を作成します:
tar -czf file.tar.gz source.c source.h

アーカイブの詳細な内容一覧を表示します:

tar -tvf file.tar.gz

デフォルトのテープドライブにあるアーカイブの、全てのエントリを展開します:

tar -x

ISO9660 cdrom イメージの内容を調べるためには:

tar -tf image.iso

ファイル階層を移動するには、 tar

tar -cf - -C srcdir . | tar -xpf - -C destdir

またはより伝統的な

cd srcdir ; tar -cf - . | ( cd destdir ; tar -xpf -)

として実行します。

作成モードにおいて、アーカイブされるファイルとディレクトリのリストには、 -Cfoo/baz の形式でディレクトリの変更命令を取り込めます。また @archive-file の形式でアーカイブのエントリを取り込むこともできます。例えば、次のコマンドライン

tar -c -f new.tar foo1 @old.tgz -C/tmp foo2

では、新しいアーカイブ new.tar を作成します。 tar は、カレントディレクトリからファイル foo1 を読み込み、出力するアーカイブに追加します。次に old.tgz の各エントリを読み込み、これらのエントリを、出力するアーカイブに追加します。最後にディレクトリを /tmp に変更し、 foo2 を出力するアーカイブに追加します。

ディスク上の既存のデータと異なっている、任意の所有権、パーミッション、または名前で出力アーカイブを作成するために mtree(5) 形式の入力ファイルを使用することができます:

$ cat input.mtree
#mtree
usr/bin uid=0 gid=0 mode=0755 type=dir
usr/bin/ls uid=0 gid=0 mode=0755 type=file content=myls
$ tar -cvf output.tar @input.mtree

--newer--newer-mtime スイッチは、“12 Mar 2005 7:14:29pm”, “2005-03-12 19:14”, “5 minutes ago”, “19:14 PST May 1”を含む、さまざまな一般的な日付及び時間指定法を受け付けます。

アーカイブの様々な詳細を生成するか、または読み込みを制御するために --options 引数を使用することできます。例えば、利用者は、 type, timeuid キーワードだけを含む mtree 出力を生成することができます:

tar -cf file.tar --format=mtree --options='!all,type,time,uid' dir

または、利用者は、gzip または xz 圧縮で使用される圧縮レベルを設定することができます:

tar -czf file.tar --options='compression-level=9'.

その他の詳細については、 archive_read(3)archive_write(3) で説明される archive_read_set_options() と archive_write_set_options() API 呼び出しの説明を参照してください。

互換性

まとめオプション形式は、これまでの実装との互換性のためにサポートされています。これには、各文字がオプションである頭文字 (- 文字で始まらない) が存在します。引数は、別々の単語として続きます。この引数の順序は、まとめオプション文字内の、対応する文字の順序と一致している必要があります。例えば
tar tbf 32 file.tar
では、三つのフラグ t, b, と f を指定しています。 bf フラグは、共に引数が必要ですので、二つの追加アイテムがコマンドラインに必要です。 32 は、 b フラグに対する引数であり、また file.tar は、 f フラグに対する引数です。

モードオプションの c, r, t, u, x、およびオプションの b, f, l, m, o, v, w は、SUSv2 に適合しています。

移植性を最大限にするために、 tar を実行するスクリプトは、上記のまとめオプション形式を使うべきであり、モードオプションは、 c, t, x に、またオプションは、 b, f, m, v, w に限定するべきです。

追加のロングオプションは、他の tar 実装との互換性を強化するために提供されています。

セキュリティ

確実なセキュリティは、 tar を含む沢山のアーカイブプログラムに共通の課題です。特に、注意深く細工されたアーカイブは、 tar に対して、対象とするディレクトリ以外の場所にファイルを展開するように要求することができます。これは、不注意なユーザに対し、上書きするつもりのないファイルを上書きさせられる可能性があります。アーカイブをスーパユーザが展開している場合は、システム上のあらゆるファイルが上書きさせられる可能性があります。これを引き起こす、三つの手段があります。 tar は、それぞれに対する防御機構を備えていますが、情報通のユーザならば、それらの意味するところを知っておくべきでしょう:
  • アーカイブのエントリは、絶対パス名を持つことができます。デフォルトでは、 tar は、この問題に対する防御策として、これらをリストアする前にファイル名の先頭にある / 文字を取り除きます。
  • アーカイブのエントリは、 .. を含むパス名を持つことができます。デフォルトでは、 tar は、パス名に .. を含んでいるファイルを展開しません。
  • アーカイブのエントリでは、ファイルを別のディレクトリにリストアするように、シンボリックリンクを悪用することができます。アーカイブは、別のディレクトリを指すシンボリックリンクをリストアすることができ、このリンクを使ってファイルをそのディレクトリにリストアします。これを防ぐため、 tar では毎回、展開されるパスにシンボリックリンクが含まれるかどうかを調べます。もしパスの最後の要素がシンボリックリンクであれば、そのシンボリックリンクは、削除され、アーカイブの内容に置き換えられます。 -U が指定されていれば、展開されるパスの中間に存在するシンボリックリンクも、すべて無条件に削除されます。もし -U-P も指定しなければ、 tar は、このようなエントリを展開するのを拒否します。
あなた自身を守るため、信用できない出処からのアーカイブには、気をつけるべきです。アーカイブを展開する前に、
tar -tf filename
としてアーカイブの内容を調べるべきです。 tar-k オプションをつけて既存のファイルを上書きしないことを保証させるか、 -U オプションをつけて既存のファイルを削除させるべきです。一般に、スーパユーザ権限にある時は、アーカイブを展開するべきではありません。なお -P オプションにより、 tar は、上に述べたセキュリティチェックを行わないようになり、絶対パスや .. を含むファイル、及び他のディレクトリへのシンボリックリンクを展開できるようになることに注意してください。

規格

現在、tar コマンドに対する POSIX 標準はありません。 ISO/IEC 9945-1:1996 (“POSIX.1”) には、ありましたが、 IEEE Std 1003.1-2001 (“POSIX.1”) ではなくなりました。この実装でサポートされているオプションは、現存するいくつかの tar 実装と同様、 tar の古い POSIX 仕様、pax の現在の POSIX 仕様を調査して開発されました。

ustar と pax 間のファイルフォーマット変換については、pax コマンドの IEEE Std 1003.1-2001 (“POSIX.1”) にて定義されています。

歴史

tar コマンドは、1979 年 1 月にリリースされた Seventh Edition Unix で登場しました。他に多数の実装があり、その多くは、ファイルフォーマットを拡張しています。 John Gilmore によるパブリックドメイン実装の pdtar (1987 年 11 月頃) は、多大な影響を及ぼし、GNU tar の元になりました。 GNU tar は、 FreeBSD 1.0 で始まった FreeBSD の基本システムの tar として取り込まれました。

本ソフトウェアは、 libarchive(3) ライブラリをベースにした、完全な再実装です。それは、2005 年 5 月に FreeBSD 5.4 ではじめてリリースされました。

バグ

このプログラムは、 -l オプションの定義で ISO/IEC 9945-1:1996 (“POSIX.1”) に従います。バージョン 1.15 より前の GNU tar は、 - -one-file-system オプションの同義語として -l を扱ったことに注意してください。

-C dir オプションは、歴史的な実装とは異なっているでしょう。

全てのアーカイブ出力は、出力を圧縮していても、正しいサイズのブロックで書き込まれます。最後の出力ブロックがブロックサイズの大きさにパディングされるかどうかは、フォーマットと出力デバイスによって変わります。 tar と cpio フォーマットにおいて、出力が標準出力、キャラクタ型デバイス、もしくはテープドライブのようなブロック型デバイスの場合、出力の最後のブロックは、ブロックサイズの大きさにパディングされます。出力を通常ファイルに書き込む場合、最後のブロックは、パディングされません。 gzip(1)bzip2(1) を含む多数の圧縮ソフトウェアは、 tar で作成されたアーカイブを復元する時、このヌルパディングについて文句を言いますが展開は、正常に行えます。

圧縮と復元機能は、内部で実装されているので、

tar -czf - file

により作成した圧縮出力と、

tar -cf - file | gzip

により作成した圧縮出力には、些細な違いがあるかもしれません。

デフォルトでは、標準の I/O パスでアーカイブを読み書きするべきですが、伝統的に (と POSIX では) 他のものを規定しています。

ru モードでは、アーカイブは、非圧縮でディスク上に通常ファイルとして存在する必要があります。そうではないアーカイブは、 c モードと @archive-file 拡張を用いて更新できます。

@foo-foo といった名前のファイルをアーカイブするには、それぞれ ./@foo./-foo という形式で指定する必要があります。

作成モードにおいて、先頭にある ./ は、常に削除されます。先頭にある / は、 -P オプションが指定されない限り、取り除かれます。

作成及び展開における、ファイル選択のよりよいサポートが必要です。

マルチボリュームアーカイブ、および疎なファイルに対するサポートは、まだありません。

似ていないアーカイブフォーマット間 (tar と cpio など) で @- により変換すると、ハードリンク情報が失われます (これは、異なるアーカイブフォーマットでハードリンク情報を互換性のない形で格納していることからくる当然の結果です)。

November 1, 2012 FreeBSD