Tar

機能
tarはファイルのアーカイブに用いられ、多数のファイルを一つのファイルにまとめることができる。ファイルのユーザ情報とグループ情報、パーミッション、最終更新日時、ディレクトリ構造などを同時にアーカイブすることができる。

 圧縮・伸長 
元来tarはアーカイブ、すなわち複数のファイルをまとめることのみで圧縮の機能はない。大半の場合アーカイブと同時にcompress、gzip、bzip2などの圧縮方法を用いて圧縮（いわゆるソリッド圧縮）を行う。これによりファイルの拡張子はそれぞれ 、、 となる。それぞれ略して 、,  とされることも多い。特に gzip は古くから良く使われている。

この形式はファイルが一部でも破損した場合、破損箇所に含まれていたファイル以降は取り出すことはできない。

ヘッダー
tarはファイルの属性などのいわゆるメタデータも一緒に含んでいる。以下のテーブルにUNIX tarフォーマットの一例を示す：

Pre-POSIX.1-1988 (i.e. v7):
 オフセット サイズ 内容 0 100 ファイル名 100 8 ファイルモード 108 8 所有者 User ID 116 8 グループ User ID 124 12 ファイルサイズ（Byte） 136 12 最終更新時刻（UNIX時間） 148 8 チェックサム 156 1 リンクインジケーター（通常ファイル、ハードリンク、シンボリックリンク） 157 100 リンクされたファイルの名前

 コマンドオプション 
以下は GNU Tar および bsdtar で共通で利用可能なオプションである。
-c　新しいアーカイブを作成する
-r　アーカイブにファイルを追加する
-t　アーカイブの内容をリスト表示する
-u　アーカイブ内より新しいファイルを追加する
-x　アーカイブからファイルを取り出す

-f file　テープの代わりに指定したファイルをアーカイブする。これが指定されていない場合は環境変数 TAPE に従う。それもない場合の挙動はOSやコンパイル時の指定依存。
-v　詳細メッセージを表示する
-C directory　directoryに移動してから操作を行う

--newer date　指定した日付よりも新しいファイルだけをアーカイブに入れる（取り出す）
-T file　fileの中に記載されているファイル名をアーカイブに入れる（取り出す）。fileの中身は改行区切りで1行1ファイル名。

圧縮・伸長オプション
-a もしくは --auto-compress　アーカイブ作成時に拡張子から圧縮プログラムを自動的に決定する。伸長時は何も指定しなくても自動的に決まる。
 compress は , 
 gzip は , , 
 bzip2 は , , , 
 xz は 
 lzip は 
 lzma は , （ルールに一貫性がなく .tlz は lzip ではなく lzma になっている）
 lzop は 
 Zstandard は  , 
-Z もしくは --compress　アーカイブをUNIX Compressで圧縮・伸長する
-z もしくは --gzip　アーカイブをgzipで圧縮・伸長する
-j もしくは --bzip2　アーカイブをbzip2で圧縮・伸長する
-J もしくは --xz　アーカイブをxzで圧縮・伸長する
--lzma　アーカイブをlzmaで圧縮・伸長する
--lzop　アーカイブをlzopで圧縮・伸長する
--zstd　アーカイブをZstandardで圧縮・伸長する
2022年12月現在、GNU Tar 独自の物として --lzip があり、bsdtar 独自の物としては --lrzip や --lz4 がある。

圧縮レベルや並列圧縮を指定する方法は、
 GNU Tar の場合は tar -cf name.tar.zst -I "zstd -19 -T0" directory のように指定する。aの代わりにIで指定する。
 bsdtar の場合は tar -caf name.tar.zst --options=compression-level=19,threads=0 directory のように指定する。

 コマンド例 
以下は、圧縮・伸長のコマンド例であるいずれも short option style での記法である。https://www.gnu.org/software/tar/manual/tar.html#Styles (2023年9月4日閲覧) によれば、記法には、long option style, short option style, old option style がある。old option style だと tar -tvf /dev/nst0 は tar tfv /dev/nst0 になる。。

圧縮。
tar -caf name.tar.gz directory

伸長。
tar -xf name.tar.gz

テープデバイス
テープデバイスに記録。
tar -cf /dev/nst0 directory

テープデバイスから読み出す。
tar -xf /dev/nst0

テープ上のファイルのリストを表示。リスト表示したいアーカイブファイルの先頭にテープを移動させた後、以下を実行。
tar -tf /dev/nst0

 歴史 
tarコマンドはTape ARchiveというその名の通り磁気テープの操作が念頭に置かれていた。fオプションファイル (file) の頭文字である。を省いた場合デフォルトで磁気テープデバイスを処理する。fオプションの指定によりファイルシステム上の任意の名前のファイルを処理できる。

tarballという言葉の由来は「」の童話『』に由来し童話の日本語訳書はアナンシ#関連書籍を参照。、それに油塊（タールボール）を引っ掛けたジョーク的用語である。

その歴史の長さゆえにシステム毎の方言やファイルサイズの制限など多くの非互換部分がある為、異なるシステム間のファイル交換を目的とする場合は慎重に利用する必要がある。近年は GNU Tar と bsdtar が一般的ではあるが、その他、様々な tar が存在する。Windows 10 以降や macOS に搭載されているのは bsdtar であり、Linux で一般的なのは GNU Tar である。BusyBox にも独自の tar が含まれている。

 関連項目 
 mt (UNIX)
 テープドライブ
 Linear Tape-Open
 IBM 3592

 脚注 

 外部リンク 
 GNU Tar 
 Tar - GNU Project
 Man page of TAR
 GNU tar format

 bsdtar 
 libarchive
 tar(1) - FreeBSD General Commands Manual
 tar(5) - FreeBSD File Formats Manual

Category:UNIXのソフトウェア
Category:ファイルフォーマット
Category:GNUプロジェクトのソフトウェア