Linux压缩解压详解
一、tar命令
tar 本身只打包不压缩,但通过与压缩工具配合,可生成 .tar.gz 、 .tar.bz2 、 .tar.xz 等格式
| 选项 | 含义 |
|---|---|
| -c | 创建打包文件 |
| -C | 指定解压目录,打包位置。 |
| -x | 解压 / 解包,从归档文件中提取文件 |
| -z | 用 gzip 压缩 / 解压(.tar.gz) |
| -j | 用 bzip2 压缩 / 解压(.tar.bz2) |
| -J | 用 xz 压缩 / 解压(.tar.xz) |
| -f | 指定要解压的 tar 包的包名(必须放最后)。 |
| -t | 只查看 tar 包中有哪些文件或目录,不对 tar 包做解打包操作。 |
| -v | 显示解打包的具体过程。 |
| -r | 递归压缩目录 |
| --exclude | 排除指定文件/目录 |
常用操作
# 仅打包(不压缩)
tar -cvf data.tar file1 file2 dir/
# 查看归档内容
tar -tvf data.tar
# 解包到当前目录
tar -xvf data.tar
# 打包并 gzip 压缩(最常用)
tar -zcvf backup.tar.gz /path/to/dir/
# 解压 .tar.gz
tar -zxvf backup.tar.gz
# 解压到指定目录
tar -zxvf backup.tar.gz -C /tmp/extract/
# 打包并 bzip2 压缩(压缩率更高,速度更慢)
tar -jcvf backup.tar.bz2 /path/to/dir/
# 打包并 xz 压缩(压缩率最高,速度最慢)
tar -Jcvf backup.tar.xz /path/to/dir/
# 排除特定文件
tar -zcvf backup.tar.gz data/ --exclude="*.tmp" --exclude="*.log"
# 增量备份:在已有归档上追加新文件。
tar -rvf data.tar new_file.txt
二、zip/unzip命令
安装unzip
# Debian/Ubuntu
apt install zip unzip
# CentOS/RHEL
dnf install zip unzip
zip 命令常用选项及含义
| 选项 | 含义 |
|---|---|
| -r | 递归压缩目录,及将制定目录下的所有文件以及子目录全部压缩。 |
| -m | 将文件压缩之后,删除原始文件,相当于把文件移到压缩文件中。 |
| -d | 删除包内文件 |
| -q | 在压缩的时候不显示命令的执行过程。 |
| -压缩级别 | 压缩级别是从 1~9 的数字,-1 代表压缩速度更快,-9 代表压缩效果更好。 |
| -u | 更新压缩文件,即往压缩文件中添加新文件。 |
| -e | 加密压缩(交互密码) |
| -v | 显示详细的压缩过程信息。 |
| -s 100m | 分卷压缩(100MB / 卷) |
ZIP压缩常用操作
# 压缩单个文件
zip file.zip file.txt file2.txt
# 递归压缩整个目录
zip -r archive.zip ./my_folder
# 压缩并设置密码 (交互式输入,更安全)
zip -e secure.zip secret_folder
# 分卷压缩(每个分卷50MB)
zip -s 50m split.zip large_file.iso
# 排除 .tmp 文件
zip -r project.zip ./src -x "*.tmp"
unzip 命令常用选项及含义
| 选项 | 含义 |
|---|---|
| -l | 查看包内容 |
| -d 目录名 | 将压缩文件解压到指定目录下。 |
| -n | 解压时并不覆盖已经存在的文件。 |
| -o | 解压时覆盖已经存在的文件,并且无需用户确认。 |
| -q | 静默解压 |
| -t | 测试压缩文件有无损坏,但并不解压,校验压缩包。 |
| -x 文件列表 | 解压文件,但不包含文件列表中指定的文件。 |
| -v | 查看压缩文件的详细信息 |
unzip解压常用操作
# 解压到当前目录
unzip archive.zip
# 解压到指定目录
unzip archive.zip -d /path/to/target_dir
# 查看压缩包内容 (不解压)
unzip -l archive.zip
# 解压带密码的文件 (交互式输入)
unzip secure.zip
# 强制覆盖解压
unzip -o secure.zip
# 排除 log 目录解压
unzip secure.zip -x "*/log/*"
解决中文乱码 由 Windows 创建的 zip 文件在 Linux 解压时可能出现中文乱码,可以尝试指定编码:
unzip -O GBK chinese_file.zip
三、gzip/gunzip命令
单独压缩文件(非打包)
gzip/gunzip命令常用选项及含义
| 选项 | 含义 |
|---|---|
| -c | 输出到标准输出,不删原文件 |
| -压缩级别 | 压缩级别是从 1~9 的数字,-1 代表压缩速度更快,-9 代表压缩效果更好。 |
| -d | 解压 |
| -f | 强制压缩 / 解压,覆盖已有文件,不提示 |
| -n | 压缩时不保存原文件名、时间戳 |
| -N | 解压时恢复原文件名、时间戳 |
| -l | 查看 gz 包内部信息 |
| -t | 检测压缩包是否损坏,校验压缩包 |
| -q | 静默模式,不输出错误信息 |
| -r | 递归处理目录下所有文件(只压缩文件,不打包目录) |
| -v | 详细输出 |
常用操作
# 压缩,删除原文件
gzip 文件名
# 保留原文件
gzip -c 文件名 > 文件名.gz
# 最高压缩率(1-9,默认6)
gzip -9 文件名
#解压
gunzip 文件名.gz
gzip -d 文件名.gz
四、bzip2/bunzip2命令
bzip2/bunzip2(.bz2 高压缩率)
bzip2/bunzip2命令常用选项及含义
| 选项 | 含义 |
|---|---|
| -压缩级别 | 压缩级别是从 1~9 的数字,-1 代表压缩速度更快,-9 代表压缩效果更好。 |
| -d | 解压,等同于 bunzip2 |
| -z | 强制压缩(默认就是压缩,可省略) |
| -k | 解压后保留原 .bz2 压缩包 |
| -f | 强制覆盖解压出来的文件 |
| -q | 静默解压 |
| -s | 低内存模式解压,占用更少内存,适合低配机器 |
| -c | 解压内容输出到标标准输出,不生成文件,可重定向 |
| -v | 显示详细解压信息 |
| -t | 检测压缩包是否损坏,校验压缩包 |
常用操作
# 压缩,删除原文件
bzip2 文件名
# 保留原文件
bzip2 -k 文件名
#解压
bunzip2 文件名.bz2
bzip2 -d 文件名.bz2
# 强制覆盖解压
bunzip2 -f file.bz2
# 解压输出重定向
bunzip2 -c file.bz2 > newfile
五、xz/unxz命令
xz/unxz(.xz 压缩率最高,速度最慢)
xz/unxz命令常用选项及含义
| 参数 | 作用 |
|---|---|
| -1 ~ -9 | 压缩级别:-1 最快压缩率最低,-9 最高压缩率最慢,默认 - 6 |
| -d | 解压,等价 unxz |
| -z | 强制压缩(默认启用,可省略) |
| -k | 保留原文件,压缩 / 解压都不删除源文件 |
| -f | 强制覆盖已有文件,不交互询问 |
| -t | 检测 .xz 压缩包完整性,不解压 |
| -v | 显示详细过程、压缩率、大小 |
| -q | 静默模式,只报错,不输出正常日志 |
| -c | 标准输出,不生成文件,可重定向 > 新文件 |
| -l | 查看压缩包信息(压缩前后大小、比率) |
| -T N | 指定线程数,多线程压缩(如 -T 4 4 线程) |
| -e | 极致压缩模式,进一步提高压缩率(更慢) |
常用操作
# 压缩,删除原文件
xz 文件名
# 保留原文件
xz -k 文件名
# 最高压缩率,保留原文件
xz -9k 文件名
# 极致压缩+保留原文件
xz -ek 文件名
# 4线程最高压缩,保留原文件
xz -9k -T 4 bigfile
# 普通解压,删 .xz
unxz 文件名.xz
xz -d 文件名.xz
# 解压保留原压缩包
unxz -k file.xz
xz -dk file.xz
# 压缩并重命名保存
xz -c file > file2.xz