Linux環境でサーバー移行やバックアップ、配布パッケージの作成を行う際、最も頻繁に利用されるのが tar(テープアーカイブ)コマンド です。しかし実務の現場では、「tar.gzの解凍コマンドをど忘れした」「権限やパーミッションを保持したまま固めたい」「不要な node_modules や .git を除外して軽量に圧縮したい」といった疑問やトラブルが絶えません。
Linuxの
tar コマンドは、オプションの組み合わせで「圧縮」「解凍」「一覧確認」をすべてこなせます。本記事では、現場で今すぐ使える最速コピペスニペットから、実務で必須のパーミッション保持(-p)、除外指定(--exclude)、よくあるエラーの回避策まで徹底解説します。
インフラエンジニアの Bash玄 です。今回は日常業務で毎日のように叩く tar コマンドの鉄板構文を、コピペですぐ動く形でまとめました。まずは最速スニペットから確認していきましょう。
【今すぐ使える】tarコマンド最速コピペスニペット
検索からアクセスして「今すぐ解凍・圧縮コマンドを実行したい」というエンジニア向けの最速早見コードです。ファイル名やディレクトリ名を置き換えてそのままターミナルに貼り付けてください。
【解凍】tar.gzファイルを今すぐ解凍・展開する(tar -xzvf)
最も一般的な .tar.gz (または .tgz )アーカイブを、カレントディレクトリに展開(解凍)する基本構文です。-x (展開)、-z (gzip解凍)、-v (詳細表示)、-f (アーカイブファイル名)を指定します。
# カレントディレクトリに tar.gz を解凍・展開する
tar -xzvf archive.tar.gz
# 展開先ディレクトリを指定して解凍する(-C オプション)
tar -xzvf archive.tar.gz -C /path/to/dest_dir/
# 進行状況(ファイル名)を表示せず静かに解凍する(-v を省略)
tar -xzf archive.tar.gz
【圧縮】ディレクトリをtar.gz形式で圧縮する(tar -czvf)
指定したディレクトリを丸ごと .tar.gz 形式で圧縮アーカイブ化する基本コマンドです。-c (新規作成)、-z (gzip圧縮)、-v (進捗表示)、-f (出力ファイル名)の順で指定します。
# ディレクトリを tar.gz 形式で圧縮アーカイブ化する
tar -czvf backup.tar.gz /path/to/target_dir/
# カレントディレクトリの特定フォルダを相対パスで圧縮する
tar -czvf project_backup.tar.gz ./my_project/
# 複数ファイルや複数ディレクトリを1つの tar.gz にまとめて圧縮する
tar -czvf bundle.tar.gz file1.txt file2.txt ./conf/
【確認】解凍せずにアーカイブ内の一覧を確認する(tar -tzvf)
アーカイブを展開する前に、どのようなファイルが含まれているか、意図せぬパス構造になっていないかを安全に確認できます。-t (一覧表示)オプションを使用します。
# アーカイブ内のファイル一覧を表示する(詳細・権限・サイズ付き)
tar -tzvf archive.tar.gz
# 特定のファイル名が含まれているか grep で検索する
tar -tzvf archive.tar.gz | grep "config.php"
# ファイル名のみをシンプルに一覧表示する(-v を省略)
tar -tzf archive.tar.gz
tarコマンドの基礎知識と「アーカイブ」と「圧縮」の違い
Linuxを扱い始めた初心者が最初につまずきやすいのが、「 アーカイブ(集約) 」と「 圧縮 」の概念的な違いです。Windows標準のZIP形式は1つの手順で両方を同時に実行しますが、Unix/Linuxの伝統的な設計思想では、それぞれの役割が明確に分離されています。
tar(テープアーカイブ)の本質とgzip圧縮の組み合わせ
tar は元来 Tape Archive(テープアーカイブ) の略称で、磁気テープ装置に複数ファイルを連続したバイト列として記録するために開発されたツールです。そのため、tar 単体には ファイルサイズを小さくする圧縮機能はありません 。
その代わり、tar はLinuxファイルシステム特有の パーミッション(実行権限)、所有者UID/GID、更新日時(タイムスタンプ)、シンボリックリンク などのメタデータを寸分違わず保持したまま、複数のファイルや深いディレクトリツリーを1つの .tar ファイルにまとめることができます。
この tar で束ねたアーカイブストリームに対して、後段で gzip などのデータ圧縮プログラムを適用したものが、実務で標準的に使われる 圧縮アーカイブ(tar.gz) です。
| 処理の種類 | 役割と特徴 | 代表コマンド・拡張子 | 保持される属性情報 |
|---|---|---|---|
| アーカイブ(結合) | 複数ファイル・ディレクトリをメタデータごと1つに集約(サイズは減らない) | tar -cvf( .tar) | パーミッション(rwxr-xr-x)、所有者UID/GID、タイムスタンプ、リンク |
| データ圧縮 | 単一ファイルのデータ冗長性を排除してサイズ削減(複数ファイル結合は不可) | gzip, bzip2, xz( .gz, .bz2, .xz) | (対象ファイル自体のデータのみ) |
| 圧縮アーカイブ | tar の集約・属性保持と gzip の容量削減を1行で両立 | tar -czvf( .tar.gz / .tgz) | 高度な属性保持+ディスク容量の劇的な削減 |
拡張子の違い(.tar と .tar.gz / .tgz)
Linux環境で目にするアーカイブファイルの代表的な拡張子と、その実体の対応関係を整理しておきましょう。
.tar:tarで結合しただけの非圧縮アーカイブ。属性保持されるがサイズは圧縮されません。.tar.gz/.tgz:tarで結合後にgzipで圧縮したファイル。現在最も広く普及している標準形式です。.tar.bz2/.tbz2:bzip2で圧縮した形式。gzipよりも圧縮率が高い反面、処理時間がかかります。.tar.xz/.txz:xz(LZMA2)で圧縮した形式。極めて高い圧縮率を誇り、Linuxカーネルソース等の配布で多用されます。
よく使う主要オプション一覧早見表
tar コマンドは多機能ですが、日常実務で実際に使うオプションは限られています。役割別に分類して早見表にまとめました。
動作指定オプション(-c, -x, -t)
tar を実行する際は、まず「何を行うか」という 動作モード(主操作) を必ず1つ指定します。
| オプション | 名称・種別 | 機能説明 | 実行コマンド例 |
|---|---|---|---|
-c | Create(作成) | 新しいアーカイブを作成する 【作成時必須】 | tar -czvf backup.tar.gz ./data |
-x | Extract(展開) | アーカイブからファイルを解凍・展開する 【解凍時必須】 | tar -xzvf backup.tar.gz |
-t | List(一覧表示) | アーカイブを展開せずに中身のファイル一覧を確認する | tar -tzvf backup.tar.gz |
-r | Append(追記) | 既存の非圧縮 .tar の末尾にファイルを追加する(※gzには不可) | tar -rvf backup.tar newfile.txt |
-u | Update(更新) | 既存の非圧縮 .tar 内の古いファイルのみを差分更新する | tar -uvf backup.tar ./data |
圧縮形式指定オプション(-z, -j, -J)
どの圧縮アルゴリズムを組み合わせるかを指定するオプションです。
| オプション | 対応形式 | 特徴・用途 | 拡張子 |
|---|---|---|---|
-z | gzip | 標準的かつ高速。日常のバックアップやWeb配布で最も汎用性が高い | .tar.gz / .tgz |
-j | bzip2 | gzip より高圧縮率。大容量テキストログ等の保管に適する | .tar.bz2 / .tbz2 |
-J | xz | 最高クラスの高圧縮率。パッケージ配布や長期保存用バックアップに最適 | .tar.xz / .txz |
--zstd | zstd | 超高速な圧縮・解凍と高圧縮率を両立。最新のLinuxディストリで採用拡大 | .tar.zst |
補助オプション(-v, -f, -C, -p)
操作の挙動を制御する実務で欠かせない補助オプションです。
| オプション | 名称 | 機能・効果 | 注意点・使用例 |
|---|---|---|---|
-f | File | 操作対象のアーカイブファイル名を指定する | 【最重要】必ず直後にファイル名を指定すること |
-v | Verbose | 処理されたファイル名をターミナルに逐次表示する | Cron等で静かに実行したい場合は省略する |
-C | Change directory | 指定したディレクトリに移動してから処理・展開する | tar -xzvf app.tar.gz -C /var/www/ |
-p | Preserve permissions | 元のパーミッション(権限)・所有者・時刻を完全保持 | Webサーバーやシステムバックアップで必須 |
--exclude | Exclude pattern | 指定したパターン(ワイルドカード)に一致するファイルを除外 | --exclude='.git' --exclude='node_modules' |
tar.gz / tar の解凍・展開方法完全ガイド
ここからは、検索需要が最も高い「 解凍・展開手順 」を実務シナリオ別に徹底解説します。
カレントディレクトリにそのまま解凍する
最もオーソドックスな解凍手順です。現在の作業ディレクトリにアーカイブを展開します。
# 1. tar.gz(gzip圧縮)を解凍する
tar -xzvf archive.tar.gz
# 2. 非圧縮の .tar ファイルを展開する(-z は不要)
tar -xvf archive.tar
# 3. bzip2形式(.tar.bz2)を解凍する
tar -xjvf archive.tar.bz2
# 4. xz形式(.tar.xz)を解凍する
tar -xJvf archive.tar.xz
💡 プロのワンポイント : 近年の GNU tar は賢く設計されており、-z や -j を指定しなくても tar -xf archive.tar.gz のように記述するだけで、拡張子やヘッダーから圧縮形式を自動判別して適切に解凍してくれます。
解凍先ディレクトリを指定して展開する(-C オプション)
ダウンロードしたアーカイブを、現在のディレクトリではなく別の配置先(例: /opt/ や /var/www/ )へ直接展開したい場合は、大文字の -C (Change directory)オプションを活用します。
# 事前に展開先ディレクトリを作成(存在しない場合エラーになるため)
mkdir -p /var/www/my_app/
# -C オプションで展開先ディレクトリを指定して解凍
tar -xzvf release.tar.gz -C /var/www/my_app/
# sudo 権限が必要なシステム領域へ直接展開する例
sudo tar -xzvf nginx_conf.tar.gz -C /etc/nginx/
-C オプションを指定しないと、カレントディレクトリに大量のファイルが一気に散らばってしまう「アーカイブ爆弾」事故が発生することがあります。展開前に前述の tar -tzf archive.tar.gz でトップディレクトリが含まれているか確認する習慣をつけると安全です。
特定のファイルのみを指定して取り出す
大容量アーカイブ全体を展開することなく、必要な設定ファイルや特定ファイルだけをピンポイントで取り出すことも可能です。
# アーカイブ内の特定ファイル(例: config/database.yml)のみを取り出す
tar -xzvf backup.tar.gz path/to/config/database.yml
# 特定のサブディレクトリ配下のみを展開する
tar -xzvf backup.tar.gz path/to/images/
# ワイルドカードを使って特定拡張子(例: *.conf)のみを取り出す
tar -xzvf backup.tar.gz --wildcards "*.conf"
ディレクトリやファイルの圧縮・アーカイブ作成手順
続いて、日々のバックアップやデプロイパッケージ作成で必須となる「 圧縮・アーカイブ作成手順 」を詳しく解説します。
ディレクトリ丸ごとtar.gz形式で圧縮する
ディレクトリを指定して、その配下の全サブディレクトリとファイルを再帰的に .tar.gz に圧縮します。
# 構文: tar -czvf [出力アーカイブ名.tar.gz] [対象ディレクトリ]
tar -czvf site_backup.tar.gz ./html/
# 日付付きファイル名で自動バックアップ(cronやシェルスクリプトで頻出)
TODAY=$(date +%Y%m%d)
tar -czvf "backup_${TODAY}.tar.gz" /var/www/html/
# 非圧縮の .tar として固めるだけの場合(-z を省く)
tar -cvf raw_data.tar ./large_dataset/
複数ファイル・複数ディレクトリを1つにまとめる
末尾に対象のファイルやディレクトリを半角スペース区切りで並べることで、複数の異なる場所にある資材を1つのアーカイブに集約できます。
# 複数のファイルとディレクトリを1つのアーカイブにまとめる
tar -czvf release_pack.tar.gz index.html styles.css ./assets/ ./conf/
# 相対パスの基点を -C で移動して無駄な階層を含めずに作成
tar -czvf bundle.tar.gz -C /var/www/html app public vendor
実務で必須!パーミッション保持(-p)と除外指定(–exclude)
システム運用・Webインフラの実務において、tar を使う最大のメリットが パーミッション保持(-p) と 除外指定(–exclude) です。これらを知らずに運用すると、リストア後にパーミッションエラーでサーバーが起動しなくなったり、不要なファイルで容量が枯渇したりする原因になります。
属性・所有者・権限をそのまま保持する(-p)
-p (小文字のp: preserve permissions)オプションは、ファイルのパーミッション(実行権限やSUID/SGIDビット)、所有者情報、更新タイムスタンプを完全に保持したままアーカイブを作成・展開します。
# root権限で属性完全保持の圧縮アーカイブを作成する
sudo tar -cpzvf /backup/etc_backup.tar.gz /etc/
# 展開時にも -p を指定して元通りの権限でリストアする
sudo tar -xpzvf /backup/etc_backup.tar.gz -C /
⚠️ 実行ユーザーによる挙動の違いに注意 : rootユーザーが実行する場合は -p がデフォルトで有効になりますが、一般ユーザーが実行した場合は「実行した一般ユーザーのUID/GID」に変換され、umaskの影響を受けます。システム設定やWebサーバー資材を正確に保持・復元する場合は、必ず root権限(sudo) で実行してください。
特定のフォルダ(.git, node_modules等)を除外して圧縮する(–exclude)
開発リポジトリやアプリケーションをアーカイブ化する際、Gitの履歴(.git)や巨大な依存パッケージ(node_modules、.venv)、キャッシュフォルダを除外することで、アーカイブサイズを10分の1以下に劇的軽量化できます。
# 複数の除外パターンを指定して圧縮する
tar -czvf app_clean.tar.gz
--exclude="node_modules"
--exclude=".git"
--exclude=".venv"
--exclude="*.log"
--exclude="cache/*"
./my_project/
# 除外パターンを記述したテキストファイル(exclude_list.txt)から一括除外(-X オプション)
tar -czvf app_release.tar.gz -X exclude_list.txt ./my_project/
🚨 現場で最も多発する落とし穴 : --exclude オプションは、必ず 対象ディレクトリ(./my_project/)よりも前に記述 してください。対象ディレクトリの後ろに --exclude を書くと、引数解析の順序上、除外指定が完全に無視されて全て固められてしまいます。
よくあるエラーと注意点
tar コマンドで初心者がハマりやすいエラーと、システム破壊につながりかねない重大な注意点を解説します。
【初心者の罠】オプション -f の直後には必ずファイル名を指定する
tar で最も多発する文法ミスが、-f オプションの位置間違いです。-f (File)オプションは「 直後に渡された引数をアーカイブファイル名として解釈する 」という絶対的なルールがあります。
# ⭕ 正しい書き方(-f の直後にアーカイブファイル名)
tar -czvf backup.tar.gz ./data/
tar -c -z -v -f backup.tar.gz ./data/
# ❌ 誤った書き方①(-v がファイル名と解釈されてエラー)
tar -czfv backup.tar.gz ./data/
# エラー: tar: backup.tar.gz: Cannot stat: No such file or directory
# ❌ 誤った書き方②【超危険】対象フォルダがアーカイブ名とみなされ上書き破壊!
tar -cf ./data/ backup.tar.gz
# ./data が空のアーカイブファイルで上書きされ、中身が全滅する大事故に!
上記のように、tar -cf ./data/ ... と書いてしまうと、./data/ ディレクトリがアーカイブファイルとして上書きされて中身が破壊される危険があります。慣れないうちは必ず「tar -czvf ファイル名 対象パス」という定型順序を遵守してください。
絶対パスでアーカイブ作成した際の先頭スラッシュ削除警告(Removing leading `/’ from member names)
絶対パス(例: /var/log/ )を指定してアーカイブを作成した際、以下の警告メッセージが表示されます。
tar: Removing leading `/' from member names
これはエラーではなく、 安全のための保護機能 です。もしアーカイブ内に先頭のスラッシュ(/)が残ったまま絶対パスで記録されていると、別環境で解凍した瞬間にルートディレクトリ(/)配下の既存ファイルが無条件で上書きされてしまう危険があります。そのため、tar は自動的に先頭の / を取り除き、相対パスとして格納してくれています。
警告を出さずにクリーンにアーカイブを作成したい場合は、-C オプションを使ってカレントディレクトリを移動してから相対パスで指定するのが実務の鉄則です。
# 推奨: -C で移動してから相対パスで指定(警告が出ない)
tar -czvf log_backup.tar.gz -C /var log/
まとめ
Linuxの tar コマンドは、サーバー運用やファイル配布の基本中の基本ツールです。本記事の重要ポイントを振り返りましょう。
- 最速コマンド : 解凍は
tar -xzvf archive.tar.gz、圧縮はtar -czvf backup.tar.gz dir/、中身確認はtar -tzvf archive.tar.gz。 - アーカイブと圧縮の分離 :
tarが属性(権限・所有者・日時)を保持して束ね、gzipなどの圧縮ツールが容量を削減する。 - 実務オプション : サーバー移行時は
-pで権限を完全維持し、--excludeは必ず対象パスの 前 に記述して軽量化する。 - 構文の鉄則 :
-fオプションの直後には必ずアーカイブファイル名を置く(間違えるとデータ上書きの危険あり)。
日々の運用やスクリプト作成で迷った際は、ぜひ本記事の早見表やコピペスニペットを活用してください。

コメント