Tar

tar（ター、tape archives）はファイルアーカイブのファイルフォーマットの一種である。このファイルフォーマットを処理する同名のUNIXコマンドtarも指す。UNIXでは圧縮したtar形式のファイルを"tarball"（ターボール）と呼ぶこともある。POSIX.1-1988やPOSIX.1-2001で規格化され、UNIX系オペレーティングシステムでは標準のフォーマットである。Windows では Windows 10 Build 17063 (Version 1803) 以降からコマンドラインツールが標準搭載されていて、File Explorer では Windows 11 Build 23493 (Version 22H2) 以降は解凍に対応していて、Windows 11 Build 25992 （Version 24H2）以降は圧縮に対応している。 tarはファイルのアーカイブに用いられ、多数のファイルを一つのファイルにまとめることができる。ファイルのユーザ情報とグループ情報、パーミッション、最終更新日時、ディレクトリ構造などを同時にアーカイブすることができる。 元来tarはアーカイブ、すなわち複数のファイルをまとめることのみで圧縮の機能はない。大半の場合アーカイブと同時にcompress、gzip、bzip2などの圧縮方法を用いて圧縮（いわゆるソリッド圧縮）を行う。これによりファイルの拡張子はそれぞれ .tar.Z、.tar.gz、.tar.bz2 となる。それぞれ略して .taZ、.tgz, .tbz2 とされることも多い。特に gzip は古くから良く使われている。 この形式はファイルが一部でも破損した場合、破損箇所に含まれていたファイル以降は取り出すことはできない。 tarはファイルの属性などのいわゆるメタデータも一緒に含んでいる。以下のテーブルにUNIX tarフォーマットの一例を示す： Pre-POSIX.1-1988 (i.e. v7): 以下は 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 は .tar.Z, .taZ gzip は .tar.gz, .tgz, .taz bzip2 は .tar.bz2, .tz2, .tbz2, .tbz xz は .tar.xz lzip は .tar.lz lzma は .tar.lzma, .tlz（ルールに一貫性がなく .tlz は lzip ではなく lzma になっている） lzop は .tar.lzo Zstandard は .tar.zst, .tzst -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 のように指定する。 以下は、圧縮・伸長のコマンド例である。 圧縮。 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オプションを省いた場合デフォルトで磁気テープデバイスを処理する。fオプションの指定によりファイルシステム上の任意の名前のファイルを処理できる。 tarballという言葉の由来は「リーマスじいや（英語版）」の童話『タールの赤ん坊（英語版）』に由来し、それに油塊（タールボール）を引っ掛けたジョーク的用語である。 その歴史の長さゆえにシステム毎の方言やファイルサイズの制限など多くの非互換部分がある為、異なるシステム間のファイル交換を目的とする場合は慎重に利用する必要がある。近年は GNU Tar と bsdtar が一般的ではあるが、その他、様々な tar が存在する。Windows 10 以降や macOS に搭載されているのは bsdtar であり、Linux で一般的なのは GNU Tar である。BusyBox にも独自の tar が含まれている。 mt (UNIX) テープドライブ Linear Tape-Open IBM 3592 [脚注の使い方] ^ “NEWS”. 2023年7月19日閲覧。 ^ libarchive/NEWS at master · libarchive/libarchive - GitHub ^ "IEEE Std 1003.1-1988, IEEE Standard for Information Technology - Portable Operating System Interface (POSIX)" ^ "IEEE Std 1003.1-2001, IEEE Standard for Information Technology - Portable Operating System Interface (POSIX)" ^ Tar and Curl Come to Windows! | Microsoft Learn2023年9月4日閲覧。 ^ “Announcing Windows 11 Insider Preview Build 23493”. Windows Insider Blog. 5 July 2023閲覧。 ^ 株式会社インプレス. “TAR、RAR、7z……「エクスプローラー」で解凍できる形式が拡充、正式に提供開始／「Windows 11 バージョン 22H2」の2023年9月プレビューパッチ「KB5030310」で”. 窓の杜. 28 September 2023閲覧。 ^ “Announcing Windows 11 Insider Preview Build 25992 (Canary Channel)”. Windows Insider Blog. 1 February 2024閲覧。 ^ “IT 担当者向けのバージョン 24H2 Windows 11の新機能” (2024, 10/02). October 2, 2024閲覧。 ^ “GNU tar 1.35: 8.1.1 Creating and Reading Compressed Archives”. gnu.org. 13 April 2024閲覧。 ^ いずれも 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 になる。 ^ ファイル (file) の頭文字である。 ^ “Jargon File - tarball”. 2010年11月27日閲覧。童話の日本語訳書はアナンシ#関連書籍を参照。 Tar - GNU Project Man page of TAR GNU tar format libarchive tar(1) - FreeBSD General Commands Manual tar(5) - FreeBSD File Formats Manual