- 1 xzコマンドとは?
- 2 検証環境
- 3 インストール方法
- 4 オプション一覧
- 5 ファイルの圧縮、解凍をする方法
- 6 圧縮前/解凍前のファイルを残す方法(-k)
- 7 同じ名前の圧縮ファイルを上書きする方法(-f)
- 8 圧縮/解凍の状況を表示する方法(-v)
- 9 圧縮ファイルの情報を確認する方法(-l)
- 10 圧縮率を変更する方法(-0,..,-9)
- 11 複数スレッドで圧縮する方法(-T)
- 12 圧縮ファイルの整合性をチェックする方法(-t)
- Z 参考情報
1 xzコマンドとは?
ファイルの圧縮、解凍をするツールです。XZ Utilsによると、圧縮アルゴリズムはLZMA2を使用していて、gzip より 30 %、bzip2 より 15 % 小さいファイルの作成が可能なようです。なお、CentOS7以降、カーネルモジュールはxzコマンドで圧縮されています。
[root@server ~]# ls /lib/modules/4.18.0-372.9.1.el8.x86_64/kernel/net/ipv4/ ah4.ko.xz inet_diag.ko.xz ipcomp.ko.xz tcp_bbr.ko.xz tunnel4.ko.xz esp4.ko.xz ip_gre.ko.xz ipip.ko.xz tcp_dctcp.ko.xz udp_diag.ko.xz esp4_offload.ko.xz ip_tunnel.ko.xz netfilter tcp_diag.ko.xz udp_tunnel.ko.xz gre.ko.xz ip_vti.ko.xz raw_diag.ko.xz tcp_nv.ko.xz xfrm4_tunnel.ko.xz
2 検証環境
AlmaLinux版数は以下のとおりです。
[root@server ~]# cat /etc/redhat-release AlmaLinux release 8.6 (Sky Tiger)
カーネル版数は以下のとおりです。
[root@server ~]# uname -r 4.18.0-372.9.1.el8.x86_64
3 インストール方法
xzパッケージをインストールします。
[root@server ~]# dnf -y install xz
xzコマンドの版数を確認します。
[root@server ~]# xz -V xz (XZ Utils) 5.2.4 liblzma 5.2.4
4 オプション一覧
オプション一覧は以下のとおりです。
[root@server ~]# xz -h Usage: xz [OPTION]... [FILE]... Compress or decompress FILEs in the .xz format. -z, --compress force compression -d, --decompress force decompression -t, --test test compressed file integrity -l, --list list information about .xz files -k, --keep keep (don't delete) input files -f, --force force overwrite of output file and (de)compress links -c, --stdout write to standard output and don't delete input files -0 ... -9 compression preset; default is 6; take compressor *and* decompressor memory usage into account before using 7-9! -e, --extreme try to improve compression ratio by using more CPU time; does not affect decompressor memory requirements -T, --threads=NUM use at most NUM threads; the default is 1; set to 0 to use as many threads as there are processor cores -q, --quiet suppress warnings; specify twice to suppress errors too -v, --verbose be verbose; specify twice for even more verbose -h, --help display this short help and exit -H, --long-help display the long help (lists also the advanced options) -V, --version display the version number and exit With no FILE, or when FILE is -, read standard input. Report bugs to <lasse.collin@tukaani.org> (in English or Finnish). XZ Utils home page: <https://tukaani.org/xz/>
5 ファイルの圧縮、解凍をする方法
5.1 圧縮、解凍する方法
テスト用のファイルを作成します。ファイルサイズは100Mとします。なお、fallocateコマンドの使い方は、ファイルの作り方 - hana_shinのLinux技術ブログを参照してください。
[root@server ~]# fallocate -l 100M test1.dat
作成したファイルを確認します。ファイルサイズが100Mであることがわかります。
[root@server ~]# ls -lh test1.dat -rw-r--r--. 1 root root 100M 3月 24 21:13 test1.dat
ファイルを圧縮します。
[root@server ~]# xz test1.dat
ファイルサイズを確認します。圧縮後のファイルサイズが16kになったことがわかります。なお、圧縮前のファイルは削除されます。圧縮前のファイルを残すためには、-kオプション(後述)を使用します。
[root@server ~]# ls -lh test1.dat.xz -rw-r--r--. 1 root root 16K 3月 24 21:13 test1.dat.xz
圧縮したファイルを元に戻します。
[root@server ~]# xz -d test1.dat.xz
ファイルサイズを確認します。ファイルサイズが元に戻ったことがわかります。
[root@server ~]# ls -lh test1.dat -rw-r--r--. 1 root root 100M 3月 24 21:13 test1.dat
5.2 複数のファイルを一度で圧縮する方法
テスト用のファイルを2つ作成します。
[root@server ~]# fallocate -l 100M test1.dat [root@server ~]# fallocate -l 100M test2.dat
各々のファイルをそれぞれ圧縮します。
[root@server ~]# xz test1.dat test2.dat
ファイルを確認します。各圧縮ファイルがtest1.dat.xz、test2.dat.xzという名前で作成されたことがわかります。
[root@server ~]# ls -lh test* -rw-r--r--. 1 root root 16K 3月 24 21:15 test1.dat.xz -rw-r--r--. 1 root root 16K 3月 24 21:15 test2.dat.xz
5.3 複数ファイルを1つのファイルに圧縮する方法
圧縮するファイルを確認します。
[root@server ~]# ls test* test1.dat test2.dat
複数のファイルを1つのファイルに圧縮します。
[root@server ~]# xz -c test1.dat test2.dat > test.dat.xz
圧縮前後のファイルを確認します。
[root@server ~]# ls -l test* -rw-r--r--. 1 root root 30776 3月 24 21:17 test.dat.xz -rw-r--r--. 1 root root 104857600 3月 24 21:15 test1.dat -rw-r--r--. 1 root root 104857600 3月 24 21:15 test2.dat
6 圧縮前/解凍前のファイルを残す方法(-k)
-kは圧縮前/解凍前のファイルを残すオプションです。
圧縮前のファイルを確認します。
[root@server ~]# ls -l test1.dat -rw-r--r--. 1 root root 104857600 3月 24 19:44 test1.dat
ファイルを圧縮します。
[root@server ~]# xz -k test1.dat
ファイルを確認します。圧縮前のファイル(test1.dat)が残っていることがわかります。
[root@server ~]# ls -lh test1* -rw-r--r--. 1 root root 100M 3月 24 19:44 test1.dat -rw-r--r--. 1 root root 16K 3月 24 19:44 test1.dat.xz
7 同じ名前の圧縮ファイルを上書きする方法(-f)
-fは同じ名前の圧縮ファイルを上書きするオプションです。
圧縮後のファイル名と同じファイル名のファイルが存在するとファイルを圧縮することができません。
[root@server ~]# xz -k test.dat xz: test.dat.xz: ファイルが存在します
-fオプションを指定すると、圧縮後のファイル名と同じファイル名のファイルが存在してもファイルを圧縮することができます。
[root@server ~]# xz -f -k test.dat [root@server ~]#
8 圧縮/解凍の状況を表示する方法(-v)
-vは圧縮/解凍の状況を表示するオプションです。ここでは、圧縮時の状況を表示してみます。
圧縮前のファイルを確認します。
[root@server ~]# ls -l test1.dat -rw-r--r--. 1 root root 104857600 3月 26 20:39 test1.dat
ファイルを圧縮すると、ファイル圧縮中の状況が表示されます。なお、以下の実行例は圧縮完了後のものです。ファイルサイズが小さかったので、圧縮中の状況を記載することができませんでした。
[root@server ~]# xz -v test1.dat test1.dat (1/1) 100 % 15.0 KiB / 100.0 MiB = 0.000 29 MiB/s 0:03
9 圧縮ファイルの情報を確認する方法(-l)
-lは圧縮ファイルの情報を表示するオプションです。
[root@server ~]# xz -l test1.dat.xz Strms Blocks Compressed Uncompressed Ratio Check Filename 1 1 15.0 KiB 100.0 MiB 0.000 CRC64 test1.dat.xz
10 圧縮率を変更する方法(-0,..,-9)
-0,...,-9は、圧縮率のオプションです。デフォルトは-6です。-0は高速ですが圧縮率が最も低く、-9は低速ですが圧縮率が最も高くなります。
ファイルを作成します。
[root@server ~]# head -c 100m /dev/urandom > test.dat
作成したファイルを確認します。
[root@server ~]# ls -l test.dat -rw-r--r--. 1 root root 104857600 3月 26 22:41 test.dat
11 複数スレッドで圧縮する方法(-T)
-Tはファイルを圧縮するスレッド数を指定するオプションです。ファイルサイズが大きいファイルを複数スレッドで分担して圧縮することで、圧縮にかかる時間を短縮することができます。
11.1 2つのスレッドで圧縮する方法(-T2)
2つのスレッドでファイルを圧縮してみます。
[root@server ~]# time xz -k -T2 test.dat
psコマンドでプロセスの状態を確認します。3つのスレッドが動作していることがわかります。なぜかスレッドが2つではなく3つ動作していました。なお、psコマンドの使い方は、psコマンドの使い方 - hana_shinのLinux技術ブログを参照してください。
[root@server ~]# ps -LC xz -o comm,pid,ppid,psr,wchan COMMAND PID PPID PSR WCHAN xz 10927 1921 1 - xz 10927 1921 2 - xz 10927 1921 0 -
圧縮にかかった時間を確認すると、約36秒であることがわかります。
[root@server ~]# time xz -k -T2 test.dat real 0m36.512s user 1m8.075s sys 0m0.842s
11.2 できるだけ多くのスレッドで圧縮する方法(-T0)
できるだけ多くのスレッドでファイルを圧縮してみます。
[root@server ~]# time xz -k -T0 test.dat
psコマンドでプロセスの状態を確認します。5つのスレッドが動作していることがわかります。
[root@server ~]# ps -LC xz -o comm,pid,ppid,psr,wchan COMMAND PID PPID PSR WCHAN xz 11010 1921 3 - xz 11010 1921 1 - xz 11010 1921 2 - xz 11010 1921 0 - xz 11010 1921 3 -
圧縮にかかった時間を確認すると、約22秒であることがわかります。-T2を指定した時にくらべ、14秒ほど早く圧縮が完了していることがわかります。
[root@server ~]# time xz -k -T0 test.dat real 0m22.431s user 1m18.245s sys 0m2.971s
12 圧縮ファイルの整合性をチェックする方法(-t)
-tは圧縮ファイルの整合性をチェックするオプションです。
ファイルの整合性をチェックします。以下の例では、エラー出力がないため、整合性に誤りが発生しなかったことを示しています。
[root@server ~]# xz -t test.dat.xz [root@server ~]#
Z 参考情報
私が業務や記事執筆で参考にした書籍を以下のページに記載します。
Linux技術のスキルアップをしよう! - hana_shinのLinux技術ブログ
【 xz 】コマンド/【 unxz 】コマンド――ファイルを圧縮/伸張する:Linux基本コマンドTips(249) - @IT