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 -1gzip -1
  • 平衡选择: rar -m5gzip -6
  • 最佳压缩: 7z -mx=9xz -9e
  • 日常使用: ziptar.gz
  • 重要备份: rar(带恢复记录)
  • 极限压缩: 7zxz

故障排除

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
根据需求选择合适的工具,记得经常测试备份的完整性!

💡 提示: 在生产环境中操作前,务必测试压缩解压流程,并确保有足够的磁盘空间和内存。