1 常见的压缩文件扩展名

*.Z 		compress 程序压缩的文件;
*.zip 		zip 程序压缩的文件;
*.gz 		gzip 程序压缩的文件;
*.bz2 		bzip2 程序压缩的文件;
*.xz 		xz 程序压缩的文件;
*.tar 		tar 程序打包的数据,并没有压缩过;
*.tar.gz 	tar 程序打包的文件,其中并且经过 gzip 的压缩
*.tar.bz2 	tar 程序打包的文件,其中并且经过 bzip2 的压缩
*.tar.xz 	tar 程序打包的文件,其中并且经过 xz 的压缩

Linux上常见的压缩指令就是compress、gzip、bzip2、xz,为了支持 windows 常见的 zip,Linux 也加入了 zip 指令。其中compress出现最早,现已不常用。gzip、bzip2、xz 按时间早晚先后出现,并且压缩比一个比一个高

起初,tar 仅提供单纯的“打包”功能,即将很多文件打包为一个文件。后来,GNU 将整个 tar 与压缩的功能结合在一起,如此一来提供使用者更方便并且更强大的压缩与打包功能!

2 gzip, zcat/zmore/zless/zgrep

gzip 可以说是应用度最广的压缩指令了!目前 gzip 可以解开 compress, zip 与 gzip 等软件所压缩的文件。gzip 所创建的压缩文件后缀名为 *.gz。

cat/more/less 可以使用不同的方式来读取纯文本文件,zcat/zmore/zless 则可以对应于 cat/more/less 的方式来读取纯文本文件被压缩后的压缩文件! 由于 gzip 这个压缩指令主要想 要用来取代 compress 的,所以不但 compress 的压缩文件可以使用 gzip 来解开,同时 zcat 这个指令可以同时读取 compress 与 gzip 的压缩文件呦!

用法:gzip [-cdtv#] 文件名

选项与参数:
-c :将压缩的数据输出到屏幕上,可通过数据流重导向来处理;
-d :解压缩的参数;
-t :可以用来检验一个压缩文件的一致性~看看文件有无错误;
-v :可以显示出原文件/压缩文件的压缩比等信息;
-# :# 为数字的意思,代表压缩等级,-1 最快,但是压缩比最差、-9 最慢,但是压缩比最好!默认是 -6
fy@fy-vm ~/Desktop> mkdir test
fy@fy-vm ~/Desktop> mv services sources.list test/
fy@fy-vm ~/Desktop> cd test/
fy@fy-vm ~/D/test> ls
services  sources.list

fy@fy-vm ~/D/test> # gzip压缩一个文件,默认不保留原文件
fy@fy-vm ~/D/test> gzip services 
fy@fy-vm ~/D/test> ls
services.gz  sources.list
fy@fy-vm ~/D/test> # gzip解压一个文件,默认不保留原文件
fy@fy-vm ~/D/test> gzip -d services.gz # gunzip services.gz
fy@fy-vm ~/D/test> ls
services  sources.list
fy@fy-vm ~/D/test> # gzip压缩一个文件,保留原文件
fy@fy-vm ~/D/test> gzip -c sources.list > sources.list.gz
fy@fy-vm ~/D/test> ls
services  sources.list  sources.list.gz
fy@fy-vm ~/D/test> # 同时压缩多个文件
fy@fy-vm ~/D/test> gzip -c services sources.list > ss.gz

fy@fy-vm ~/D/test> gzip -cv9 services > services.gz
services:	 59.1%
fy@fy-vm ~/D/test> ls
services  services.gz  sources.list
fy@fy-vm ~/D/test> gzip -v8 sources.list 
sources.list:	 69.7% -- replaced with sources.list.gz
fy@fy-vm ~/D/test> ls
services  services.gz  sources.list.gz

fy@fy-vm ~/D/test> # 查看压缩文件内容
fy@fy-vm ~/D/test> zcat sources.list.gz
# deb cdrom:[Ubuntu 20.04.2.0 LTS _Focal Fossa_ - Release amd64 (20210209.1)]/ focal main restricted

# See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to
# newer versions of the distribution.
deb http://mirrors.aliyun.com/ubuntu/ focal main restricted
...

3 bzip2, bzcat/bzmore/bzless/bzgrep

用法类似于 gzip

用法:bzip2 [-cdkzv#] 文件名

选项与参数:
-c :将压缩的过程产生的数据输出到屏幕上!
-d :解压缩的参数
-k :保留原始文件,而不会删除原始的文件喔!
-z :压缩的参数 (默认值,可以不加)
-v :可以显示出原文件/压缩文件的压缩比等信息;
-# :与 gzip 同样的,都是在计算压缩比的参数, -9 最佳, -1 最快!
fy@fy-vm ~/D/test> ls
services  sources.list

# 压缩
fy@fy-vm ~/D/test> bzip2 sources.list 
fy@fy-vm ~/D/test> bzip2 -cv services > services.bz2
  services:  2.572:1,  3.111 bits/byte, 61.12% saved, 14464 in, 5624 out.
  
fy@fy-vm ~/D/test> ls
services  services.bz2  sources.list.bz2

# 解压
fy@fy-vm ~/D/test> bzip2 -d sources.list.bz2 
fy@fy-vm ~/D/test> ls
services  services.bz2  sources.list

fy@fy-vm ~/D/test> bzcat sources.list.bz2 

4 xz, xzcat/xzmore/xzless/xzgrep

用法类似于 gzip

用法:xz [-dtlkc#] 文件名

选项与参数:
-d :就是解压缩啊!
-t :测试压缩文件的完整性,看有没有错误
-l :列出压缩文件的相关信息
-k :保留原本的文件不删除~
-c :同样的,就是将数据由屏幕上输出的意思!
-# :同样的,也有较佳的压缩比的意思!
fy@fy-vm ~/D/test> ls
services  sources.list

# 压缩文件
fy@fy-vm ~/D/test> xz sources.list 
fy@fy-vm ~/D/test> xz -k services 
fy@fy-vm ~/D/test> ls
services  services.xz  sources.list.xz

# 解压文件
fy@fy-vm ~/D/test> rm services.xz
fy@fy-vm ~/D/test> xz -d sources.list.xz 
fy@fy-vm ~/D/test> ls
services  sources.list

# 压缩文件
fy@fy-vm ~/D/test> xz -c services > sv.xz
fy@fy-vm ~/D/test> ls
services  sources.list.xz  sv.xz
fy@fy-vm ~/D/test> xz -l sv.xz 
流      块     压缩大小     解压大小   比例   校验    文件名
1       1     5,640 B     14.1 KiB  0.390  CRC64  sv.xz

# 解压文件
fy@fy-vm ~/D/test> du -h services sv.xz 
16K	services
8.0K	sv.xz
    
fy@fy-vm ~/D/test> xz -d sv.xz
fy@fy-vm ~/D/test> ls
services  sources.list.xz  sv

5 tar

在压缩文件的时候,往往需要压缩多个文件、文件夹或是多个文件夹。这时候 tar 就派上用场了,tar 可以将多个文件或文件夹打包成一个文件,然后再用相应的压缩工具对文件进行压缩。

用法:
打包并压缩文件:tar [-z or -j or -J] [-cv] [-f 待创建的新文件名] filename...
查看文件:     tar [-z or -j or -J] [-tv] [-f 已有的tar文件名]
解压文件:     tar [-z or -j or -J] [-xv] [-f 已有的tar文件名] [-C 要解压到的目标目录]

注:选项可连写,但由于“ -f filename ”是紧接在一起的,所以 -f 必须位于所有选项之后。
	可 tar -zcvf a.tar.gz a/,不可 tar -zcfv a.tar.gz a/ ...

选项与参数:
-c:创建打包文件,可搭配 -v 来察看过程中被打包的文件名(filename)
-t:察看打包文件的内容含有哪些文件名,重点在察看“文件名”就是了;
-x:解打包或解压缩的功能,可以搭配-C(大写)在特定目录解开
	特别留意的是,-c,-t,-x不可同时出现在一串命令行中。三选一
	
-z:通过gzip 的支持进行压缩/解压缩:此时文件名最好为*.tar.gz
-j:通过bzip2的支持进行压缩/解压缩:此时文件名最好为*.tar.bz2
-J:通过xz   的支持进行压缩/解压缩:此时文件名最好为*.tar.xz
	特别留意,-z,j,-J不可以同时出现在一串命令行中。三选一
	
-v:在压缩/解压缩的过程中,将正在处理的文件名显示出来!
-f filename:-f后面要立刻接要被处理的文件名!建议-f单独写一个选项啰!(比较不会忘记)。必选项
-C 目录:这个选项用在解压缩,若要在特定目录解压缩,可以使用这个选项。

-p(小写):保留备份数据的原本权限与属性,常用于备份(-c)重要的配置文件
-P(大写):保留绝对路径,亦即允许备份数据中含有根目录存在之意;
--exclude=FILE:在压缩的过程中,不要将FILE打包!
# 1 压缩文件
# 1.1 gzip 格式
tar zcvf filename.tar.gz dir1 dir2 ...
tar cf - dir1 dir2 ... | gzip > filename.tar.gz

# 1.2 bzip2 格式
tar jcvf filename.tar.bz2 dir1 dir2 ...
tar cf - dir1 dir2 ... | bzip2 > filename.tar.bz2

# 1.2 xz 格式
tar Jcvf filename.tar.xz dir1 dir2 ...
tar cf - dir1 dir2 ... | xz > filename.tar.xz

# 2 解压缩文件
# 2.1 gzip 格式
tar zxf filename.tar.gz
tar zxf filename.tar.gz -C /path/to/extract

# 2.2 bzip2 格式
tar jxf filename.tar.bz2
tar jxf filename.tar.bz2 -C /path/to/extract

# 2.2 xz 格式
tar Jxf filename.tar.xz
tar Jxf filename.tar.xz -C /path/to/extract

6 zip、rar、7z

linux zip命令

Linux 下解压 .zip 和 .rar 文件

1、zip

# 将文件夹 ~/Desktop/test 压缩为 ./test.zip
zip a -r test.zip ~/Desktop/test

# 解压 .zip 到指定文件夹,-d 参数。解压的同时创建目录 exa
sudo unzip exa-linux-x86_64-v0.10.1.zip -d /opt/exa

2、rar

# 将文件夹 ~/Desktop/test 压缩为 ./test.rar
rar a -r test.rar ~/Desktop/test
# 解压到当前目录
rar x test.rar
# 解压到指定目录 ~/Desktop/demo 中
rar x test.rar ~/Desktop/demo

3、7z

# 将文件夹 ~/Desktop/test 压缩为 ./test.7z
7z a -r test.7z ~/Desktop/test
7z a -r test.zip ~/Desktop/test

# -o后面不要加空格。将 ./test.7z 解压到文件夹 $HOME/Desktop/test1 中
7z x -o$HOME/Desktop/test1 test.7z
7z x -o$HOME/Desktop/test1 test.zip

7 多线程压缩

压缩工具并行压缩
gzippigz
bzip2pbzip2
xzxz -T

注:xz 本身支持并行压缩,但默认不启用,使用 -T 选项开启

tar cf - pycharm_setting/ | xz -T $(nproc) > pycharm_setting.tar.xz

下面以 pigz 为例说明用法:
1、安装

sudo apt install pigz
sudo yum install pigz

2、用法

pigz只能压缩单个文件,若要压缩文件夹,需结合 tar 命令

# -0 ~ -9, -11 	压缩等级,数字越大压缩率越高、压缩速度越慢。-11 设置最高压缩率,速度最慢
# -k 	压缩后不删除原文件
# -p 	压缩时使用的线程数,默认使用所有cpu核心
# -d 	解压缩

# 1、压缩文件夹
# tar -cf - dir1 dir2 ... dirn | pigz > file.tgz
tar -cf - pycharm_setting/ | pigz -9 -p $(nproc) -k > pycharm.tgz # tgz 等价于 tar.gz

# 2、解压缩文件夹
tar -zxf pycharm.tgz

# 3、压缩单个文件
pigz -k ideaIU-2020.1.2.exe

# 4、解压单个文件
pigz -d ideaIU-2020.1.2.exe.gz

参考书籍:鸟哥的linux私房菜

Logo

更多推荐