gzip(GNU zip)是Linux/Unix系统中最常用的文件压缩工具之一,采用DEFLATE压缩算法,将单个文件压缩为.gz格式。与tar配合使用时,gzip是创建.tar.gz或.tgz归档包的压缩层。gzip以较高的压缩速度和合理的压缩率著称,尤其适合文本文件、日志文件等场景。
gzip通常与gunzip(解压)和zcat(查看压缩内容)配套使用。与zip不同,gzip设计为压缩单个文件而非目录,因此压缩目录时需要结合tar使用。掌握gzip对于日志管理、备份操作、文件传输等场景至关重要。
1. 基本语法
| 命令 | 说明 |
|---|
gzip file.txt | |
gzip -k file.txt | |
gzip -d file.gz | |
gunzip file.gz | |
zcat file.gz | |
2. 压缩级别
gzip支持1-9级压缩,默认为6级。
| 命令 | 说明 |
|---|
gzip -1 file.txt | |
gzip -6 file.txt | |
gzip -9 file.txt | |
gzip -k -9 file.txt | |
gzip -v -9 file.txt | |
3. 多文件压缩
| 命令 | 说明 |
|---|
gzip *.log | |
gzip -r logs/ | |
find . -name '*.txt' -print0 | xargs -0 gzip | |
for f in *.csv; do gzip -k "$f"; done | |
gzip -- *.txt | |
gzip -r --exclude='*.gz' logs/ | |
4. 解压与查看
| 命令 | 说明 |
|---|
gunzip archive.gz | |
gzip -dk archive.gz | |
gzip -l archive.gz | |
gzip -v file.txt | |
gzip -t archive.gz | |
zcat archive.gz | less | |
zcat archive.gz | head -20 | |
5. 流式处理与管道
gzip可以无缝集成到管道中,无需中间文件。
| 命令 | 说明 |
|---|
mysqldump mydb | gzip > mydb.sql.gz | |
gzip -c file.txt > file.txt.gz | |
gunzip -c backup.sql.gz > backup.sql | |
tar -cf - project/ | gzip > project.tar.gz | |
gzip -dc access.log.gz | grep "ERROR" | |
cat file.txt | gzip -9 > file.txt.gz | |
6. 与其他工具配合
| 命令 | 说明 |
|---|
zcat file.gz | wc -l | |
zgrep "pattern" file.gz | |
zdiff file1.gz file2.gz | |
zless file.gz | |
znew old.Z | |
gzip -c file.txt | ssh user@host "cat > file.txt.gz" | |
7. 实用组合模式
| 命令 | 说明 |
|---|
gzip -9 -k access.log && mv access.log.gz logs/archive/ | |
find /var/log -name "*.log" -mtime +30 -exec gzip {} \; | |
zcat archive.gz | wc -l > line_count.txt | |
tar -czf backup.tar.gz --exclude="*.gz" /home/user | |
gzip -dc *.gz | grep "ERROR" | sort | uniq -c | |
dd if=/dev/sda | gzip -c > sda.img.gz | |
8. 常用选项速查
| 选项 | 完整名称 | 说明 |
|---|
-1 到 -9 | | |
-k | | |
-d | | |
-c | | |
-v | | |
-l | | |
-t | | |
-r | | |
-f | | |
-q | | |
9. 文件扩展名与关联命令
| 扩展名 | 创建命令 | 查看/解压命令 |
|---|
.gz | gzip file | gunzip file.gz |
.tar.gz | tar -czf archive.tar.gz dir/ | tar -xzf archive.tar.gz |
.Z | compress file | uncompress file.Z |
.bz2 | bzip2 file | bunzip2 file.bz2 |
.xz | xz file | unxz file.xz |
10. 压缩工具对比
11. 故障排查
| 问题 | 解决方法 |
|---|
| gzip: command not found | 安装gzip包:apt install gzip 或 yum install gzip |
| 原文件压缩后消失 | |
| not in gzip format | 先确认文件类型:file filename;文件可能已损坏或是其他格式 |
| corrupt archive errors | 测试完整性:gzip -t file.gz;从备份恢复 |
| 解压时意外覆盖文件 | |
| 压缩后体积反而增大 | 文件可能已压缩(如jpeg、mp4),或使用-1快速压缩 |
| 递归压缩目录混乱 | 使用find配合-print0和xargs -0处理特殊文件名 |
温馨提示: gzip默认会删除原文件,如需要保留请使用-k选项。压缩文本文件(日志、SQL、代码)效果最好,多媒体文件已压缩,再用gzip效果不明显。在脚本中使用gzip时,建议先测试文件是否存在、是否已压缩,避免重复压缩。对于需要长期归档的数据,推荐使用xz获得更高压缩率;对于需要快速压缩的场景,gzip的-1级别非常高效。日志轮转时,gzip是压缩旧日志的标准选择。
关注公众号(haopython),请回复: LLTGZIP