Linuxコマンド - ファイルの圧縮と解凍

提供:MochiuWiki : SUSE, EC, PCB
ナビゲーションに移動 検索に移動

概要

ここでは、Linuxでファイルの圧縮、解凍方法を記載する。


tar.gz形式

圧縮

tar zcf  xxxx.tar.gz <ファイルのパスまたはディレクトリのパス>
# または
tar zcvf xxxx.tar.gz <ファイルのパスまたはディレクトリのパス>


解凍

tar xf   xxxx.tar.gz
# または
tar zxvf xxxx.tar.gz



tar.bz2形式

圧縮

tar jcf  xxxx.tar.bz2 <ファイルのパスまたはディレクトリのパス>
# または
tar jcvf xxxx.tar.bz2 <ファイルのパスまたはディレクトリのパス>


解凍

tar xf   xxxx.tar.bz2
# または
tar jxvf xxxx.tar.bz2



tar.xz形式

XZ形式とは、LZMA2のデータ圧縮アルゴリズムを採用したデータ圧縮フォーマットおよびその圧縮プログラムである。
圧縮に時間が掛かるが圧縮率は良い。

圧縮

tar Jcf  xxxx.tar.xz <ファイルのパスまたはディレクトリのパス>
# または
tar Jcvf xxxx.tar.xz <ファイルのパスまたはディレクトリのパス>


解凍

tar xf   xxxx.tar.xz
# または
tar Jxvf xxxx.tar.xz



xz形式

圧縮
圧縮率を0~9で指定することができる。
-0オプションは、圧縮率が低いが高速に処理することができる。
-9オプションは、時間が掛かるが圧縮率は高くなる。

# 元のファイルを削除する
xz <ファイル名>

# 元のファイルを削除しない
xz -k <ファイル名>

# 圧縮率を指定する
xz -0 <ファイル名>
xz -9 <ファイル名>


解凍

# 圧縮ファイルを削除する
xz -d <XZ形式のファイル>.xz
unxz -d <XZ形式のファイル>.xz

# 圧縮ファイルを削除しない
xz -dk <XZ形式のファイル>.xz
unxz -dk <XZ形式のファイル>.xz


その他

# 圧縮ファイル内のファイルを一覧表示する
xz -l <XZ形式のファイル>.xz
unxz -l <XZ形式のファイル>.xz



tar.lz形式

LZ形式とは、LZIPのデータ圧縮アルゴリズムを採用したデータ圧縮フォーマットおよびその圧縮プログラムである。
圧縮に時間が掛かるが圧縮率は良い。

tar.lz形式へ圧縮および解凍するには、Lzipをインストールする必要がある。

  • パッケージ管理システムからインストールする場合
    sudo zypper install lzip

  • ソースコードからインストールする場合
    Lzipの公式Webサイトにアクセスして、ソースコードをダウンロードする。
    ダウンロードしたファイルを解凍する。
    tar xf lzip-<バージョン>.tar.lz
    cd lzip-<バージョン>

    ビルド用ディレクトリを作成する。
    mkdir build && cd build

    Lzipをビルドおよびインストールする。
    ../configure --prefix=<Lzipのインストールディレクトリ>
    make -j $(nproc)
    make install

    ~/.profileファイル等に環境変数PATHを追記する。
    vi ~/.profile
    export PATH="/<Lzipのインストールディレクトリ>/bin:$PATH"


圧縮

tar --lzip -cf  <ファイル名>.tar.lz <ファイルのパスまたはディレクトリのパス>
# または
tar --lzip -cvf <ファイル名>.tar.lz <ファイルのパスまたはディレクトリのパス>


圧縮(圧縮率を上げる場合)

tar cf <ファイル名>.tar <ファイルのパスまたはディレクトリのパス>; lzip -9k <ファイル名>.tar


解凍

tar xf   <ファイル名>.tar.lz
# または
tar xvf  <ファイル名>.tar.lz



tar形式

圧縮

tar cf  <ファイル名>.tar <ファイルのパスまたはディレクトリのパス>
# または
tar cvf <ファイル名>.tar <ファイルのパスまたはディレクトリのパス>


解凍

tar xf  <ファイル名>.tar
# または
tar xvf <ファイル名>.tar


tarコマンドにおけるオプションの意味
オプション 説明
z gz
c 新しいtarファイルを作る(create)
x 解凍する(extract)
v 圧縮・解凍状況を表示する(verbose)
f 圧縮ファイルを指定する(filename)
j bz2
J xz



zip形式

圧縮

# パスワードなし
zip -r <ファイル名>.zip ディレクトリ名

# パスワード付き
zip -e -r <ファイル名>.zip <ディレクトリ名>  または  $ zip -e -r --password=<パスワード> <ファイル名>.zip <ディレクトリ名>


解凍

unzip <ファイル名>.zip  # パスワード付きのzipファイルの場合、インタラクティブに2回とも同じパスワードの入力を求められる
# または
unzip -P <パスワード> <ファイル名>.zip


Windows上で日本語ファイル名のファイルをzipで圧縮して、Linux上にてunzipコマンドで解凍すると文字化けすることがあるが、
unarで解凍すると文字化けしない。

unar <ファイル名>.zip



7zip

圧縮

7z a <圧縮後のファイル名>.7z <圧縮元のファイル名またはディレクトリ名>

解凍

7z e <圧縮されたファイル名>.7z



Zstandard

Zstandardとは

2016年の8月にMeta社(旧Facebook)がオープンソース化した圧縮アルゴリズムである。
リアルタイム圧縮を重要視しており、圧縮率を維持しながら、高い圧縮速度と伸長速度、使用メモリ量の削減を実現している。

また、辞書を作成することにより、更に圧縮率を高めることが可能である。
多様な言語(Java、Swift、Go、Python等)で実装されている。

Zstandardのインストール

# RHEL
sudo dnf install zstd

# SUSE
sudo zypper install zstd libzstd1


圧縮

ファイルの圧縮

ファイルを圧縮する。
出力ファイル名は、<ファイル名>.zstとなる。

zstd <ファイル名>

# 圧縮前のファイルおよびディレクトリを削除する場合
zstd --rm <ファイル名>


出力ファイル名を指定して圧縮する。

zstd <ファイル名> -o <出力ファイル名>.zst

# 圧縮前のファイルおよびディレクトリを削除する場合
zstd --rm <ファイル名> -o <出力ファイル名>.zst


ディレクトリの圧縮

ディレクトリを圧縮する。

# まず、Tarballファイルにする
tar xf <Tarballファイル名>.tar <ディレクトリ名>

# TasrballファイルをZstandard形式で圧縮する
zstd <Tarballファイル名>.tar
## または
zstd <Tarballファイル名>.tar -o <圧縮後のファイル名>.zst
## または
zstd <圧縮後のファイル名>.zst <Tarballファイル名>.tar


tarコマンドで、ディレクトリをtar.zst形式に圧縮することもできる。
tarコマンドでZstandard形式の圧縮設定を行う場合は、-Iオプションを付加してzstdコマンドとzstdのオプションを指定する。

tar --zstd -cf <圧縮後のファイル名>.tar.zst <圧縮前のディレクトリ名>

# 圧縮率を設定する場合
# 以下の例では、圧縮率を最大に指定している
tar -I 'zstd --ultra -22' -cf <圧縮後のファイル名>.tar.zst <圧縮前のディレクトリ名>


圧縮率の設定

圧縮レベルを1〜19(デフォルト : 3)で指定して圧縮する。

zstd -11 <ファイル名>


--ultraオプションを付加することにより、圧縮レベルを20以上にすることもできる。(最大圧縮レベル : 22)

zstd --ultra -22 <ファイル名>


再帰的な圧縮

ディレクトリ内のファイル群を再帰的に圧縮する。
Zstandardは圧縮アルゴリズムであるため、ファイルアーカイブ機能は存在しない。

zstd -r <ディレクトリ名またはファイル名>


マルチスレッドの使用

マルチスレッドを使用して圧縮することにより、処理時間を短縮することもできる。
-Tオプションでは、スレッド数を指定することができる。
-Tオプションの初期値は10を指定することにより、空いているスレッドを全て使用する。

zstd --ultra -22 -T0 <ファイル名>


-oオプションを付加することにより、出力するファイル名を変更することができる。

zstd --ultra -22 -T0 <圧縮元のファイル名> -o <出力するファイル名>


解凍

zstd -d <ディレクトリ名またはファイル名>.zst
# または
unzstd <ディレクトリ名またはファイル名>.zst



パスワードの設定

XZ形式やZStandard形式で圧縮する時に、パスワードを設定する機能はない。
これらの圧縮形式は、データの圧縮に特化しており、暗号化機能を持たないためである。

しかし、暗号化を行う場合は、圧縮後に他のツールを使用してファイルを暗号化する。

パスワードを設定して圧縮

  • OpenSSLを使用する場合
    まず、ファイルを圧縮する。
    tar Jcf <圧縮後のファイル名>.tar.xz <圧縮前のファイルまたはディレクトリ>
    次に、OpenSSLで暗号化する。
    このコマンドも、ファイルに対してパスワード保護をかける。
    openssl enc -aes-256-cbc -salt -pbkdf2 -in <圧縮後のファイル名>.tar.xz -out <圧縮後のファイル名>.tar.xz.enc


  • GPGを使用する場合
    まず、ファイルを圧縮する。
    tar Jcf <圧縮後のファイル名>.tar.xz <圧縮前のファイルまたはディレクトリ>
    次に、GPGで暗号化する。
    このコマンドにより、圧縮ファイルは<圧縮後のファイル名>.tar.xz.gpgファイルを生成して、パスワードを設定することができる。
    対称暗号化 (-cオプション) : 単純にパスワードのみで暗号化する場合や複数人で共有する場合等の一時的な暗号化に適している。
    gpg -c <圧縮後のファイル名>.tar.xz

    公開鍵暗号化 (--encryptオプション) : 特定の受取人に対して安全に暗号化する場合や受取人のみが復号できるため、セキュリティが高い。
    この場合、ファイルを復号するには、対応する秘密鍵とパスフレーズが必要となる。
    gpg --encrypt --recipient <特定の受取人 例: recipient@example.com> <圧縮後のファイル名>.tar.xz


パスワードを指定して解凍

パスワード保護された圧縮ファイルを解凍する場合、使用した暗号化ツールに応じて異なるコマンドを使用する。

  • OpenSSLで暗号化されたファイルの場合
    まず、復号して元の圧縮ファイルを取得する。
    こちらもパスワードの入力が求められる。復号後に<圧縮後のファイル名>.tar.xzが生成される。
    openssl enc -d -aes-256-cbc -pbkdf2 -in <圧縮後のファイル名>.tar.xz.enc -out <圧縮後のファイル名>.tar.xz
    次に、圧縮ファイルを解凍する。
    tar xf <圧縮後のファイル名>.tar.xz


  • GPGで暗号化されたファイルの場合
    まず、復号して元の圧縮ファイルを取得する。
    このコマンドでは、パスワードの入力が求められる。復号後に<圧縮後のファイル名>.tar.xzというファイルが生成される。
    gpg -d -o archive.tar.xz archive.tar.xz.gpg
    次に、圧縮ファイルを解凍する。
    tar xf <圧縮後のファイル名>.tar.xz



その他

debファイル

# 展開
ar xf <debファイル>

# 作成
tar -cf data.tar <データファイル>
gunzip data.tar

tar -cf control.tar control postinstall prerm
gunzip control.tar

ar r <作成するdebファイル名> debian-binary control.tar.gz data.tar.gz  # アーカイブする順は、debian-binary、control.tar.gz、data.tar.gzの順である必要がある