ファイルのパッケージ化と圧縮

LinuxLinuxBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、targzipzip などの一般的なLinuxコマンドを使ってファイルとディレクトリをパッケージ化して圧縮する方法を学びます。これらのツールは、Linuxシステム上のファイルとディレクトリを管理するために欠かせないもので、効率的にデータを保存して転送することができます。基本操作から始めて、徐々により複雑なタスクに進み、各ステップを詳細に説明します。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/CompressionandArchivingGroup(["Compression and Archiving"]) linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux(("Linux")) -.-> linux/FileandDirectoryManagementGroup(["File and Directory Management"]) linux(("Linux")) -.-> linux/SystemInformationandMonitoringGroup(["System Information and Monitoring"]) linux/BasicFileOperationsGroup -.-> linux/ls("Content Listing") linux/BasicFileOperationsGroup -.-> linux/touch("File Creating/Updating") linux/FileandDirectoryManagementGroup -.-> linux/cd("Directory Changing") linux/FileandDirectoryManagementGroup -.-> linux/mkdir("Directory Creating") linux/SystemInformationandMonitoringGroup -.-> linux/du("File Space Estimating") linux/CompressionandArchivingGroup -.-> linux/tar("Archiving") linux/CompressionandArchivingGroup -.-> linux/zip("Compressing") linux/CompressionandArchivingGroup -.-> linux/gzip("Gzip") linux/CompressionandArchivingGroup -.-> linux/unzip("Decompressing") subgraph Lab Skills linux/ls -.-> lab-385413{{"ファイルのパッケージ化と圧縮"}} linux/touch -.-> lab-385413{{"ファイルのパッケージ化と圧縮"}} linux/cd -.-> lab-385413{{"ファイルのパッケージ化と圧縮"}} linux/mkdir -.-> lab-385413{{"ファイルのパッケージ化と圧縮"}} linux/du -.-> lab-385413{{"ファイルのパッケージ化と圧縮"}} linux/tar -.-> lab-385413{{"ファイルのパッケージ化と圧縮"}} linux/zip -.-> lab-385413{{"ファイルのパッケージ化と圧縮"}} linux/gzip -.-> lab-385413{{"ファイルのパッケージ化と圧縮"}} linux/unzip -.-> lab-385413{{"ファイルのパッケージ化と圧縮"}} end

サンプル ディレクトリ構造の作成

作業用のサンプル ディレクトリ構造を作成して始めましょう。これにより、異なる種類のファイルやディレクトリでのファイルのパッケージ化と圧縮の仕組みを理解するのに役立ちます。

ターミナルを開き、次のコマンドを入力します。

cd ~/project
mkdir -p test_dir/{subdir1,subdir2}
echo "This is file 1" > test_dir/file1.txt
echo "This is file 2" > test_dir/file2.txt
echo "This is in subdir1" > test_dir/subdir1/subfile1.txt
echo "This is in subdir2" > test_dir/subdir2/subfile2.txt

これらのコマンドが何をするか解説しましょう。

  1. cd ~/project: これにより、現在のディレクトリをホーム ディレクトリ内の project フォルダに変更します。
  2. mkdir -p test_dir/{subdir1,subdir2}: これにより、新しいディレクトリ test_dir とその中に 2 つのサブディレクトリ subdir1subdir2 が作成されます。-p オプションにより、mkdir は必要に応じて親ディレクトリを作成します。
  3. echo コマンドは、新しいディレクトリ構造内の異なる場所にサンプル コンテンツを含むテキスト ファイルを作成します。

では、作成した構造を確認しましょう。

tree test_dir

この出力が表示されない場合や、「コマンドが見つかりません」というエラーが表示された場合は、心配しないでください。tree コマンドがシステムにインストールされていない場合があります。代わりに ls -R test_dir を使用することができ、同様の出力(ただしグラフィカルなものは少ない)が表示されます。

tar を使ったファイルのパッケージ化

サンプル ディレクトリ構造ができたので、tar コマンドを使ってファイルをパッケージ化する方法を学びましょう。tar は "tape archive" の略で、元々はテープ ドライブにアーカイブを作成するために使用されていました。今日では、複数のファイルやディレクトリを 1 つのファイルにまとめるために一般的に使用されています。

test_dir をパッケージ化しましょう。

cd ~/project
tar -cvf test_archive.tar test_dir

このコマンドを解説しましょう。

  • tar: アーカイブを作成するために使用するコマンド。
  • -c: このオプションは tar に新しいアーカイブを作成するように指示します。
  • -v: これは "verbose" の略です。tar にアーカイブに追加するファイルの名前を表示させます。これはオプションですが、何が起こっているかを確認するのに役立ちます。
  • -f: このオプションの後に作成したいアーカイブ ファイルの名前を指定します。
  • test_archive.tar: 新しいアーカイブ ファイルに付ける名前です。.tar 拡張子は tar アーカイブの慣例です。
  • test_dir: アーカイブにパッケージ化するディレクトリです。

このコマンドを実行すると、アーカイブに追加されるファイルの一覧が表示されます。

アーカイブを展開せずにその内容を表示するには、次のコマンドを使用できます。

tar -tvf test_archive.tar

このコマンドは、指定された (-f) test_archive.tar ファイルの内容を詳細に (-v) 一覧表示 (-t) します。

tar アーカイブからのファイルの抽出

tar アーカイブを圧縮する前に、そこからファイルを抽出する方法を学びましょう。tar アーカイブを扱う際には重要なスキルです。

test_archive.tar ファイルの内容を抽出するには:

mkdir extracted_tar
tar -xvf test_archive.tar -C extracted_tar

このコマンドを解説しましょう。

  • mkdir extracted_tar:これは、アーカイブの内容を置くための新しいディレクトリ extracted_tar を作成します。
  • tar:アーカイブを抽出するために使用するコマンド。
  • -x:このオプションは tar にアーカイブからファイルを抽出するように指示します。
  • -v:これにより操作が詳細に表示され、抽出される各ファイルが表示されます。
  • -f:このオプションは操作対象のアーカイブ ファイルの名前を指定します。ファイルを抽出する際には、抽出する tar ファイルのパスまたは名前が続きます。
  • -C extracted_tar:このオプションは tar にファイルを抽出する前に extracted_tar ディレクトリに移動するように指示します。

このコマンドを実行すると、抽出されるファイルの一覧が表示されます。

抽出を確認するには、次のコマンドを使用できます。

tree extracted_tar

または tree が利用できない場合:

ls -R extracted_tar

これにより、アーカイブ内にあったディレクトリ構造とファイルが表示されます。

gzip を使ったファイルの圧縮

tar アーカイブを作成したので、gzip を使ってそれを圧縮しましょう。

gzip test_archive.tar

このコマンドは、test_archive.tar を圧縮して test_archive.tar.gz にリネームします。元の test_archive.tar ファイルは圧縮版に置き換えられます。

圧縮されたファイルのサイズを確認するには、次のコマンドを使用できます。

ls -lh test_archive.tar.gz

-lh オプションは、ファイルサイズを人が読みやすい形式(KB、MB など)で表示します。

.tar.gz 拡張子が一般的ですが、同じものとして .tgz も見られることに注意してください。

パッケージ化と圧縮の違いを理解する

パッケージ化と圧縮の両方を行ったので、これらの操作の違いを理解し、ファイルサイズを比較しましょう。

  1. パッケージ化(アーカイブ化):

    • 目的:複数のファイルとディレクトリを 1 つのファイルにまとめること。
    • 行うこと:ファイルをまとめ、いくつかのメタデータを追加する。
    • 例のツール:tar(テープ アーカイブ)
    • 結果:アーカイブの合計サイズは、その中に含まれるすべてのファイルのサイズの合計よりもやや大きくなることが多い。
  2. 圧縮:

    • 目的:ファイルまたはアーカイブのサイズを小さくすること。
    • 行うこと:データ内の冗長性を取り除くアルゴリズムを適用し、ファイルを小さくする。
    • 例のツール:gzipbzip2xz
    • 結果:圧縮されたファイルは元のファイルよりも小さくなるが、使用する前に解凍が必要である。

元のディレクトリ、tar アーカイブ、および圧縮された tar.gz ファイルのサイズを比較しましょう。

## 元のディレクトリのサイズ
echo "元のディレクトリのサイズ:"
du -sh test_dir

## tar アーカイブのサイズ(この比較のために再作成します)
tar -cvf test_archive_compare.tar test_dir
echo "tar アーカイブのサイズ:"
ls -lh test_archive_compare.tar

## 圧縮された tar.gz ファイルのサイズ
echo "圧縮された tar.gz ファイルのサイズ:"
ls -lh test_archive.tar.gz

次のことに気付くでしょう。

  1. tar アーカイブは元のディレクトリよりもやや大きい。これは、tar がアーカイブにファイル名、パーミッション、ディレクトリ構造などのいくつかのメタデータを追加するためである。
  2. 圧縮された tar.gz ファイルは、元のディレクトリと tar アーカイブの両方よりも大幅に小さい。

パッケージ化後のサイズの増加は正常で予想される。tar 形式は、解凍時にディレクトリ構造を正しく再構築するために必要なファイル メタデータを格納するための少量のオーバーヘッドを追加します。このオーバーヘッドは、大きなディレクトリでは通常無視できますが、非常に小さなファイルやディレクトリでは目立つ場合があります。

一方、圧縮は、データ内の冗長性を特定して削除することにより、ファイルサイズを大幅に削減します。これは、テキスト ファイルや繰り返し内容のあるファイルに対して特に効果的です。

1 ステップで圧縮されたアーカイブを作成する

tar アーカイブを作成してから圧縮するという個別の手順を理解するのは役に立ちますが、実際にはこれらの手順はしばしば組み合わされます。tar コマンドには、作成中に gzip を使ってアーカイブを圧縮するための組み込みオプションがあります。

1 ステップで test_dir の圧縮された tar アーカイブを作成しましょう。

cd ~/project
tar -czvf test_combined.tar.gz test_dir

このコマンドは以前使ったものに似ていますが、重要な追加が 1 つあります。

  • -z:このオプションは tar に gzip を使ってアーカイブを圧縮するように指示します。

結果として得られる test_combined.tar.gz ファイルは、前の 2 つの手順で作成したものと同等ですが、1 回ですべて行っています。

この圧縮されたアーカイブを展開せずにその内容を表示するには:

tar -tzvf test_combined.tar.gz

ここでの -z オプションは、tar に対して gzip で圧縮されたファイルを扱っていることを伝えます。

圧縮されたアーカイブからのファイルの抽出

圧縮されたアーカイブを作成したので、そこからファイルを抽出する方法を知ることが重要です。test_combined.tar.gz ファイルの内容を抽出しましょう。

mkdir extracted
tar -xzvf test_combined.tar.gz -C extracted

このコマンドを解説しましょう。

  • mkdir extracted:これは、アーカイブの内容を置くための新しいディレクトリ extracted を作成します。
  • tar:アーカイブを抽出するために使用するコマンド。
  • -x:このオプションは tar にアーカイブからファイルを抽出するように指示します。
  • -z:gzip で圧縮されたファイルを扱っているために必要なオプションです。
  • -v:これにより操作が詳細に表示され、抽出される各ファイルが表示されます。
  • -f:この後に抽出したいアーカイブ ファイルの名前が続きます。
  • -C extracted:このオプションは tar にファイルを抽出する前に extracted ディレクトリに移動するように指示します。

このコマンドを実行すると、抽出されるファイルの一覧が表示されます。

抽出を確認するには、次のコマンドを使用できます。

tree extracted

または tree が利用できない場合:

ls -R extracted

これにより、アーカイブ内にあったディレクトリ構造とファイルが表示されます。

クロスプラットフォーム互換性のための zip の使用

targzip は Linux や Unix 互換システムで一般的ですが、zip 形式は Windows システムとの互換性を向上させるためによく使用されます。test_dir の zip アーカイブを作成しましょう。

cd ~/project
zip -r test_archive.zip test_dir

このコマンドの機能は以下の通りです。

  • zip:zip アーカイブを作成するコマンド。
  • -r:このオプションは zip に再帰的に動作させるように指示し、すべてのファイルとサブディレクトリを含めます。
  • test_archive.zip:zip ファイルに与える名前です。
  • test_dir:zip アーカイブに追加するディレクトリです。

このアーカイブを解凍するには、次のコマンドを使用できます。

unzip -d unzipped_files test_archive.zip

-d オプションは解凍先のディレクトリを指定します。unzipped_files が存在しない場合、unzip はそれを作成します。

Zip ファイルは、ほぼすべてのオペレーティング システムで簡単に認識でき、利用できるという利点があり、異なるプラットフォームのユーザーとのファイル共有において良い選択肢になっています。

まとめ

この実験では、Linux で一般的に使用されるいくつかの重要なファイルのパッケージ化と圧縮技術を学びました。

  1. ファイルとディレクトリを整理する方法を示すために、作業用のサンプル ディレクトリ構造を作成しました。
  2. 複数のファイルとディレクトリをまとめる際に便利な、圧縮なしでファイルをパッケージ化するために tar を使用しました。
  3. パッケージ化されたファイルを扱う際の必須スキルである、tar アーカイブからファイルを抽出する方法を学びました。
  4. ファイルの保存や転送時にファイルサイズを大幅に削減できるように、gzip を使用してファイルを圧縮しました。
  5. パッケージ化と圧縮の違いを学び、それぞれの目的と使用シーンを理解しました。
  6. Linux システムで一般的な操作である、targzip を組み合わせて 1 ステップで圧縮されたアーカイブを作成する方法を学びました。
  7. パッケージ化された圧縮ファイルを扱う際のもう 1 つの重要なスキルである、圧縮されたアーカイブからファイルを抽出する方法を練習しました。
  8. 最後に、Windows ユーザーとのファイル共有時に特に便利な、クロスプラットフォーム互換性の高いアーカイブを作成するために zip を使用しました。

これらのスキルは、Linux での効率的なファイル管理にとって不可欠です。特に大量のデータを扱う場合や、システム間でファイルを転送する場合に役立ちます。圧縮によりファイルサイズを大幅に削減できることを忘れないでください。これにより、保存と転送がはるかに効率的になります。

Linux を使い続けるうちに、これらのコマンドがファイルとディレクトリの管理にとって非常に役立つことに気付くでしょう。これらの操作を練習して、ファイルのパッケージ化と圧縮技術に精通しましょう。