目录
40. shell命令--gzip
功能说明
gzip 是一种广泛使用的压缩程序,它使用 Lempel-Ziv 编码(LZ77)和 Huffman 编码的组合来减小文件大小。gzip 主要用于 Unix 和类 Unix 系统(如 Linux)上压缩和解压缩文件。压缩后的文件通常以 .gz 作为文件扩展名。
gzip 是在 Linux 系统中经常使用的一个对文件进行压缩和解压缩的命令,既方便又好用。gzip 不仅可以用来压缩大的、较少使用的文件以节省磁盘空间,还可以和 tar 命令一起构成 Linux 操作系统中比较流行的压缩文件格式。据统计,gzip 命令对文本文件有60%~70%的压缩率。减少文件大小有两个明显的好处,一是可以减少存储空间,二是通过网络传输文件时,可以减少传输的时间。
语法格式
gzip [选项] 文件名
SYNOPSIS
gzip [ -acdfhlLnNrtvV19 ] [-S suffix] [ name ... ]
gunzip [ -acfhlLnNrtvV ] [-S suffix] [ name ... ]
zcat [ -fhLV ] [ name ... ]
选项说明
-a或--ascii 使用ASCII文字模式。
-c或--stdout或--to-stdout 把压缩后的文件输出到标准输出设备,不去更动原始文件。
-d或--decompress或----uncompress 解开压缩文件。
-f或--force 强行压缩文件。不理会文件名称或硬连接是否存在以及该文件是否为符号连接。
-h或--help 在线帮助。
-l或--list 列出压缩文件的相关信息。
-L或--license 显示版本与版权信息。
-n或--no-name 压缩文件时,不保存原来的文件名称及时间戳记。
-N或--name 压缩文件时,保存原来的文件名称及时间戳记。
-q或--quiet 不显示警告信息。
-r或--recursive 递归处理,将指定目录下的所有文件及子目录一并处理。
-S<压缩字尾字符串>或----suffix<压缩字尾字符串> 更改压缩字尾字符串。
-t或--test 测试压缩文件是否正确无误。
-v或--verbose 显示指令执行过程。
-V或--version 显示版本信息。
-<压缩效率><num> 压缩效率是一个介于1-9的数值,预设值为"6",指定愈大的数值,压缩效率就会愈高。
-num 用指定的数字num调整压缩的速度,-1或--fast表示最快压缩方法(低压缩比),-9或--best表示最慢压缩方法(高压缩比)。系统缺省值为6。
--best 此参数的效果和指定"-9"参数相同。
--fast 此参数的效果和指定"-1"参数相同。
实践操作
0. 环境准备
mkdir -p /test/gzip
cd /test/gzip
yes test |head -c 30M >30M_file1.txt
mkdir -p dir1/test{1..3}
1. 直接压缩文件
ls -lh
gzip 30M_file1.txt #会删除原始文件
ls -lh
2. 查看压缩文件相关信息
ls -lh
gzip -l 30M_file1.txt
3. 解压缩文件
ls -lh
cp 30M_file1.txt.gz{,.bak}
gzip -d 30M_file1.txt.gz #会删除压缩文件
ls -lh
mv 30M_file1.txt.gz.bak 30M_file1.txt.gz
rm -rf 30M_file1.txt
ls -lh
gunzip 30M_file1.txt.gz #也可以解压,也会删除压缩文件
ls -lh
4. 保留原始文件并压缩
ls -lh
gzip -c 30M_file1.txt #把压缩后的文件输出到标准输出设备
gzip -c 30M_file1.txt >30M_file1.txt.gz #重定向到文件中
ls -lh
5. 查看压缩文件内的内容
gzip -dc 30M_file1.txt.gz | less
zcat 30M_file1.txt.gz | wc -l #使用zcat也可以查看
6. 使用 tar 与 gzip 结合压缩目录
#当需要压缩整个目录时,gzip 本身并不支持直接压缩目录。但可以通过与 tar 命令结合来实现这一功能。
# tar 命令可以将多个文件和目录打包成一个文件,然后再使用 gzip 进行压缩
ls
tar cf - dir1/ |gzip > dir1-1.tar.gz #这种方法比较麻烦
ll
tar tf dir1-1.tar.gz
tar zcf dir1-2.tar.gz dir1 #直接使用 tar -z 参数调用 gizp 程序压缩文件
tar tf dir1-2.tar.gz
7. 其它拓展
7.1 使用 pigz 提高压缩速度
#对于需要处理大量数据或希望加快压缩速度的场景,pigz 是一个很好的选择。
# pigz 是 gzip 的并行版本,能够利用多核 CPU 的优势来加速压缩和解压缩过程。
ls
mv * dir1
yum provides pigz
yum install -y pigz
yes test |head -c 2G >2G_file.txt
ls -lh
ulimit -u #查看当前用户可以开启的最大线程数
pigz -p 4 2G_file.txt
ls -lh
#这里,-p 4 选项告诉 pigz 使用 4 个线程来压缩 myfile.txt。
#通过调整线程数,可以根据系统的 CPU 核心数来优化性能。
7.2 使用 xz 替代 gzip 以获得更高压缩率
#尽管 gzip 提供了不错的压缩率和速度,但如果你需要更高的压缩率,xz 是一个更好的选择。
#xz 使用 LZMA 算法,通常能提供比 gzip 更高的压缩率,但相应地,压缩和解压缩的速度会慢一些。
ls -lh
gzip -d 2G_file.txt.gz
ls -lh
xz 2G_file.txt #压缩
ls -lh
unxz 2G_file.txt.xz #解压,也可以使用xz -d
ls -lh
rm -rf 2G_file.txt