文件打包与压缩是Linux系统中非常核心、也是使用率极高的一项基础操作。
所谓打包,对应的核心命令就是tar,它并不会减少文件的大小,它的主要作用是将零散、碎片化的多个文件、目录,合并成一个单一的归档文件。
在服务器运维中,大量的日志文件、配置文件、项目源码都是分散存储的,如果直接传输、备份极易出现文件遗漏、丢失的问题,而打包操作就可以完美解决这个问题,实现批量文件的统一管理、统一迁移。
压缩对应gzip、bzip2、xz等命令,核心作用就是通过算法剔除文件冗余数据,大幅降低文件占用的磁盘空间。同时,文件体积变小之后,跨服务器传输、线上数据迁移的网络带宽消耗会大幅降低,传输速度显著提升,这也是大文件传输前必须压缩的原因。
一、打包命令
tar是 Linux系统中最核心、最常用的归档压缩命令,全称 tape archive(磁带归档)。最初用于磁带备份,如今主要实现文件和目录的打包归档,以及压缩和解压功能。
tar命令 默认只打包不压缩,结合 gzip、bzip2、xz 等工具才能实现压缩,tar命令是运维、开发、备份文件的必备命令。
tar 标准语法格式
tar [主参数] [辅助参数] -f 归档文件 源文件/目录
强制规则:-f 参数必须放在所有参数最后一位,后面紧跟归档文件名,否则命令失效!
主参数:指定核心动作(打包、解压、查看)三选一
辅助参数:指定压缩算法、权限、路径等附加功能
-f:固定参数,指定归档文件名称
主参数表
参数 | 作用 | 场景说明 |
c | 创建新的归档文件(打包) | 制作压缩包/归档包时使用 |
x | 解压、释放归档文件 | 解压所有 tar 格式文件 |
t | 查看归档文件内部内容 | 不解压,仅查看压缩包内文件列表 |
辅助参数表
参数 | 作用 |
v | 显示详细执行过程 |
p | 保留文件原有权限、属主、时间属性 |
C | 指定解压目录(大写C,核心常用,解压到指定路径) |
f | 指定归档文件名(所有参数最后一位,必填) |
exclude=文件/目录 | 打包时排除指定文件/目录 |
压缩算法参数表
参数 | 压缩工具 | 后缀名 | 特点 |
z | gzip | .tar.gz / .tgz | 压缩速度快、兼容性好 |
j | bzip2 | .tar.bz2 | 压缩率高于 gzip,速度稍慢,兼容性较好 |
J | xz | .tar.xz | 压缩率最高、体积最小,压缩速度最慢 |
打包命令应用案例
1.打包压缩
规则:c + 压缩参数 + vpf + 压缩包名 + 源文件
示例1:gzip 压缩(最常用)
# 将 /test 目录打包压缩为 test.tar.gztar zcvf test.tar.gz /test
示例2:bzip2 高压缩率打包
tar jcvf test.tar.bz2 /test
示例3:打包时排除指定文件
# 打包test目录,排除里面的log文件夹和txt文件tar zcvf test.tar.gz /test --exclude=/test/log --exclude=*.txt
2.解压文件
规则:解压时无需指定压缩算法,tar 会自动识别格式
示例1:解压到当前目录
示例2:解压到指定目录(-C 核心用法)
# 解压到 /home 目录,注意 -C 前面加空格tar zxvf test.tar.gz -C /home
示例3:解压 .tar.bz2 / .tar.xz 文件
# bz2解压tar jxvf test.tar.bz2# xz解压tar Jxvf test.tar.xz
使用 -C 解压时,目标目录必须提前存在,否则报错。
3.查看压缩包内容(不解压)
# 查看gz压缩包tar ztvf test.tar.gz# 查看bz2压缩包tar jtvf test.tar.bz2
4.仅解压压缩包中单个文件/目录
适用于大压缩包,只需提取部分文件的场景
# 只解压压缩包内的 test.txt 文件tar zxvf test.tar.gz test.txt# 只解压指定子目录tar zxvf test.tar.gz test/data/
5.权限保留场景
服务器系统备份、迁移文件时,必须加 -p 参数,否则文件权限、用户组会丢失,导致程序运行异常。
二、独立压缩解压命令
gzip、bzip2、xz 可独立使用,仅支持单个文件压缩,不支持文件夹,压缩后默认删除原文件,生成对应后缀压缩文件。
1.gzip / gunzip 命令
独立gzip仅能压缩单文件,无打包功能,参数简洁,压缩和解压缩速度快。
语法:
常用参数:-k 保留原文件(默认压缩后删除原文件)、-v 显示过程。
实操案例:
# 压缩文件(删除原文件,生成test.txt.gz)gzip test.txt# 压缩并保留原文件gzip -k test.txt# 解压文件gunzip test.txt.gzgzip -d test.txt.gz
2.bzip2 / bunzip2 命令
用法与gzip完全一致,仅压缩算法不同,压缩率更高,速度稍慢。
实操案例:
# 压缩并保留原文件bzip2 -k data.log# 解压bunzip2 data.log.bz2bzip2 -d data.log.bz2
3.xz / unxz 命令
单文件极致压缩,压缩率最高、体积最小,压缩速度最慢,
实操案例:
# 压缩保留原文件xz -k bigfile.sql# 解压unxz bigfile.sql.xzxz -d bigfile.sql.xz