ファイル操作

Linux tarコマンド入門|ファイルの圧縮と展開

Linux tar アーカイブ

Linux tarコマンド入門
ファイルの圧縮と展開

tarコマンドでファイルのアーカイブ作成・圧縮・展開を行う方法を基礎から実践まで解説します。

こんな人向けの記事です

  • ファイルの圧縮・展開の方法を基礎から学びたい方
  • バックアップやデプロイでtarを活用したい方
  • gzip、bzip2、xzの使い分けを理解したい方

Step 1tarコマンドの基本

tarコマンドは「tape archive」の略で、複数のファイルやディレクトリを1つのアーカイブファイルにまとめるコマンドです。圧縮と組み合わせて使うのが一般的です。

ターミナル
# アーカイブを作成(gzip圧縮)
tar czf archive.tar.gz directory/

# アーカイブを展開
tar xzf archive.tar.gz

# アーカイブの内容を確認(展開せずに一覧表示)
tar tzf archive.tar.gz

# 基本操作の覚え方
# c = create(作成)
# x = extract(展開)
# t = list(一覧表示)
# z = gzip圧縮
# f = ファイル名指定

覚え方: c=作成(Create)、x=展開(eXtract)、t=一覧(lisT)、z=gzip、j=bzip2、J=xz、f=ファイル名

Step 2圧縮形式の使い分け

tarは複数の圧縮形式に対応しています。用途に応じて使い分けましょう。

ターミナル
# gzip圧縮(最も一般的、高速)
tar czf archive.tar.gz directory/

# bzip2圧縮(gzipより高圧縮)
tar cjf archive.tar.bz2 directory/

# xz圧縮(最も高圧縮だが低速)
tar cJf archive.tar.xz directory/

# 圧縮なしのアーカイブ
tar cf archive.tar directory/
圧縮形式オプション拡張子特徴
gzipz.tar.gz / .tgz高速、標準的
bzip2j.tar.bz2gzipより高圧縮
xzJ.tar.xz最も高圧縮だが低速
なし(なし).tar圧縮なし、最速

Step 3アーカイブの展開

アーカイブの展開方法と、展開先の指定方法を説明します。

ターミナル
# gzipアーカイブを展開
tar xzf archive.tar.gz

# bzip2アーカイブを展開
tar xjf archive.tar.bz2

# xzアーカイブを展開
tar xJf archive.tar.xz

# 展開先ディレクトリを指定(-C)
tar xzf archive.tar.gz -C /opt/app/

# 特定のファイルのみ展開
tar xzf archive.tar.gz path/to/specific/file.txt

# 自動判別で展開(圧縮形式を自動検出)
tar xf archive.tar.gz
tar xf archive.tar.bz2
tar xf archive.tar.xz

注意: 展開前にtar tzfで内容を確認しましょう。信頼できないアーカイブには絶対パスや..を含む悪意のあるパスが含まれている場合があります。

Step 4よく使うオプション一覧

tarコマンドの主要なオプションを紹介します。

ターミナル
# 詳細表示(処理中のファイルを表示)
tar czvf archive.tar.gz directory/

# 特定のファイルを除外
tar czf archive.tar.gz --exclude="*.log" directory/
tar czf archive.tar.gz --exclude=".git" project/

# 権限を保持
tar czpf archive.tar.gz directory/

# 差分バックアップ(指定日時以降に変更されたファイルのみ)
tar czf diff_backup.tar.gz --newer="2024-01-01" directory/
オプション説明
cアーカイブを作成
xアーカイブを展開
tアーカイブの内容を一覧表示
f FILEアーカイブファイル名を指定
zgzip圧縮/展開
jbzip2圧縮/展開
Jxz圧縮/展開
v処理中のファイルを詳細表示
p権限を保持
-C DIR展開先ディレクトリを指定
--exclude=PATTERN特定パターンを除外

Step 5実践的な使用例

バックアップやデプロイでよく使用されるtarの実践例を紹介します。

ターミナル
# 日付付きバックアップ
tar czf backup_$(date +%Y%m%d).tar.gz /var/www/html/

# 不要ファイルを除外したバックアップ
tar czf project.tar.gz \
    --exclude=".git" \
    --exclude="node_modules" \
    --exclude="*.log" \
    project/

# Webアプリのデプロイ
tar czf deploy.tar.gz -C /var/www html/
scp deploy.tar.gz server:/tmp/
ssh server "tar xzf /tmp/deploy.tar.gz -C /var/www/"

# 複数ディレクトリをまとめてアーカイブ
tar czf configs.tar.gz /etc/nginx/ /etc/apache2/ /etc/mysql/

# パイプでリモートに転送
tar czf - directory/ | ssh user@server "tar xzf - -C /opt/"

# アーカイブにファイルを追加(圧縮なしのtarのみ)
tar rf archive.tar newfile.txt

圧縮形式の選び方: 日常のバックアップにはgzip(.tar.gz)が最適。長期保存やディスク節約にはxz(.tar.xz)がおすすめです。