MENU

配布パッケージの圧縮ファイルをLinuxで正しく展開・配置する手順

.tar.gz(または .tgz)形式のアーカイブは、OSS ソフトウェアのソースやサーバーバックアップのやり取りで日常的に登場します。展開コマンド自体は1行で済みますが、展開前に中身を確認せずに実行すると、カレントディレクトリにファイルが散乱するトラブルが実務でも頻発します。本記事では「確認してから展開する」流れを標準手順として紹介します。

目次

基本の展開コマンド:まずこれを実行する

.tar.gz ファイルを展開するには以下のコマンドを使います。カレントディレクトリに展開されます。

# 基本の展開コマンド
tar xzvf ファイル名.tar.gz

# 例:PostgreSQL のソースアーカイブを展開する
tar xzvf postgresql-16.3.tar.gz

各オプションの意味は次のとおりです。

  • x:アーカイブから展開(extract)
  • z:gzip 圧縮を扱う
  • v:展開したファイル名を画面に表示(verbose)
  • f:操作対象のファイルを指定

Ubuntu 20.04・Debian 11・AlmaLinux/Rocky Linux 8 以降に同梱されている GNU tar 1.28 以降では、z を省略しても圧縮形式を自動判別します。tar xvf ファイル名.tar.gz と書いても問題なく動作します。ただし、シェルスクリプト内では形式を明示するために z を残しておくほうが後から読んだときに意図が伝わりやすくなります。

展開前に必ずやること:中身の構造を確認する

実務でよくある失敗が、トップレベルディレクトリを持たないアーカイブをそのまま展開してしまい、カレントディレクトリに大量のファイルが散乱するケースです。実際に展開する前に、t オプションで一覧を確認する習慣をつけておくと安心です。

# 展開せずにアーカイブ内のファイル一覧を表示する
tar tzf ファイル名.tar.gz | head -20

出力の先頭行がすべて同じディレクトリ名で始まっていれば、展開後に1つのディレクトリにまとまります。

# トップレベルディレクトリがある場合の出力例(安全)
postgresql-16.3/
postgresql-16.3/configure
postgresql-16.3/Makefile
postgresql-16.3/src/
...

# トップレベルディレクトリがない場合の出力例(要注意)
configure
Makefile
src/
...

後者のようにトップレベルディレクトリがない場合は、次のセクションで紹介する方法で展開先を指定してください。

展開先ディレクトリを指定する

-C オプションを使うと、カレントディレクトリ以外の場所に展開できます。展開先ディレクトリは事前に作成しておく必要があります。

# 展開先ディレクトリを作成してから展開する
mkdir -p /opt/myapp
tar xzvf myapp-1.2.tar.gz -C /opt/myapp

トップレベルディレクトリのないアーカイブを展開するときは、専用ディレクトリを作成してそこに展開するのが定石です。

# トップレベルなしのアーカイブを専用ディレクトリに展開する
mkdir -p /opt/myapp-1.2
tar xzvf myapp-1.2.tar.gz -C /opt/myapp-1.2

自動化スクリプトでよく使われるのが --strip-components オプションです。アーカイブ内のトップレベルディレクトリを除いた状態で展開できます。

# トップレベルディレクトリを1段取り除いて展開する
mkdir -p /opt/myapp
tar xzvf myapp-1.2.tar.gz --strip-components=1 -C /opt/myapp

# 事前確認:アーカイブのディレクトリ階層が何段あるかを調べる
tar tzf myapp-1.2.tar.gz | awk -F/ '{print NF-1}' | sort -n | head -1

実務でよく直面する落とし穴と対処法

root 所有ファイルを含むアーカイブ

ある運用現場では、バックアップアーカイブを一般ユーザーで展開しようとしてパーミッションエラーが続出したケースがありました。アーカイブ内に root 所有のファイルが含まれている場合は、sudo を付けて展開するか、展開後に chown で所有者を変更します。

# root 所有ファイルを含むアーカイブを展開する
sudo tar xzvf backup.tar.gz -C /var/www/

# 展開後に所有者を変更する場合
sudo chown -R www-data:www-data /var/www/html

展開前にディスク容量を確認する

大容量アーカイブを展開する前に、展開後のサイズと空き容量を照合しておきましょう。展開途中でディスクがフルになると、中途半端なファイル群が残り、後始末が面倒になります。

# 展開後の予想サイズをざっくり確認する(MB 単位)
tar tvzf largefile.tar.gz | awk '{sum += $3} END {printf "%.1f MB\n", sum/1024/1024}'

# 展開先の空き容量を確認する
df -h /opt

実務でよく使う応用パターン

URL から直接展開する

ファイルをいったん保存せず、ダウンロードしながら直接展開する方法です。一時ファイルを作らずに済むため、ストレージが限られたサーバーや CI 環境でよく使われます。

# curl でダウンロードしながら展開する
curl -L https://example.com/package-1.0.tar.gz | tar xzvf - -C /opt/

# wget を使う場合
wget -qO - https://example.com/package-1.0.tar.gz | tar xzvf - -C /opt/

信頼できる配布元であることを確認した上で実行してください。GPG 署名が提供されている場合は、ファイルをダウンロードしてから署名を検証した上で展開する手順のほうが安全です。

tar.bz2・tar.xz 形式の場合

カーネルソースや一部の OSS パッケージは .tar.xz.tar.bz2 形式で配布されています。GNU tar なら tar xvf で圧縮形式を自動判別して展開できます。明示的に指定する場合はそれぞれ j(bzip2)または J(xz)を使います。

# .tar.bz2 の展開
tar xjvf ファイル名.tar.bz2

# .tar.xz の展開
tar xJvf ファイル名.tar.xz

# GNU tar の自動判別(どの形式でも動く)
tar xvf ファイル名.tar.bz2
tar xvf ファイル名.tar.xz

圧縮率は xz > bz2 > gzip の順に高く、展開にかかる時間は逆順になります。ネットワーク越しの転送量を抑えたい場面では xz 形式のほうが有利ですが、展開速度を優先するなら gzip 形式が実用的です。用途に合わせて使い分けてください。

<PR>この記事に関連するおすすめ書籍

新しいLinuxの教科書 第2版

コマンド操作から基本的な運用までを手を動かしながら体系的に学べる定番書。地力を固めたい方に。

「コマンドは打てる。次は”現場で通用する型”を最短で身につけたい」——そんなあなたへ。

ネットの断片的なTipsをコピペするだけでは、体系的な運用スキルはなかなか積み上がりません。リナックスマスター.JPの無料メルマガ「リナマガ」では、現場で実際に使うLinuxサーバー運用の考え方を、順を追って実務目線でお届けしています。いま登録された方には、安全なサーバー構築の「型」をまとめた『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼント中です。

>> 図解60P『Linux入門マニュアル』を無料で受け取る
(メルマガ登録は10秒・いつでも解除OK)

※ 「独学の時間がもったいない」「プロから現場の技術を最短で学びたい」という本気の方には、2日で実務レベルが身につく初心者向けハンズオンセミナーもご用意しています。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

目次