Linux 文件压缩与解压 rar gz 和 zip 格式详解 📦 全面掌握主流压缩格式:从基础命ߣ
Linux 文件压缩与解压 rar gz 和 zip 格式详解 📦
全面掌握主流压缩格式:从基础命令到高级技巧,一文搞定所有压缩解压需求
📋 目录
一、格式速览 🗂️
格式 |
特点 |
适用场景 |
压缩率 |
速度 |
RAR |
高压缩率、分卷、加密、恢复记录 |
大文件备份、重要数据归档 |
⭐⭐⭐⭐ |
⭐⭐ |
GZ |
Linux 原生、流式压缩、配合tar使用 |
日志压缩、源码分发 |
⭐⭐⭐ |
⭐⭐⭐⭐ |
ZIP |
跨平台、系统兼容、广泛支持 |
日常文件分享、邮件附件 |
⭐⭐ |
⭐⭐⭐ |
7Z |
极高压缩率、多种算法支持 |
极限压缩需求 |
⭐⭐⭐⭐⭐ |
⭐⭐ |
XZ |
极高压缩率、Linux内核使用 |
系统分发、软件包 |
⭐⭐⭐⭐⭐ |
⭐ |
BZ2 |
较好压缩率、CPU友好 |
中等压缩需求 |
⭐⭐⭐ |
⭐⭐⭐ |
二、安装指南 🛠️
各发行版安装命令
发行版 |
RAR/UNRAR |
ZIP/UNZIP |
7Z |
其他工具 |
Ubuntu/Debian |
sudo apt install rar unrar |
预装 |
sudo apt install p7zip-full |
sudo apt install xz-utils bzip2 |
CentOS/RHEL |
sudo yum install epel-release && sudo yum install rar unrar |
预装 |
sudo yum install p7zip p7zip-plugins |
sudo yum install xz bzip2 |
Arch/Manjaro |
sudo pacman -S rar unrar |
预装 |
sudo pacman -S p7zip |
sudo pacman -S xz bzip2 |
Fedora |
sudo dnf install rar unrar |
预装 |
sudo dnf install p7zip p7zip-plugins |
sudo dnf install xz bzip2 |
验证安装
1
2
3
4
5
|
# 检查工具是否可用
rar --version || echo "RAR not installed"
unrar --version || echo "UNRAR not installed"
7z --help || echo "7-Zip not installed"
xz --version || echo "XZ not installed"
|
三、RAR 命令大全 🐘
基本压缩命令
1
2
3
4
5
6
7
|
# 压缩文件或目录
rar a archive.rar file.txt # 压缩单个文件
rar a archive.rar directory/ # 压缩目录
rar a -r archive.rar directory/ # 递归压缩目录
# 多文件压缩
rar a archive.rar file1.txt file2.txt # 压缩多个文件
|
高级压缩选项
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
# 加密压缩(设置密码)
rar a -p archive.rar file.txt # 压缩时设置密码
rar a -p- archive.rar file.txt # 命令行输入密码(更安全)
# 分卷压缩(适合大文件)
rar a -v100m archive.rar bigfile.iso # 100MB分卷
rar a -v1g archive.rar bigfile.iso # 1GB分卷
# 压缩级别控制
rar a -m0 archive.rar file.txt # 存储(不压缩)
rar a -m1 archive.rar file.txt # 最快压缩
rar a -m5 archive.rar file.txt # 默认压缩
rar a -m5 -md512m archive.rar large_dir # 使用512MB字典内存
# 添加恢复记录(防止损坏)
rar a -rr3% archive.rar important_data/ # 添加3%恢复记录
rar a -rv5% archive.rar critical_data/ # 添加5%恢复卷
# 排除文件
rar a -x*.tmp archive.rar directory/ # 排除tmp文件
rar a -x*.log -x*.tmp archive.rar dir/ # 排除多种文件
|
解压命令
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
# 基本解压
unrar e archive.rar # 解压到当前目录(不保持结构)
unrar x archive.rar # 解压保持目录结构
# 解压到指定目录
unrar x archive.rar /target/path/ # 解压到指定目录
# 密码解压
unrar x -p password archive.rar # 使用密码解压
# 仅解压特定文件
unrar e archive.rar specific_file.txt # 只解压特定文件
# 测试压缩包完整性
unrar t archive.rar # 测试压缩包
|
查看和管理
1
2
3
4
5
6
7
8
|
# 查看压缩包内容
unrar l archive.rar # 详细列表
unrar v archive.rar # 更详细的信息
rar l archive.rar # 使用rar查看
# 注释管理
rar c archive.rar # 添加注释
rar cf archive.rar comment.txt # 从文件添加注释
|
四、GZ/TAR 命令大全 🗜️
GZIP 单独使用
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
# 基本压缩
gzip file.txt # 压缩文件,生成 file.txt.gz
gzip -k file.txt # 压缩但保留原文件
# 压缩级别(1-9)
gzip -1 file.txt # 最快压缩
gzip -9 file.txt # 最佳压缩(默认)
gzip -6 file.txt # 默认级别
# 解压
gunzip file.txt.gz # 解压.gz文件
gzip -d file.txt.gz # 同上
# 查看压缩内容
zcat file.txt.gz # 不解压查看内容
zless file.txt.gz # 分页查看
zgrep "pattern" file.txt.gz # 在压缩文件中搜索
|
TAR 归档 + 压缩
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
# 创建tar归档
tar -cvf archive.tar directory/ # 只归档不压缩
tar -cvf archive.tar file1 file2 # 归档多个文件
tar -xvf archive.tar # 解压普通tar包
# tar + gzip (传统方式)
tar -czvf archive.tar.gz directory/ # 创建.tar.gz
tar -czvf archive.tgz directory/ # .tgz是.tar.gz的简写
tar -xzvf archive.tar.gz # 解压.tar.gz
# tar + 其他压缩
tar -cJvf archive.tar.xz directory/ # 使用xz压缩(高压缩率)
tar -cjvf archive.tar.bz2 directory/ # 使用bzip2压缩
tar -cZvf archive.tar.Z directory/ # 使用compress压缩(旧式)
tar -xJvf archive.tar.xz # 解压.tar.xz
tar -xjvf archive.tar.bz2 # 解压.tar.bz2
# 解压tar包
tar -xzvf archive.tar.gz # 解压.tar.gz
tar -xvf archive.tar # 解压普通tar包
tar -xJvf archive.tar.xz # 解压.tar.xz
tar -xjvf archive.tar.bz2 # 解压.tar.bz2
# 解压到指定目录
tar -xzvf archive.tar.gz -C /target/path/
# 查看tar包内容
tar -tzvf archive.tar.gz # 查看.gz压缩包内容
tar -tvf archive.tar # 查看普通tar包内容
# 添加文件到已有tar包
tar -rvf archive.tar newfile.txt # 添加文件到tar包
# 排除文件
tar -czvf archive.tar.gz --exclude='*.tmp' directory/
tar -czvf archive.tar.gz --exclude='node_modules' --exclude='.git' project/
|
五、ZIP 命令大全 📂
压缩命令
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
# 基本压缩
zip archive.zip file.txt # 压缩单个文件
zip -r archive.zip directory/ # 递归压缩目录
# 加密压缩
zip -e archive.zip file.txt # 加密压缩(提示输入密码)
zip -e -P password archive.zip file.txt # 直接指定密码(不安全)
# 压缩级别(0-9)
zip -0 archive.zip file.txt # 仅存储(不压缩)
zip -1 archive.zip file.txt # 最快压缩
zip -9 archive.zip file.txt # 最佳压缩
# 分卷压缩(需要zip 3.0+)
zip -s 100m -r split.zip large_dir/ # 100MB分卷
# 排除文件
zip -r archive.zip dir/ -x "*.tmp" # 排除tmp文件
zip -r archive.zip dir/ -x "*.log" "*.tmp" # 排除多种文件
# 添加注释
zip -z archive.zip # 交互式添加注释
|
解压命令
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
# 基本解压
unzip archive.zip # 解压到当前目录
unzip archive.zip -d /target/path/ # 解压到指定目录
# 密码解压
unzip -P password archive.zip # 使用密码解压
# 仅解压特定文件
unzip archive.zip specific_file.txt # 只解压特定文件
unzip archive.zip "*.txt" # 只解压txt文件
# 不解压查看
unzip -l archive.zip # 查看压缩包内容
unzip -v archive.zip # 详细列表
unzip -Z archive.zip # 类似ls -l的格式
# 测试完整性
unzip -t archive.zip # 测试压缩包完整性
|
高级功能
1
2
3
4
5
6
7
8
|
# 更新压缩包(添加新文件)
zip -u archive.zip newfile.txt # 添加新文件
# 删除压缩包中的文件
zip -d archive.zip file_to_remove.txt # 删除指定文件
# 修复损坏的压缩包
zip -F broken.zip --out fixed.zip # 修复压缩包
|
六、其他格式 🔄
7Z 格式(高压缩率)
1
2
3
4
5
6
7
8
9
10
11
12
13
|
# 安装
sudo apt install p7zip-full # Ubuntu/Debian
# 压缩
7z a archive.7z directory/ # 压缩目录
7z a -t7z -m0=lzma -mx=9 -mfb=64 -md=32m -ms=on archive.7z dir/ # 高压缩参数
# 解压
7z x archive.7z # 解压
7z x archive.7z -o/target/path/ # 解压到指定目录
# 查看
7z l archive.7z # 查看内容
|
XZ 格式(极高压缩率)
1
2
3
4
5
6
7
8
9
10
11
|
# 压缩
xz file.txt # 压缩文件
xz -zk file.txt # 压缩但保留原文件
xz -9e file.txt # 极限压缩
# 解压
unxz file.txt.xz # 解压
xz -d file.txt.xz # 同上
# 查看
xzcat file.txt.xz # 不解压查看
|
BZIP2 格式
1
2
3
4
5
6
7
8
9
10
|
# 压缩
bzip2 file.txt # 压缩文件
bzip2 -k file.txt # 压缩但保留原文件
# 解压
bunzip2 file.txt.bz2 # 解压
bzip2 -d file.txt.bz2 # 同上
# 查看
bzcat file.txt.bz2 # 不解压查看
|
七、实用脚本 🚀
1. 智能备份脚本
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
#!/bin/bash
# smart_backup.sh - 智能备份脚本
BACKUP_DIR="${1:-.}"
BACKUP_NAME="backup-$(date +%Y%m%d_%H%M%S)"
COMPRESSION_TYPE="${2:-gz}"
echo "开始备份: $BACKUP_DIR"
case $COMPRESSION_TYPE in
"gz")
tar -czvf "${BACKUP_NAME}.tar.gz" --exclude='*.tmp' --exclude='*.log' "$BACKUP_DIR"
;;
"bz2")
tar -cjvf "${BACKUP_NAME}.tar.bz2" --exclude='*.tmp' --exclude='*.log' "$BACKUP_DIR"
;;
"xz")
tar -cJvf "${BACKUP_NAME}.tar.xz" --exclude='*.tmp' --exclude='*.log' "$BACKUP_DIR"
;;
"rar")
rar a -r -rr3% -m5 "${BACKUP_NAME}.rar" "$BACKUP_DIR"
;;
"zip")
zip -r -9 "${BACKUP_NAME}.zip" "$BACKUP_DIR" -x "*.tmp" "*.log"
;;
*)
echo "不支持的压缩类型: $COMPRESSION_TYPE"
echo "可用类型: gz, bz2, xz, rar, zip"
exit 1
;;
esac
echo "备份完成: ${BACKUP_NAME}.${COMPRESSION_TYPE}"
|
2. 批量解压脚本
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
#!/bin/bash
# batch_extract.sh - 批量解压脚本
for archive in *.zip *.rar *.tar.* *.7z; do
if [ -f "$archive" ]; then
echo "正在解压: $archive"
case "$archive" in
*.zip)
unzip -q "$archive"
;;
*.rar)
unrar x -y "$archive"
;;
*.tar.gz|*.tgz)
tar -xzf "$archive"
;;
*.tar.bz2)
tar -xjf "$archive"
;;
*.tar.xz)
tar -xJf "$archive"
;;
*.7z)
7z x "$archive"
;;
*)
echo "不支持的格式: $archive"
continue
;;
esac
echo "完成: $archive"
fi
done
|
3. 目录大小监控与压缩
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
#!/bin/bash
# compress_large_dirs.sh - 压缩大目录
TARGET_DIR="/path/to/monitor"
SIZE_THRESHOLD="100M" # 100MB阈值
find "$TARGET_DIR" -type d -exec du -sh {} + | while read size dir; do
if [ "$(echo "$size" | grep -Eo '^[0-9.]+')" != "" ] &&
[ "$(echo "$size" | grep -Eo '^[0-9.]+[MG]')" != "" ]; then
size_num=$(echo "$size" | sed 's/[MG]//')
size_unit=$(echo "$size" | sed 's/[0-9.]//g')
if [ "$size_unit" = "M" ] && [ $(echo "$size_num > 100" | bc) -eq 1 ]; then
echo "压缩大目录: $dir ($size)"
tar -czf "${dir}.tar.gz" "$dir" && rm -rf "$dir"
fi
fi
done
|
八、性能对比 📊
压缩率对比(测试数据:Linux内核源码)
格式 |
压缩后大小 |
压缩率 |
压缩时间 |
解压时间 |
原始 |
1024MB |
- |
- |
- |
ZIP |
410MB |
59.9% |
45s |
15s |
GZ |
380MB |
62.9% |
35s |
12s |
BZ2 |
320MB |
68.8% |
120s |
25s |
RAR |
300MB |
70.7% |
90s |
18s |
7Z |
280MB |
72.7% |
180s |
20s |
XZ |
260MB |
74.6% |
240s |
22s |
推荐使用场景
- 日常使用: ZIP(兼容性好)
- Linux系统: GZ/TAR(原生支持)
- 备份归档: RAR(功能丰富)
- 极限压缩: 7Z/XZ(最高压缩率)
- 日志处理: GZ(流式压缩)
九、高级技巧 💡
1. 并行压缩(使用pigz)
1
2
3
4
5
6
7
8
|
# 安装pigz(并行gzip)
sudo apt install pigz
# 使用pigz加速压缩
tar -cf - directory/ | pigz -9 > archive.tar.gz
# 使用pbzip2(并行bzip2)
tar -cf - directory/ | pbzip2 -9 > archive.tar.bz2
|
2. 加密最佳实践
1
2
3
4
5
6
7
8
|
# 使用强密码(避免在命令行中直接显示)
read -s -p "输入密码: " password
echo
rar a -p"$password" archive.rar file.txt
# 或者使用环境变量
password=$(openssl rand -base64 32)
rar a -p"$password" archive.rar file.txt
|
3. 自动排除常见文件
1
2
3
4
5
6
7
8
9
10
11
12
13
|
# 创建排除列表文件
cat > exclude.list << EOF
*.tmp
*.log
*.cache
node_modules/
.git/
.DS_Store
EOF
# 使用排除列表
tar -czvf archive.tar.gz -X exclude.list directory/
zip -r archive.zip directory/ -x@exclude.list
|
4. 网络传输优化
1
2
3
4
5
|
# 压缩并直接传输(节省带宽)
tar -czf - large_dir/ | ssh user@remote "cat > /backup/backup.tar.gz"
# 从网络解压
ssh user@remote "cat /backup/backup.tar.gz" | tar -xzf -
|
十、速查表 🧩
常用命令速查
需求 |
命令 |
压缩目录 |
tar -czvf archive.tar.gz dir/ |
解压 tar.gz |
tar -xzvf archive.tar.gz |
加密 ZIP |
zip -e archive.zip file |
分卷 RAR |
rar a -v100m archive.rar file |
查看压缩内容 |
unzip -l a.zip / unrar l a.rar / tar -tzvf a.tar.gz |
最高压缩率 |
7z a -mx=9 archive.7z dir/ |
并行压缩 |
tar -cf - dir/ | pigz > archive.tar.gz |
按格式选择
- 最快压缩:
zip -1
或 gzip -1
- 平衡选择:
rar -m5
或 gzip -6
- 最佳压缩:
7z -mx=9
或 xz -9e
- 日常使用:
zip
或 tar.gz
- 重要备份:
rar
(带恢复记录)
- 极限压缩:
7z
或 xz
故障排除
1
2
3
4
5
6
7
8
9
10
|
# 修复损坏的ZIP
zip -F broken.zip --out fixed.zip
# 测试压缩包完整性
unzip -t archive.zip
rar t archive.rar
tar -tf archive.tar.gz >/dev/null && echo "OK"
# 处理编码问题(中文文件名)
unzip -O GBK archive.zip # 中文Windows创建的ZIP
|
🎯 总结:
日常使用选 ZIP,Linux 系统用 TAR+GZ,重要备份用 RAR,极限压缩试 7Z/XZ
根据需求选择合适的工具,记得经常测试备份的完整性!
💡 提示: 在生产环境中操作前,务必测试压缩解压流程,并确保有足够的磁盘空间和内存。