tar(ター)とは
tar(tape archives)は、複数のファイルを一つのファイルにまとめるためのファイルアーカイブ形式です。また、この形式を処理する
UNIXコマンドの名前でもあります。
UNIX環境では、圧縮されたtar形式のファイルを「tarball」(ターボール)と呼ぶことがあります。
tarはPOSIX.1-1988やPOSIX.1-2001で規格化されており、
UNIX系の
オペレーティングシステムでは標準的なフォーマットです。Windows環境では、Windows 10 Build 17063 (Version 1803)以降でコマンドラインツールが標準搭載され、Windows 11 Build 23493 (Version 22H2)以降ではFile Explorerで解凍に対応、さらにWindows 11 Build 25992 (Version 24H2)以降では圧縮にも対応しています。
機能
tarの主な機能は、複数のファイルを一つのアーカイブファイルにまとめることです。これにより、多数のファイルを効率的に管理・移動できます。tarは、ファイルのユーザ情報、グループ情報、パーミッション、最終更新日時、
ディレクトリ構造などの
メタデータを同時にアーカイブすることができます。
圧縮・伸長
tar自体にはファイルの圧縮機能は含まれていません。通常は、アーカイブと同時にcompress、gzip、bzip2などの圧縮プログラムを利用して圧縮を行います。これにより、ファイルの
拡張子は`.tar.Z`、`.tar.gz`、`.tar.bz2`などとなり、それぞれ`.taZ`、`.tgz`、`.tbz2`と略されることもあります。特にgzipは古くから広く利用されています。
ただし、この形式では、ファイルの一部が破損した場合、その破損箇所以降のファイルは取り出すことができなくなります。これは、連続的にファイルが格納されているためです。
ヘッダー
tarファイルには、ファイルの属性などの
メタデータが含まれています。以下は、
UNIX tarフォーマットのヘッダーの一例です。
フィールド | サイズ | 説明 |
---|
---- | - | ---------- |
ファイル名 | 100byte | ファイルの名前 |
モード | 8byte | パーミッションとファイルのタイプ |
ユーザーID | 8byte | ファイルの所有者のユーザーID |
グループID | 8byte | ファイルの所有者のグループID |
サイズ | 12byte | ファイルのサイズ |
最終変更タイム | 12byte | 最終変更日時 |
チェックサム | 8byte | ファイルの整合性を確認するためのチェックサム |
ファイルタイプ | 1byte | ファイルのタイプ(ディレクトリ、通常ファイルなど) |
---|
コマンドオプション
以下は、GNU Tarおよびbsdtarで共通して利用できるオプションです。
`-c`: 新しいアーカイブを作成します。
`-r`: アーカイブにファイルを追加します。
`-t`: アーカイブの内容をリスト表示します。
`-u`: アーカイブ内のファイルよりも新しいファイルを追加します。
`-x`: アーカイブからファイルを取り出します。
`-f file`: テープの代わりに指定したファイルをアーカイブします。指定がない場合は環境変数`TAPE`に従います。
`-v`: 詳細なメッセージを表示します。
`-C directory`: 指定した
ディレクトリに移動してから操作を行います。
`--newer date`: 指定した日付よりも新しいファイルのみをアーカイブに含めます。
`-T file`: 指定したファイルに記述されたファイル名をアーカイブに追加します。ファイル内には改行区切りでファイル名が記述されています。
圧縮・伸長オプション
`-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`
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では `-I` オプションを使い、bsdtarでは `--options` オプションを使います。
コマンド例
以下は、tarコマンドの基本的な使用例です。
圧縮
bash
tar -cvf archive.tar directory
伸長
bash
tar -xvf archive.tar
テープデバイスへの記録
bash
tar -cvf /dev/st0 directory
テープデバイスからの読み出し
bash
tar -xvf /dev/st0
テープ上のファイルのリスト表示
bash
tar -tvf /dev/st0
歴史
tarコマンドは、その名前(Tape ARchive)が示すように、当初は
磁気テープの操作を目的としていました。`f`オプションを省略した場合は、デフォルトで
磁気テープデバイスを処理します。`f`オプションを指定することで、ファイルシステム上の任意のファイルを処理できます。
「tarball」という言葉は、「リーマスじいや」の童話『タールの赤ん坊』に由来するジョーク的な用語です。
tarの長い歴史の中で、システムごとに方言やファイルサイズ制限などの非互換性があるため、異なるシステム間でファイル交換を行う際には注意が必要です。近年では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