gzip,bzip2和xz命令

-- TOC --

本文总结Linux下几个常用的压缩解压命令工具,gzip,bzip2和xz。

gzip

Linux下最常用的压缩和解压工具,就是gzip。

压缩一个文件:

$ gzip <filename>  # filename变成filename.gz

压缩文件同时保留源文件:

$ gzip -k <filename>

解压:

$ gzip -d <filename.gz>
$ gunzip <filename.gz>  # filename.gz变成filename

解压文件同时保留原gz文件:

$ gzip -dk <filename.gz>
$ gunzip -k <filename.gz>

压缩时保留源文件,自定义压缩文件名:

$ gzip -c <filename> > <output.gz>

通过-c参数,gzip将输出导入stdout,然后再重定向到一个文件中。

gzip的压缩率从1到9。1压缩比最低,但速度最快;9压缩比(可能)最高,速度也最慢;gzip默认使用6。

选择gzip的压缩率:

$ gzip -8 <filename>  # --fast对应-1,--best对应-9

-l可以查看.gz压缩文件的信息:

$ gzip -l test.gz
         compressed        uncompressed  ratio uncompressed_name
               2614               16728  84.5% test

还有个-t参数,检查.gz文件的完整性,正确时没有任何输出。

专用于解压的工具,除了前面已经出现过的gunzip,还有个zcat命令:

$ zcat kk.txt.gz
123123123123
$ gunzip -c kk.txt.gz
$ gzip -dc kk.txt.gz

当命令行有多个文件的时候,相当于对多个文件使用gzip命令:

$ gzip kk tt
$ ls kk* tt*
kk.gz  tt.gz
$ gunzip kk.gz tt.gz 
$ ls kk* tt*
kk  tt

就是因为gzip只对单文件进行压缩,在压缩文件夹的时候,需要配合tar命令打包,因此我们常常简单.tar.gz为后缀的压缩文件包:

$ tar -c <folder> -f <folder.tar>
$ gzip --best folder.tar
$ tar -c abc | gzip --best -c > abc.tar.gz  # abc is a folder

bzip2

Compared with gzip, bzip2 creates smaller archives but has a slower decompression time and higher memory use. bzip2 compresses files using the Burrows-Wheeler block sorting text compression algorithm, and Huffman coding. The command-line options provided are deliberately very similar to those of GNU gzip, but they are not identical. bzip2 expects a list of file names along with the command-line flags. Each file is replaced by a compressed version of itself, with the name original_name.bz2. Each compressed file has the same modification date, permissions, and, when possible, ownership as the corresponding original, so that these properties can be correctly restored at decompression time.

bzip2的压缩率比gzip好,但解压也更慢,并使用更多内存。bzip2的命令行参数与gzip非常相似,这是故意的。

gzip 的 0.1 版本是在 1992 年发布的,而 bzip2 的 0.1 版本是在 1996 年发布的,可见 bzip2 的开发是要晚于 gzip 的。由于 bzip2 与 gzip 相比,其压缩效果都更好,所以 bzip2 一经推出,便受到了广大用户的欢迎。由此可见,这不能算是重复造轮子,bzip2 让世界变得更加小而美了。

$ bzip2 sample.txt
$ ls
sample.txt.bz2
$ bzip2 -k sample.txt
$ ls
sample.txt sample.txt.bz2
$ tar -cf music.tar 1.mp3 2.mp3 3.mp3
$ bzip2 music.tar
$ ls
1.mp3 2.mp3 3.mp3 music.tar.bz2

存在bunzip2命令,同样也有个bzcat命令。

xz

xz命令 XZ Utils 是为 POSIX 平台开发具有高压缩率的工具。它使用 LZMA2 压缩算法,生成的压缩文件比 POSIX 平台传统使用的 gzip 或 bzip2 生成的压缩文件更小,而且解压缩速度也很快(肯定没有gzip快吧)。最初 XZ Utils 的是基于 LZMA-SDK 开发,但是 LZMA-SDK 包含了一些 WINDOWS 平台的特性,所以 XZ Utils 为以适应 POSIX 平台作了大幅的修改。XZ Utils 的出现也是为了取代 POSIX 系统中旧的 LZMA Utils。

-z, --compress    # 强制压缩
-d, --decompress, --uncompress
                  # force decompression
-t, --test        # 测试压缩文件的完整性
-l, --list        # 列出有关.xz文件的信息
-k, --keep        # 保留(不要删除)输入文件
-f, --force       # 强制覆盖输出文件和(解)压缩链接
-c, --stdout, --to-stdout
                  # 写入标准输出,不要删除输入文件
-0 ... -9         # 压缩预设; 默认为6; 取压缩机*和*
                  # 使用7-9之前解压缩内存使用量考虑在内!
-e, --extreme     # 尝试通过使用更多的CPU时间来提高压缩比;
                  # 要求不影响解压缩存储器
-T, --threads=NUM # 最多使用NUM个线程; 默认值为1;  set to 0
                  # 设置为0,使用与处理器内核一样多的线程
-q, --quiet       # 抑制警告; 指定两次以抑制错误
-v, --verbose     # 冗长; 指定两次更详细
-h, --help        # 显示这个简洁的帮助并退出
-H, --long-help   # 显示更多帮助(还列出了高级选项)
-V, --version     # 显示版本号并退出

命令行参数与gzip也基本相同。

下面的命令行可以将 /var/log 目录下所有的扩展名为 .log 的文件压缩。通过xargs命令同时运行多个 xz 进程进行压缩,每个进程同时处理16个文件(对16个文件同时应用xz命令)。

$ sudo find /var/log -type f -iname "*.log" -print0 | \
> xargs -P4 -n16 xz

有个xzcat命令存在。

本文链接:https://cs.pynote.net/sf/linux/shell/202111281/

-- EOF --

-- MORE --