前言
在 Linux 运维日常工作中,日志归档、项目打包、备份文件、传输文件,都会频繁用到压缩和解压命令。Linux 下压缩格式种类很多:tar、gzip、bzip2、xz、zip,很多新手容易搞混参数,分不清打包和压缩的区别。
这里先理清一个核心概念:tar 本身只是打包工具(把多个文件合并成一个包,不压缩),gzip/bzip2/xz 才是压缩算法,经常配合 tar 一起使用。本篇把常用格式、参数、实操命令、避坑点一次性整理清楚。
一、tar 打包 + 压缩(运维最常用)
tar 是使用频率最高的命令,支持打包同时调用不同压缩程序。
常用参数说明:
-c:创建新包(create)-x:解压、解包(extract)-f:指定包文件名,f 必须放在所有参数最后-v:显示过程(verbose,不想看日志可以去掉)-z:使用 gzip 压缩,后缀.tar.gz/.tgz-j:使用 bzip2 压缩,后缀.tar.bz2-J:使用 xz 压缩,后缀.tar.xz-C:解压到指定目录
1、gzip 格式 .tar.gz(平衡速度与压缩率,首选)
bash
# 打包压缩:把 test 目录打包成 test.tar.gz
tar -zcvf test.tar.gz test/
# 解压
tar -zxvf test.tar.gz
# 解压到 /opt 目录
tar -zxvf test.tar.gz -C /opt
2、bzip2 格式 .tar.bz2(压缩率比gzip高,速度慢一点)
bash
# 打包压缩
tar -jcvf test.tar.bz2 test/
# 解压
tar -jxvf test.tar.bz2
3、xz 格式 .tar.xz(压缩率最高,压缩最慢,适合归档备份)
bash
# 打包压缩
tar -Jcvf test.tar.xz test/
# 解压
tar -Jxvf test.tar.xz
小技巧:新版 tar 支持自动识别压缩格式,解压时可以省略 z/j/J,直接写:
bashtar -xvf test.tar.gz tar -xvf test.tar.xz
4、只打包不压缩(tar包,后缀 .tar)
只是把文件合并,体积几乎不变:
bash
tar -cvf test.tar test/
tar -xvf test.tar -C /tmp
二、zip / unzip (windows互通首选)
zip 格式优势:Windows、Mac、Linux 通用,跨平台传输很方便。
缺点:压缩率一般,大文件备份不如 tar+xz。
bash
# 安装(最小化系统默认不带)
# CentOS
yum install zip unzip
# Ubuntu
apt install zip unzip
# 压缩,压缩目录 -r 递归
zip -r test.zip test/
# 解压到当前目录
unzip test.zip
# 解压到指定目录 -d
unzip test.zip -d /opt
# 查看压缩包里面的文件列表,不解压
unzip -l test.zip
三、单独 gzip / gunzip、bzip2 / bunzip2
注意:单独 gzip 命令默认会删除原文件,只生成压缩后的文件,这点和tar不一样!
bash
# 压缩单个文件(不适合目录)
gzip test.log
# 解压
gunzip test.log.gz
# bzip2同理
bzip2 test.log
bunzip2 test.log.bz2
一般很少单独用,日常优先 tar 组合。
四、其他小众压缩格式
zstd(zstandard,现代高性能压缩,越来越多系统内置)
压缩和解压速度很快,压缩率优秀,很多新项目备份开始用:
bash
# 压缩
tar -I zstd -cvf test.tar.zst test/
# 解压
tar -I zstd -xvf test.tar.zst
7z 高压缩率(p7zip)
压缩率很强,需要安装 p7zip:
bash
# 压缩
7z a test.7z test/
# 解压
7z x test.7z
五、常用查看包内容(不解压)
线上环境不想解压,只想看里面有哪些文件:
bash
# tar.gz 查看列表
tar -ztvf test.tar.gz
# tar.bz2
tar -jtvf test.tar.bz2
# tar.xz
tar -Jtvf test.tar.xz
六、常用实战场景示例
- 备份日志目录,排除里面的tmp文件夹
bash
tar -zcvf logbak.tar.gz logs/ --exclude=logs/tmp
- 打包多个不同目录/文件
bash
tar -zcvf bak.tar.gz /etc/nginx /data/script
- 管道打包+远程传输(不落地生成本地压缩包)
bash
tar -zcvf - /data | ssh 192.168.1.10 "tar -zxvf - -C /backup"
七、踩坑汇总(重点)
tar -f参数必须放最后,tar -fzcv这种写法会报错!- gzip 单独压缩文件会删掉原文件,tar 打包压缩保留原文件
- zip 压缩目录,不加
-r只会打包目录本身,目录里面文件不会进去 - 解压前最好用
tar -tvf看一下包结构,防止解压后一堆散文件污染当前目录 - 权限问题:解压出来文件默认保留打包时的权限、属主(root打包解压才会完整保留)
- 压缩大日志时,优先选 tar.gz;长期冷备份、存储空间紧张,选 tar.xz;和Windows互传文件用zip
八、小结
.tar.gz:最通用,平衡速度和压缩率,生产首选,tar -zcvf / tar -zxvf.tar.bz2:压缩率更高、慢一点.tar.xz:压缩最强、最慢,适合冷备份归档.zip:跨Windows/Mac互通,zip / unzip- tar 核心:c创建、x解压、f指定文件、v看详情、-C指定解压目录
- 不解压查看包内容:tar -tvf
压缩命令是备份、迁移、日志清理的基础工具,配合前面 rsync、网络命令一起使用,就能完成服务器数据迁移与定时备份工作。