Linux 压缩解压相关命令介绍

前言

在 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,直接写:

bash 复制代码
tar -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

六、常用实战场景示例

  1. 备份日志目录,排除里面的tmp文件夹
bash 复制代码
tar -zcvf logbak.tar.gz logs/ --exclude=logs/tmp
  1. 打包多个不同目录/文件
bash 复制代码
tar -zcvf bak.tar.gz /etc/nginx /data/script
  1. 管道打包+远程传输(不落地生成本地压缩包)
bash 复制代码
tar -zcvf - /data | ssh 192.168.1.10 "tar -zxvf - -C /backup"

七、踩坑汇总(重点)

  1. tar -f 参数必须放最后,tar -fzcv 这种写法会报错!
  2. gzip 单独压缩文件会删掉原文件,tar 打包压缩保留原文件
  3. zip 压缩目录,不加 -r 只会打包目录本身,目录里面文件不会进去
  4. 解压前最好用 tar -tvf 看一下包结构,防止解压后一堆散文件污染当前目录
  5. 权限问题:解压出来文件默认保留打包时的权限、属主(root打包解压才会完整保留)
  6. 压缩大日志时,优先选 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、网络命令一起使用,就能完成服务器数据迁移与定时备份工作。

相关推荐
eleven_4u1 小时前
QPS如何计算,如何部署架构
java·linux·运维·jvm·中间件
云飞云共享云桌面1 小时前
非标自动化工厂研发部门怎么实现一台服务器带10个SolidWorks设计并发
运维·服务器·人工智能·3d·自动化·电脑·制造
分布式存储与RustFS1 小时前
你的网站备份只存一块盘?把 1Panel 的备份目标换成 RustFS
运维·开源·备份·对象存储·1panel·s3·rustfs
遇见小修修1 小时前
打印机无法连接故障:操作误区汇总与排查教程
运维·服务器
东城居士2 小时前
理解Linux RTC驱动
linux·嵌入式系统
Elastic 中国社区官方博客2 小时前
使用 OpenTelemetry 在 Elastic 中实现 Claude 平台的人工智能 agent 可观测性
大数据·运维·服务器·人工智能·elasticsearch·信息可视化·全文检索
hzxxxz2 小时前
3个模块搭稳一条自动化链路:定时任务、幂等与对账
运维·自动化
蘑菇小白2 小时前
Linux多线程开发
linux·开发语言·线程
Ruiery2 小时前
Linux 6.6内核内存管理深度解析(十):KSM 同页合并 — 内容去重,把 N 份相同内存合并成 1 份
linux·运维·服务器