tar(ター、tape archives)はファイルアーカイブのファイルフォーマットの一種である。このファイルフォーマットを処理する同名のUNIXコマンドtar
も指す。UNIXでは圧縮したtar形式のファイルを"tarball"(ターボール)と呼ぶこともある。POSIX.1-1988[1]やPOSIX.1-2001[2]で規格化され、UNIX系オペレーティングシステムでは標準のフォーマットである。Windows では Windows 10 Build 17063 (Version 1803) 以降から標準搭載されている[3]。類似コマンドにafioがある。
拡張子 | .tar |
---|---|
MIMEタイプ | application/x-tar |
タイプコード | "TARF" |
UTI | public.tar-archive |
マジック ナンバー | ustar\000 すなわち「ustar」、NUL、算用数字の零2個の計8バイト(POSIX tar)ustar\040\040 (GNU tar)(いずれも0から数えて257バイト目から) |
種別 | ファイルアーカイブ |
開発元 | GNUプロジェクト |
---|---|
最新版 | 1.34 / 2021年2月13日 |
リポジトリ | git |
プログラミング 言語 | C言語 |
ライセンス | GNU GPL v3 以降 |
公式サイト | www |
最新版 | 3.6.2 / 2022年12月9日 |
---|---|
リポジトリ | github |
プログラミング 言語 | C言語 |
ライセンス | New BSD License |
公式サイト | www |
機能
tarはファイルのアーカイブに用いられ、多数のファイルを一つのファイルにまとめることができる。ファイルのユーザ情報とグループ情報、パーミッション、最終更新日時、ディレクトリ構造などを同時にアーカイブすることができる。
圧縮・伸長
元来tarはアーカイブ、すなわち複数のファイルをまとめることのみで圧縮の機能はない。大半の場合アーカイブと同時にcompress、gzip、bzip2などの圧縮方法を用いて圧縮(いわゆるソリッド圧縮)を行う。これによりファイルの拡張子はそれぞれ .tar.Z
、.tar.gz
、.tar.bz2
となる。それぞれ略して .taZ
、.tgz
, .tbz2
とされることも多い。特に gzip は古くから良く使われている。
この形式はファイルが一部でも破損した場合、破損箇所に含まれていたファイル以降は取り出すことはできない。この欠点はafioとgzを使うことにより改善できる。
ヘッダー
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 アーカイブ作成・展開時に、拡張子から圧縮・伸長プログラムを自動的に決定する[4]
- 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
- compress は
- -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 がある。
コマンド例
以下は、圧縮・伸長のコマンド例である[5]。
圧縮。
tar -caf name.tar.gz directory
伸長。
tar -xaf name.tar.gz
テープデバイス
テープデバイスに記録。
tar -cf /dev/nst0 directory
テープデバイスから読み出す。
tar -xf /dev/nst0
テープ上のファイルのリストを表示。リスト表示したいアーカイブファイルの先頭にテープを移動させた後、以下を実行。
tar -tf /dev/nst0
歴史
tarコマンドはその名の通り磁気テープの操作が念頭に置かれていた。fオプション[6]を省いた場合デフォルトで磁気テープデバイスを処理する。fオプションの指定によりファイルシステム上の任意の名前のファイルを処理できる。
tarという言葉の由来は「(リーマスじいや)」の童話『(タールの赤ん坊)』に由来し[7]、それに油塊(タールボール)を引っ掛けたジョーク的用語である。
その歴史の長さゆえにシステム毎の方言やファイルサイズの制限など多くの非互換部分がある為、異なるシステム間のファイル交換を目的とする場合は慎重に利用する必要がある。近年は GNU Tar と bsdtar が一般的ではあるが、その他、様々な tar が存在する。Windows 10 以降や macOS に搭載されているのは bsdtar であり、Linux で一般的なのは GNU Tar である。BusyBox にも独自の tar が含まれている。
関連項目
脚注
- ^ "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 Learn
- ^ GNU tar 1.34: 8.1.1 Creating and Reading Compressed Archives
- ^ いずれも short option style での記法である。https://www.gnu.org/software/tar/manual/tar.html#SEC32 によれば、記法には、long option style, short option style, old option style がある。old option style だと tar -tvf /dev/nst0 は tar tfv /dev/nst0 になる。
- ^ ファイル (file) の頭文字である。
- ^ “Jargon File - tar”. 2010年11月27日閲覧。童話の日本語訳書は(アナンシ#関連書籍)を参照。
外部リンク
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