Linuxコマンド - ファイルの圧縮と解凍
概要
ここでは、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
オプション | 説明 |
---|---|
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
オプションの初期値は1
、0
を指定することにより、空いているスレッドを全て使用する。
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の順である必要がある