このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。
Linuxコマンドの基本:tarとgzipを組み合わせる

tarとgzipを組み合わせる
ファイルやディレクトリを効率的にまとめて圧縮・展開する方法として、tarコマンドとgzipコマンドの組み合わせが広く利用されています。ここでは、tarとgzipを組み合わせて複数のファイルやディレクトリを一つの圧縮ファイルにまとめる方法について、図や表を用いて分かりやすく解説します。

なぜtarとgzipを組み合わせるのか
- gzipの制限
・gzipは単一のファイルしか圧縮できません。 - 複数ファイルの圧縮
・複数のファイルやディレクトリを一つにまとめて圧縮したい場合があります。 - 解決策
・まずtarでファイルやディレクトリを一つのアーカイブファイルにまとめ、その後gzipで圧縮します。
tarとgzipの基本的な使い方
tarコマンドでアーカイブを作成
【書式】tar cf アーカイブ名.tar ファイルやディレクトリ
コマンド例
tar cf dir.tar dirgzipコマンドで圧縮
【書式】gzip アーカイブ名.tar
コマンド例:dir.tar.gzという圧縮ファイルが作成される。
gzip dir.tartarとgzipの組み合わせの流れ
以下のように、tarでアーカイブを作成し、その後gzipで圧縮します。
tarとgzipの組み合わせ
ファイルやディレクトリ → tarでアーカイブ(dir.tar) → gzipで圧縮(dir.tar.gz)
実践:tarとgzipを使った圧縮

ステップ1:サンプルディレクトリとファイルの作成
user01@ubuntu:~$ mkdir dir
user01@ubuntu:~$ touch dir/file-{1..9}.txt説明
dirというディレクトリを作成。file-1.txtからfile-9.txtまでのファイルを作成。
ステップ2:tarコマンドでアーカイブを作成し、gzipで圧縮
user01@ubuntu:~$ tar cf dir.tar dir
user01@ubuntu:~$ gzip dir.tar結果
user01@ubuntu:~$ ls -l
合計 52
drwxrwxr-x 2 user01 user01 4096 12月 2 01:02 dir
-rw-rw-r-- 1 user01 user01 213 12月 2 01:02 dir.tar.gzまとめて圧縮するコマンド
一度にコマンドを実行する場合
user01@ubuntu:~$ tar czf dir.tar.gz dir説明
tarのzオプションを使用することで、gzipでの圧縮を同時に行います。c:新規アーカイブの作成。z:gzipによる圧縮。f:ファイル名の指定。
tarコマンドだけで圧縮・展開
gzip圧縮を含むtarコマンド
圧縮
user01@ubuntu:~$ tar czf dir.tar.gz dir展開
user01@ubuntu:~$ tar xzf dir.tar.gzオプションの説明
| オプション | 説明 |
|---|---|
c | 新規アーカイブの作成 |
x | アーカイブの展開 |
z | gzipによる圧縮・展開 |
f | ファイル名を指定 |
パイプとリダイレクトを使ったtar+gzファイルの作成
古いtarコマンドにはgzipの機能がなかったため、パイプラインを利用してtarとgzipを組み合わせていました。この手法は現在でも学ぶ価値があります。
パイプラインを使った例
user01@ubuntu:~$ tar cf - dir | gzip -c > dir.tar.gz説明
tar cf - dir:-は標準出力を意味し、アーカイブを標準出力に出力。|:パイプで次のコマンドに出力を渡す。gzip -c:標準入力から受け取ったデータを圧縮し、標準出力に出力。>:出力リダイレクトでファイルに保存。
図:パイプラインによる圧縮処理
dir
↓
tar cf - dir(アーカイブデータを標準出力)
↓
gzip -c(圧縮データを標準出力)
↓
出力リダイレクト(dir.tar.gz)一時ファイルを使わないメリット
- ディスク容量の節約:大きなファイルを扱う場合、一時ファイルを作成しないためディスク容量を節約できます。
- 効率的な処理:一連の処理をメモリ上で行うため、高速に処理できます。
展開時のコマンド
user01@ubuntu:~$ gzip -d -c dir.tar.gz | tar xf -説明
gzip -d -c dir.tar.gz:圧縮ファイルを展開し、標準出力に出力。|:パイプで次のコマンドに出力を渡す。tar xf -:標準入力から受け取ったアーカイブを展開。ファイル名として-を指定すると標準入力から読み込みます。
リモートホストとのデータ転送への応用
sshコマンドと組み合わせることで、リモートホスト上のディレクトリを直接手元にコピーすることができます。
リモートホストからデータを取得
user01@ubuntu:~$ ssh user01@serverA 'tar czf - dir' | tar xzf -説明
ssh user01@serverA 'tar czf - dir':リモートホスト上でtarコマンドを実行し、圧縮データを標準出力に出力。|:パイプでローカルのtarコマンドにデータを渡す。tar xzf -:受け取った圧縮データを展開。
メリット
- 効率的なデータ転送:圧縮された状態でデータを転送するため、ネットワーク帯域を節約。
- 一時ファイル不要:中間ファイルを作成せずにデータを取得。
ここで作成したファイルの削除
作成したファイルやディレクトリを削除してクリーンアップします。
user01@ubuntu:~$ rm -rf dir dir.tar dir.tar.gz- 注意:
rm -rfコマンドは強力な削除コマンドです。削除するファイルやディレクトリを十分に確認してから実行してください。
まとめ
tarとgzipの組み合わせ
・tarで複数のファイルやディレクトリを一つのアーカイブファイルにまとめる。
・その後、gzipで圧縮してファイルサイズを削減。tarコマンドの便利なオプション
・zオプションを使用することで、tarだけで圧縮・展開が可能。- パイプラインの活用
・パイプとリダイレクトを組み合わせて、一時ファイルを作成せずに効率的に圧縮・展開。 - リモートホストとの連携
・sshコマンドと組み合わせて、リモートのデータを直接圧縮・転送・展開。 - メリット
・ディスク容量やネットワーク帯域の節約。
・処理の高速化。
・スクリプトや自動化処理への応用。
次のステップ
tarとgzipの他にも、bzip2やxzなどの圧縮ツールも存在します。- 圧縮率や処理速度を考慮して、適切なツールを選択してください。
これで、tarとgzipを組み合わせてファイルやディレクトリを効率的に圧縮・展開する方法の解説を終わります。実際にコマンドを試して、使い方に慣れていきましょう。
