BSDTAR(1) FreeBSD 一般コマンドマニュアル BSDTAR(1)
名称
tar − テープアーカイブを操作する |
書式
tar [bundled-flags 〈 |
args〉] [〈 file〉 | 〈 pattern〉 ...]
tar {−c} [options]
[files | directories] 解説 |
tar はアーカイブファイルストリームの作成と操作をします。 最初の書式フォームでは ‘‘まとめ’’ (bundled) オプション形式を表していま す。この使用法は、これまでの実装との互換性のために提供されています。詳細 は後述の「互換性」を参照してください。 その他の書式フォームが、好ましい使用法を表しています。 tar への最初のオプ ションは、次の一覧にあるモードの指示です: |
−c
指定されたアイテムを含んだ、新しいアーカイブを作成します。 −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 −C directory −-check-links (−W
check-links) −-exclude pattern (−W
exclude=pattern) −-format format (−W
format=format) −f file −-fast-read (−W fast-read) −H −h −-include pattern (−W
include=pattern) −j −k −L −l −m −n −-nodump (−W nodump) −O −o −P −p −T filename −U −v −W longopt=value −w −X filename −y −z 環境変数 |
次の環境変数が、 tar の実行に関係します: |
LANG
使用するロケール。詳細は environ(7) を参照。 POSIXLY_CORRECT TAPE TZ 関連ファイル |
/dev/sa0
TAPE 環境変数か −f オプションで無視されないなら、デフォルトの テープデバイスです。 終了ステータス |
ユーティリティ tar は、成功すると 0 で、エラーがあった場合は >0 で終了し ます。 |
使用例
二つのファイル 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 はこのようなエントリを展
開するのを拒否します。 関連項目 |
bzip2(1), cpio(1), gzip(1), mt(1), pax(1), shar(1), libarchive(3), libarchive-formats(5), tar(5) |
規格
現在、tar コマンドに対する POSIX 標準はありません。 ISO/IEC 9945-1:1996 (‘‘POSIX.1’’) にはありましたが、 IEEE Std 1003.1-2001 (‘‘POSIX.1’’) では 無くなりました。本実装で使用できるオプションは、古い tar の POSIX 仕様、 現在の pax の POSIX 仕様はもちろん、現存するいくつかの tar 実装を調査して 開発されました。 ustar と pax 間のファイルフォーマット変換については、pax コマンドの IEEE Std 1003.1-2001 (‘‘POSIX.1’’) にて定義されています。 |
歴史
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 など) を @- により変換すると、 ハードリンク情報が失われます (これは異なるアーカイブフォーマットでハード リンク情報を格納していることからくる当然の結果です)。 故意にドキュメント化していない、多くのショートオプションの代わりになるロ ングオプションがあります。 FreeBSD 10.0 April 13, 2004 FreeBSD 10.0 |