このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。

Linuxコマンドの基本:tarとgzipを組み合わせる

tarとgzipを組み合わせる

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

なぜtarとgzipを組み合わせるのか

  • gzipの制限
    gzipは単一のファイルしか圧縮できません。
  • 複数ファイルの圧縮
    ・複数のファイルやディレクトリを一つにまとめて圧縮したい場合があります。
  • 解決策
    ・まずtarでファイルやディレクトリを一つのアーカイブファイルにまとめ、その後gzipで圧縮します。

tarとgzipの基本的な使い方

tarコマンドでアーカイブを作成

【書式】
tar cf アーカイブ名.tar ファイルやディレクトリ

コマンド例

tar cf dir.tar dir

gzipコマンドで圧縮

【書式】
gzip アーカイブ名.tar

コマンド例dir.tar.gzという圧縮ファイルが作成される。

gzip dir.tar

tarと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

説明

  • tarzオプションを使用することで、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アーカイブの展開
zgzipによる圧縮・展開
fファイル名を指定

パイプとリダイレクトを使ったtar+gzファイルの作成

 古いtarコマンドにはgzipの機能がなかったため、パイプラインを利用してtargzipを組み合わせていました。この手法は現在でも学ぶ価値があります。

パイプラインを使った例

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コマンドは強力な削除コマンドです。削除するファイルやディレクトリを十分に確認してから実行してください。

まとめ

  • targzipの組み合わせ
    tarで複数のファイルやディレクトリを一つのアーカイブファイルにまとめる。
    ・その後、gzipで圧縮してファイルサイズを削減。
  • tarコマンドの便利なオプション
    zオプションを使用することで、tarだけで圧縮・展開が可能。
  • パイプラインの活用
    ・パイプとリダイレクトを組み合わせて、一時ファイルを作成せずに効率的に圧縮・展開。
  • リモートホストとの連携
    sshコマンドと組み合わせて、リモートのデータを直接圧縮・転送・展開。
  • メリット
    ・ディスク容量やネットワーク帯域の節約。
    ・処理の高速化。
    ・スクリプトや自動化処理への応用。

次のステップ

  • targzipの他にも、bzip2xzなどの圧縮ツールも存在します。
  • 圧縮率や処理速度を考慮して、適切なツールを選択してください。

 これで、targzipを組み合わせてファイルやディレクトリを効率的に圧縮・展開する方法の解説を終わります。実際にコマンドを試して、使い方に慣れていきましょう。