BSDTAR(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 はアーカイブファイルストリームの作成と操作をします。

最初の書式フォームでは “まとめ” (bundled) オプション形式を表しています。 この使用法は、これまでの実装との互換性のために提供されています。 詳細は後述の「互換性」を参照してください。

その他の書式フォームが、好ましい使用法を表しています。 tar への最初のオプションは、次の一覧にあるモードの指示です:
-c  指定されたアイテムを含んだ、新しいアーカイブを作成します。
-r  -c と似ていますが、新しいエントリはアーカイブに追加されます。 なおこれは通常ファイルの非圧縮アーカイブに対してのみ動作します。 -f オプションが必要です。
-t  標準出力にアーカイブ内容のリストを出力します。
-u  -r と似ていますが、新しいエントリの変更時刻が、アーカイブ内の対応するエントリ のものよりも新しい場合のみ、追加されます。 なおこれは通常ファイルの非圧縮アーカイブに対してのみ動作します。 -f オプションが必要です。
-x  アーカイブからディスクに展開します。 もし同名のファイルがアーカイブ内に 2 回以上現れた場合、それぞれのコピーが 展開され、後のものがそれ以前のコピーを上書き (置換) します。

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

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

オプション
明記していないオプションは、全ての操作モードに適用可能です。

@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 はアーカイブのフォーマットを別のものに変換する為に使うことが出来ます。

-b blocksize
    テープドライブの I/O に対するブロックサイズを、512 バイトレコード単位で 指定します。 一般に、本引数はテープドライブに読み書きする時、デフォルトブロックサイズで ありごく一般的な 20 レコード (10240 バイト) を用いない場合のみに必要となります。

-C directory
    c および r モードにおいて、続くファイルを追加する前に、ディレクトリを 変更します。 x モードにおいては、アーカイブをオープンした後、エントリをアーカイブから 展開する前にディレクトリを変更します。

--check-links (-W check-links)
    (c および r モードのみ) 各ファイルへのすべてのリンクがアーカイブされないなら、 警告メッセージを発行します。

--exclude pattern (-W exclude=pattern)
    指定したパターンにマッチするファイルやディレクトリを、処理しません。 なおこれはコマンドラインで指定したパターンやファイル名よりも優先します。

--format format (-W format=format)
    (c モードのみ) 作成するアーカイブのフォーマットを指定するのに用います。 サポートされるフォーマットには、 “cpio”, “pax”, “shar”, “ustar” があります。 また他のフォーマットもサポートされているかもしれません。 現在サポートされているフォーマットの詳細な情報については、 libarchive-formats(5) を参照してください。

-f file
    指定されたファイルを、読み書きするアーカイブにします。 ファイル名を - にすれば、標準入力または標準出力になります。 指定しない場合、デフォルトのテープデバイスが使用されます (FreeBSD の場合、デフォルトのテープデバイスは /dev/sa0) 。

--fast-read (-W fast-read)
    (x および t モードのみ) 各パターンまたはファイル名オペランドにマッチするエントリのうち、 最初のアーカイブエントリだけを展開またはリスト表示します。 各パターンまたはファイル名にマッチすれば、すぐに終了します。 同名のエントリが複数存在でき、また慣習として後のエントリがそれ以前のエントリを 上書きする為に、デフォルトではアーカイブは常に最後まで読み込まれます。 本オプションは性能の最適化の為に提供されています。

-H  (c および r モードのみ) コマンドラインで指定されたシンボリックリンクを追跡します。 リンク自身ではなく、リンクの対象をアーカイブします。

-h  (c および r モードのみ) -L と同じ意味です。

--include pattern (-W include=pattern)
    指定したパターンにマッチしたファイルまたはディレクトリのみ処理します。 なおこの指定よりも、 --exclude による指定が優先します。 これを明示しなければ、デフォルトで全てのエントリが処理されます。 この --include オプションは、アーカイブをフィルタリングするのに特に有用です。 例として、次のコマンド
        tar -c -f new.tar --include='*foo*' @old.tgz
    では、 old.tgz のエントリのうち、文字列 ‘foo’ を含んでいるものだけを含む、新しいアーカイブ new.tar を作成します。

-j  (c モードのみ) 作成するアーカイブを bzip2(1) で圧縮します。 展開またはリストモードでは、本オプションは無視されます。 なお他の tar 実装と異なり、本実装ではアーカイブを読み込む際には、bzip2 圧縮を 自動的に判別します。

-k  (x モードのみ) 既存のファイルを上書きしません。 特に、アーカイブ内に 2 回以上現れるファイルであっても、後のコピーが それ以前のコピーを上書きすることはしません。

-L  (c および r モードのみ) 全てのシンボリックリンクを追跡します。 通常、シンボリックリンクはそのままアーカイブされます。 本オプションにより、リンクの対象が代わりにアーカイブされます。

-l  POSIXLY_CORRECT が環境で指定されるなら、これは --check-links オプションのための同義語です。 さもなければ、エラーが表示されます。 GNU tar と互換性のある振舞いを希望するユーザは代わりに --one-file-system オプションを使用するべきです。

-m  (x モードのみ) ファイル更新時刻を展開しません。 デフォルトでは、更新時刻はアーカイブに納められている時刻に設定されます。

-n  (c, r, u モードのみ) ディレクトリ内のファイルを再帰的にアーカイブしません。

--nodump (-W nodump)
    (c および r モードのみ) nodump ファイルフラグの立ったファイルをスキップします。

-O  (x, t モードのみ) 展開 (-x) モードでは、ファイルはディスクに展開されずに標準出力に 書き込まれます。 リスト (-t) モードでは、ファイルリストは通常の標準出力でなく標準エラーに 書き込まれます。

-o  (x モードのみ) ユーザとグループを、アーカイブが指定したものではなく、 本プログラムを実行しているユーザのものを使用します。 なおこれは -p を指定しないと意味がありません。 また本プログラムを root ユーザが実行している必要があります。 この場合、ファイルモードとフラグはアーカイブからリストアされますが、 ACL や所有者の情報は破棄されます。

-P  パス名を保持します。 デフォルトでは、アーカイブの作成と展開の両方において、絶対パス名 (/ 文字で 始まっているもの) の最初のスラッシュは取り除かれます。 また tar は、パス名に.. を含んでいたり、対象ディレクトリをシンボリックリンクで変更する アーカイブエントリを展開するのを拒否します。 本オプションはこの振舞いを抑制します。

-p  (x モードのみ) ファイルパーミッションを保持します。 アーカイブから各アイテムを展開する際、可能ならば、所有者、ファイルモード、 ファイルのフラグと ACL を含む、全てのパーミッションをリストアしようとします。 デフォルトでは、新規作成するファイルの所有者は tar を実行するユーザとなり、新規作成する通常ファイルに関してはファイルモードが リストアされ、またこれら以外のタイプのエントリはデフォルトのパーミッションに なります。 もし tar を root が実行した場合、 -o オプションを指定しない限り、デフォルトで所有者がリストアされます。

-T filename
    (c モードのみ) アーカイブすべきファイル名を filename から読み込みます。 ファイル名は改行で区切られます。 特別な名前である “-C” により、カレントディレクトリをその次の行で指定されたディレクトリに変更します。

-U  (x モードのみ) ファイルを作成する前に、いったん削除します。 本オプション無しでは、 tar は既存のファイルを上書きし、既存のハードリンクを保持します。 本オプションにより、既存のハードリンクは破棄され、同様に、 展開されるファイルの場所に影響を及ぼすシンボリックリンクも破棄されます。

-v  冗長な出力を表示します。 作成及び展開モードにおいて、 tar はアーカイブに書き込み、またはアーカイブから読み出した各ファイルの名前を リスト表示します。 リストモードにおいて、 tar は ls(1) に似た出力を表示します。 -v オプションを追加することで、付加的な説明を表示します。

-W longopt=value
    ロングオプション (-- が先行する) は、 getopt_long(3) 関数が用意されているシステムでのみ、直接サポートされます。 この関数をサポートしないシステムでは、本 -W オプションを介して、ロングオプションを使うことが出来ます。

-w  あらゆる操作に対し、確認を求めます。

-X filename
    指定されたファイルから除外パターンのリストを読み込みます。 除外の取り扱いに関する情報については --exclude を参照してください。

-y  (c モードのみ) 作成するアーカイブを bzip2(1) で圧縮します。 展開またはリストモードでは、本オプションは無視されます。 なお他の tar 実装と異なり、本実装ではアーカイブを読み込む際には、bzip2 圧縮を 自動的に判別します。

-z  (c モードのみ) 作成するアーカイブを gzip(1) で圧縮します。 展開またはリストモードでは、本オプションは無視されます。 なお他の tar 実装と異なり、本実装ではアーカイブを読み込む際には、gzip 圧縮を 自動的に判別します。

環境変数
次の環境変数が、 tar の実行に関係します:

LANG
    使用するロケール。 詳細は environ(7) を参照。

POSIXLY_CORRECT
    この環境変数が定義されると、 -l オプションは p1003.1-96 に従って解釈されます。

TAPE
    デフォルトテープデバイス。 -f オプションはこれを無視します。

TZ  日付を表示する際に使用するタイムゾーン。 詳細は environ(7) を参照。

関連ファイル

/dev/sa0
    TAPE 環境変数か -f オプションで無視されないなら、 デフォルトのテープデバイスです。

終了ステータス

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

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

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

作成モードにおいて、アーカイブされるファイルとディレクトリのリストには、 -Cfoo/baz の形式でディレクトリの変更命令を取り込むことが出来ます。 また @archive-file の形式でアーカイブのエントリを取り込むことも出来ます。 例えば、次のコマンドライン
    tar -c -f new.tar foo1 @old.tgz -C/tmp foo2
では、新しいアーカイブ new.tar を作成します。 tar はカレントディレクトリからファイル foo1 を読み込み、出力するアーカイブに追加します。 次に old.tgz の各エントリを読み込み、これらのエントリを、出力するアーカイブに追加します。 最後にディレクトリを /tmp に変更し、 foo2 を出力するアーカイブに追加します。

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

getopt_long() をサポートするシステムでは、他の tar 実装との互換性を 増すために、ロングオプションが使用できます。

セキュリティ
確実なセキュリティは、 tar を含む沢山のアーカイブプログラムに共通の課題です。 特に、細工されたアーカイブは tar に対して、対象とするディレクトリ以外の場所にファイルを展開するように 要求することが出来ます。 これは不注意なユーザに対し、上書きするつもりの無いファイルを 上書きさせるのに使うことが潜在的に可能です。 アーカイブをスーパユーザが展開している場合は、システム上の あらゆるファイルが上書きされる潜在的な可能性があります。 これを引き起こす、三つの手段があります。 tar はそれらに対する防御機構を備えていますが、情報通のユーザならば、 それらについて知っておくべきでしょう:

•   アーカイブのエントリは、絶対パス名を持つことが出来ます。 デフォルトでは、 tar はこの問題に対する防御策として、これをリストアする前にファイル名の先頭にある / 文字を取り除きます。

•   アーカイブのエントリは、.. を含むパス名を持つことが出来ます。 デフォルトでは、 tar はパス名に.. を含んでいるファイルを展開しません。

•   アーカイブのエントリでは、ファイルを別のディレクトリにリストアするように、 シンボリックリンクを悪用することが出来ます。 アーカイブは別のディレクトリを指すシンボリックリンクをリストアすることが出来、 このリンクを使ってファイルをそのディレクトリにリストアします。 これを防ぐため、.Nm では毎回、展開されるパスにシンボリックリンクが 含まれるかどうかを調べます。 もしパスの最後の要素が シンボリックリンクであれば、そのシンボリックリンクは削除され、 アーカイブの内容に置き換えられます。 -U が指定されていれば、展開されるパスの中間に存在する シンボリックリンクも、すべて無条件に削除されます。 もし -U も -P も指定しなければ、 tar はこのようなエントリを展開するのを拒否します。
あなた自身を守るため、信用できない出処からのアーカイブには気をつけるべきです。 アーカイブを展開する前に、
    tar -tf filename
としてアーカイブの内容を調べるべきです。 tar が既存のファイルを上書きしないことを保証するには -k オプションを使うべきですし、既存のファイルを消去させるには -U オプションを使うべきです。 一般に、スーパユーザ権限にある時は、アーカイブを展開するべきではありません。 なお -P オプションにより、 tar は上に述べたセキュリティチェックを行わないようになり、絶対パスや.. を含むファイル、及び他のディレクトリへのシンボリックリンクを 展開できるようになります。

関連項目
bzip2(1), cpio(1), gzip(1), mt(1), pax(1), shar(1), libarchive(3), libarchive-formats(5), tar(5)

規格
現在、tar コマンドに対する POSIX 標準はありません。 p1003.1-96 にはありましたが、 p1003.1-2001 では無くなりました。 本実装で使用できるオプションは、古い tar の POSIX 仕様、現在の pax の POSIX 仕様はもちろん、現存するいくつかの tar 実装を調査して 開発されました。

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

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

本ソフトウェアは libarchive(3) ライブラリをベースにした、完全な再実装です。

バグ
POSIX と GNU は -l オプションの意味について強く意見を異にしています。 一方の振舞いを期待して他方の結果を得るといった災害の可能性があるため、 この実装では、 -l オプションは故意に壊してあります。

-C dir オプションは、歴代の実装とは異なっているかも知れません。

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

圧縮と復元機能は内部で実装されているので、
    tar -czf - file
により作成した圧縮出力と、
    tar -cf - file | gzip
により作成した圧縮出力には、些細ですが違いがあります。

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

r および u モードでは、アーカイブは非圧縮でディスク上に通常ファイルとして存在する 必要があります。 他のアーカイブは c モードと @archive-file 拡張を用いて更新することが出来ます。

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

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

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

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

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

故意にドキュメント化していない、多くのショートオプションの代わりになる ロングオプションがあります。