システム管理者および開発者向けの15tarコマンドの例

公開: 2021-09-21

tarは、UnixおよびLinuxベースのシステムで利用できる一般的なファイルアーカイブ形式の1つです。

それは、テープデバイス上の順次データを書き込むために開発されたとして、名前自体はT APE ARのニラから導出されます。 tarballと呼ばれることもあります。

デフォルトでは、tarは圧縮せずに一部の部分を使用してファイルをアーカイブするだけです。 さまざまな圧縮技術を使用して、圧縮された出力を取得できます。 tarユーティリティは通常、ほとんどのLinuxディストリビューションにデフォルトで含まれており、フォーマット自体は、さまざまなツールやユーティリティを介して、WindowsやmacOSなどの他のオペレーティングシステムでサポートされています。

この記事では、tarコマンドの一般的な例と使用法およびサポートされているフラグのいくつかについて説明します。

それでは始めましょう…

tarアーカイブを作成する

単純な非圧縮アーカイブを作成するためのtarコマンドの構文は次のとおりです。

 $ tar cvf <tar-file-name> <files-to-archive>

ここで、フラグcは作成を表し、 vは詳細出力を表し、 fはtarアーカイブファイル名を指定することを表します。 慣例により、tarファイル名は.tar拡張子で指定してください。 アーカイブするファイルは、ワイルドカードを使用して、または単一または複数のファイル名/パスとして指定できます。

例として、ディレクトリに3つのファイルがあります。

 $ ls -l total 12 -rw-r--r-- 1 abhisheknair abhisheknair 13 Sep 12 20:08 file1.txt -rw-r--r-- 1 abhisheknair abhisheknair 19 Sep 12 20:08 file2.txt -rw-r--r-- 1 abhisheknair abhisheknair 24 Sep 12 20:08 file3.txt $

そして、3つのファイルすべてを含むtarアーカイブを作成したいのですが、次のように実行できます。

 $ tar cvf archive.tar * file1.txt file2.txt file3.txt $ ls -l archive.tar -rw-r--r-- 1 abhisheknair abhisheknair 10240 Sep 12 20:15 archive.tar $

次のように、アーカイブする特定のファイルのみを指定することもできます。

 $ tar cvf archive1.tar file1.txt file2.txt file1.txt file2.txt $ ls -l archive1.tar -rw-r--r-- 1 abhisheknair abhisheknair 10240 Sep 12 20:15 archive1.tar $

圧縮アーカイブ(GZ)の作成

tarを使用すると、ファイルをアーカイブできるだけでなく、ファイルを圧縮してスペースを節約できます。 一般的な圧縮形式の1つはgunzipで、通常は.tar後の拡張子.gzまたはtgz表されます。 zフラグを使用して、gunzipを使用してファイルを圧縮する必要があることを指定できます。 次に例を示します。

 $ tar cvzf archive.tar.gz file* file1.txt file2.txt file3.txt $ ls -l archive.tar archive.tar.gz -rw-r--r-- 1 abhisheknair abhisheknair 10240 Sep 12 20:15 archive.tar -rw-r--r-- 1 abhisheknair abhisheknair 188 Sep 12 20:21 archive.tar.gz $

両方に同じ3つのファイルが含まれている場合でも、両方のアーカイブファイルのサイズが大幅に異なることがわかります。 これは、 zフラグを使用した圧縮を使用しているためです。

圧縮アーカイブの作成(BZ2)

tarは他のいくつかの圧縮形式をサポートしています。 それらの1つはbz2またはbzip2であり、拡張子tar.bz2または場合によってはtbz2としてtbz2ます。 アーカイブサイズは小さくなる可能性がありますが、CPUの消費量が増えるため、圧縮/解凍のプロセスはgzアーカイブよりも遅くなる可能性があります。

例:

 $ tar cvjf archive.tar.bz2 file* file1.txt file2.txt file3.txt $ ls -l archive.tar archive.tar.gz archive.tar.bz2 -rw-r--r-- 1 abhisheknair abhisheknair 10240 Sep 12 20:15 archive.tar -rw-r--r-- 1 abhisheknair abhisheknair 212 Sep 12 20:25 archive.tar.bz2 -rw-r--r-- 1 abhisheknair abhisheknair 188 Sep 12 20:21 archive.tar.gz $ file archive.tar* archive.tar: POSIX tar archive (GNU) archive.tar.bz2: bzip2 compressed data, block size = 900k archive.tar.gz: gzip compressed data, from Unix, original size modulo 2^32 10240 $

すべてのファイルの解凍

tarアーカイブ(圧縮または非圧縮)は、 xオプションを使用するだけで抽出できます。 以下の例は、その使用法を明確にします。

 $ tar xvf archive.tar file1.txt file2.txt file3.txt $ ls -l total 24 -rw-r--r-- 1 abhisheknair abhisheknair 10240 Sep 19 18:25 archive.tar -rw-r--r-- 1 abhisheknair abhisheknair 13 Sep 12 20:08 file1.txt -rw-r--r-- 1 abhisheknair abhisheknair 19 Sep 12 20:08 file2.txt -rw-r--r-- 1 abhisheknair abhisheknair 24 Sep 12 20:08 file3.txt $

これは、 gz圧縮アーカイブに対して次のgz機能します。

 $ tar xvf archive.tar.gz file1.txt file2.txt file3.txt $ ls -l total 16 -rw-r--r-- 1 abhisheknair abhisheknair 188 Sep 19 18:27 archive.tar.gz -rw-r--r-- 1 abhisheknair abhisheknair 13 Sep 12 20:08 file1.txt -rw-r--r-- 1 abhisheknair abhisheknair 19 Sep 12 20:08 file2.txt -rw-r--r-- 1 abhisheknair abhisheknair 24 Sep 12 20:08 file3.txt $

または、 bz2圧縮アーカイブの場合でも次のようになります。

 $ tar xvf archive.tar.bz2 file1.txt file2.txt file3.txt $ ls -l total 16 -rw-r--r-- 1 abhisheknair abhisheknair 212 Sep 19 18:31 archive.tar.bz2 -rw-r--r-- 1 abhisheknair abhisheknair 13 Sep 12 20:08 file1.txt -rw-r--r-- 1 abhisheknair abhisheknair 19 Sep 12 20:08 file2.txt -rw-r--r-- 1 abhisheknair abhisheknair 24 Sep 12 20:08 file3.txt $

tarの内容を一覧表示する

tarアーカイブの内容を一覧表示するには、以下に示すようにtフラグを使用できます。

 $ tar tvf archive.tar.bz2 -rw-r--r-- abhisheknair/abhisheknair 13 2021-09-12 20:08 file1.txt -rw-r--r-- abhisheknair/abhisheknair 19 2021-09-12 20:08 file2.txt -rw-r--r-- abhisheknair/abhisheknair 24 2021-09-12 20:08 file3.txt $

Untar固有のファイル

ファイル名を次のように指定することにより、 tartar.gzまたはtar.bz2アーカイブから1つのファイルのみを抽出できます。

 $ tar xvf archive.tar.bz2 file1.txt file1.txt $ ls -l total 8 -rw-r--r-- 1 abhisheknair abhisheknair 212 Sep 19 18:31 archive.tar.bz2 -rw-r--r-- 1 abhisheknair abhisheknair 13 Sep 12 20:08 file1.txt $

同様に、スペースで区切って複数のファイル名を指定して、一度にまとめて抽出することができます。

 $ tar xvf archive.tar.bz2 file1.txt file3.txt file1.txt file3.txt $ ls -l total 12 -rw-r--r-- 1 abhisheknair abhisheknair 212 Sep 19 18:31 archive.tar.bz2 -rw-r--r-- 1 abhisheknair abhisheknair 13 Sep 12 20:08 file1.txt -rw-r--r-- 1 abhisheknair abhisheknair 24 Sep 12 20:08 file3.txt $

ワイルドカードを使用してUntar

ワイルドカードPATTERNを使用して1つ以上のファイルを抽出するには、 --wildcardsフラグを使用します。

 $ tar xvf archive.tar.bz2 --wildcards "file*" file1.txt file2.txt file3.txt $ ls -l total 16 -rw-r--r-- 1 abhisheknair abhisheknair 212 Sep 19 18:31 archive.tar.bz2 -rw-r--r-- 1 abhisheknair abhisheknair 13 Sep 12 20:08 file1.txt -rw-r--r-- 1 abhisheknair abhisheknair 19 Sep 12 20:08 file2.txt -rw-r--r-- 1 abhisheknair abhisheknair 24 Sep 12 20:08 file3.txt $

アーカイブにファイルを追加

新しいファイルは、新しいファイル名またはワイルドカードパターンでrまたは--appendフラグを使用して、既存の非圧縮tarballに追加/追加できます(これは非圧縮.tarファイルでのみ機能し、 tar.gzまたはtar.bz2圧縮形式では機能しないことに--append )。

 $ tar rvf archive.tar file-new* file-new.txt file-new2.txt $ tar tvf archive.tar -rw-r--r-- abhisheknair/abhisheknair 13 2021-09-12 20:08 file1.txt -rw-r--r-- abhisheknair/abhisheknair 19 2021-09-12 20:08 file2.txt -rw-r--r-- abhisheknair/abhisheknair 24 2021-09-12 20:08 file3.txt -rw-r--r-- abhisheknair/abhisheknair 15 2021-09-19 18:59 file2.txt -rw-r--r-- abhisheknair/abhisheknair 10 2021-09-19 18:58 file4.txt -rw-r--r-- abhisheknair/abhisheknair 9 2021-09-19 19:10 file-new.txt -rw-r--r-- abhisheknair/abhisheknair 9 2021-09-19 19:10 file-new2.txt $

archive.tarコンテンツを一覧表示すると、新しく追加された2つのファイルが再び表示されることがarchive.tarます。

アーカイブからファイルを削除する

tarアーカイブから特定のファイルを削除するには、以下に示すように--deleteフラグを使用します(ファイルの削除前後のtarリストを比較してください)。

 $ tar tvf archive.tar -rw-r--r-- abhisheknair/abhisheknair 13 2021-09-12 20:08 file1.txt -rw-r--r-- abhisheknair/abhisheknair 19 2021-09-12 20:08 file2.txt -rw-r--r-- abhisheknair/abhisheknair 24 2021-09-12 20:08 file3.txt -rw-r--r-- abhisheknair/abhisheknair 15 2021-09-19 18:59 file2.txt -rw-r--r-- abhisheknair/abhisheknair 10 2021-09-19 18:58 file4.txt -rw-r--r-- abhisheknair/abhisheknair 9 2021-09-19 19:10 file-new.txt -rw-r--r-- abhisheknair/abhisheknair 9 2021-09-19 19:10 file-new2.txt $ tar --delete -f archive.tar file-new.txt file-new2.txt $ tar tvf archive.tar -rw-r--r-- abhisheknair/abhisheknair 13 2021-09-12 20:08 file1.txt -rw-r--r-- abhisheknair/abhisheknair 19 2021-09-12 20:08 file2.txt -rw-r--r-- abhisheknair/abhisheknair 24 2021-09-12 20:08 file3.txt -rw-r--r-- abhisheknair/abhisheknair 15 2021-09-19 18:59 file2.txt -rw-r--r-- abhisheknair/abhisheknair 10 2021-09-19 18:58 file4.txt $

繰り返しますが、これは非圧縮のtarballに対してのみ機能し、圧縮されたアーカイブ形式では失敗します。

検証で作成

非圧縮のtarファイルを作成しているときに、次のようにWフラグを使用してアーカイブの内容を確認できます。

 $ tar cvfW archive.tar file*.txt file1.txt file2.txt file3.txt Verify file1.txt Verify file2.txt Verify file3.txt $

後でgzipまたは他のツールを使用して、作成されたtarファイルを圧縮できますが、これを圧縮フラグと一緒に使用することはできません。

tarをフォルダに抽出します

tarballの内容を現在のディレクトリではなく特定のフォルダに抽出する場合は、以下に示すように、ディレクトリパスで-Cフラグを使用します。

 $ tar xvf archive.tar -C new-directory/ file1.txt file2.txt file3.txt file2.txt file4.txt $ ls -l new-directory/ total 16 -rw-r--r-- 1 abhisheknair abhisheknair 13 Sep 12 20:08 file1.txt -rw-r--r-- 1 abhisheknair abhisheknair 15 Sep 19 18:59 file2.txt -rw-r--r-- 1 abhisheknair abhisheknair 24 Sep 12 20:08 file3.txt -rw-r--r-- 1 abhisheknair abhisheknair 10 Sep 19 18:58 file4.txt $

差分フラグを使用する

--diffまたはdフラグを使用して、tarアーカイブ内のファイルとファイルシステム内のファイルの間の変更を見つけることができます。 これは、tarの内側と外側のファイルが同じであるときにdiff 1回実行する例です。 ファイルの更新後、出力の違いを示すためにもう一度実行されました。

 $ tar dvf archive.tar file4.txt file4.txt $ $ echo newline > file4.txt $ $ tar dvf archive.tar file4.txt file4.txt file4.txt: Mod time differs file4.txt: Size differs $

ファイルを除外する

tarアーカイブを作成する際には、特定のファイルを除外することが必要になる場合があります。 これは、 --excludeフラグを使用して実現できます。

 $ tar --exclude="dir/file2.txt" --exclude="dir/file-new*.txt" -cvzf archive.tar.gz dir/ dir/ dir/file1.txt dir/file3.txt $ ls -l dir total 24 -rw-r--r-- 1 abhisheknair abhisheknair 9 Sep 19 19:10 file-new.txt -rw-r--r-- 1 abhisheknair abhisheknair 9 Sep 19 19:10 file-new2.txt -rw-r--r-- 1 abhisheknair abhisheknair 5 Sep 19 19:20 file-new3.txt -rw-r--r-- 1 abhisheknair abhisheknair 5 Sep 19 19:27 file1.txt -rw-r--r-- 1 abhisheknair abhisheknair 6 Sep 19 19:27 file2.txt -rw-r--r-- 1 abhisheknair abhisheknair 8 Sep 19 19:27 file3.txt $ tar tvf archive.tar.gz drwxr-xr-x abhisheknair/abhisheknair 0 2021-09-19 19:30 dir/ -rw-r--r-- abhisheknair/abhisheknair 5 2021-09-19 19:27 dir/file1.txt -rw-r--r-- abhisheknair/abhisheknair 8 2021-09-19 19:27 dir/file3.txt $

上記の出力からわかるように、 --excludeフラグを複数回指定して、 AND条件で複数のファイル名またはパターンを指定できます。 上記の例のdirにある6つのファイルのうち、 archive.at.gzに含まれる条件を満たしたのは2つのファイルだけであることに注意してください。

tarコンテンツサイズを表示

以下のコマンドを使用して、圧縮されたtarアーカイブのコンテンツのサイズを取得できます。

 $ tar tvf archive.tar.gz -rw-r--r-- abhisheknair/abhisheknair 13 2021-09-12 20:08 file1.txt -rw-r--r-- abhisheknair/abhisheknair 19 2021-09-12 20:08 file2.txt -rw-r--r-- abhisheknair/abhisheknair 24 2021-09-12 20:08 file3.txt $ tar -xzf archive.tar.gz --to-stdout|wc -c 56 $

同様にbz2アーカイブの場合:

 $ tar tvf archive.tar.bz2 -rw-r--r-- abhisheknair/abhisheknair 13 2021-09-12 20:08 file1.txt -rw-r--r-- abhisheknair/abhisheknair 19 2021-09-12 20:08 file2.txt -rw-r--r-- abhisheknair/abhisheknair 24 2021-09-12 20:08 file3.txt $ tar -xjf archive.tar.bz2 --to-stdout|wc -c 56 $

権限を保持する

デフォルトでは、 tarコマンドはアーカイブしているファイルとディレクトリのパーミッションを保持しますが、以下に示すように、 -pフラグまたは--preserve-permissionsを使用して同じものを明示的に指定できます。

 $ tar cvpzf archive.tar.gz *.txt file1.txt file2.txt file3.txt $

概要

tarは、Unix / Linuxシステムで長い間役立つユーティリティであり、主にアーカイブおよびバックアップタスクで使用されていました。 ユーティリティは、時間の経過とともに多くのオプションで進化してきました。 提供する機能を知っていれば、単純なタスクから複雑なタスクに使用できます。 この記事では、 tarコマンドで実行できる基本的な操作のいくつかを取り上げ、日常のシステム管理タスクでどのように役立つかを紹介します。

詳細については、manページのman tar参照するか、 tar --helpまたはtar --usageコマンドを使用してください。