Linux系统压缩解压指令详解与实例
📦 基础压缩工具
1. gzip / gunzip
最常用的单文件压缩工具
# 基本压缩 - 原文件会被替换
$ echo "This is a test file" > file.txt
$ ls -lh file.txt
-rw-r--r-- 1 user user 20B Jan 1 10:00 file.txt$ gzip file.txt
$ ls -lh file.txt.gz
-rw-r--r-- 1 user user 48B Jan 1 10:00 file.txt.gz
# 原file.txt被替换为file.txt.gz# 保留原文件压缩
$ gzip -c file2.txt > file2.txt.gz
$ ls
file2.txt file2.txt.gz# 最大压缩率
$ gzip -9 large_file.log# 解压文件
$ gunzip file.txt.gz
# 或
$ gzip -d file.txt.gz# 查看压缩文件信息
$ gzip -l file.txt.gz
compressed uncompressed ratio uncompressed_name
48 20 80.0% file.txt# 不解压查看内容
$ zcat file.txt.gz
This is a test file
2. bzip2 / bunzip2
高压缩率的单文件压缩工具
# 基本压缩
$ bzip2 file.txt
$ ls
file.txt.bz2# 保留原文件压缩
$ bzip2 -k file.txt
$ ls
file.txt file.txt.bz2# 最大压缩
$ bzip2 -9 large_file.dat# 解压文件
$ bunzip2 file.txt.bz2
# 或
$ bzip2 -d file.txt.bz2# 显示详细信息
$ bzip2 -v file.txt
file.txt: 0.119:1, 67.200 bits/byte, 740.00% saved, 20 in, 168 out.# 不解压查看内容
$ bzcat file.txt.bz2
This is a test file
3. xz / unxz
最高压缩率的单文件压缩工具
# 基本压缩
$ xz file.txt
$ ls
file.txt.xz# 保留原文件压缩
$ xz -k file.txt
$ ls
file.txt file.txt.xz# 极限压缩
$ xz -9e large_file.iso# 解压文件
$ unxz file.txt.xz
# 或
$ xz -d file.txt.xz# 查看压缩文件信息
$ xz -l file.txt.xz
Strms Blocks Compressed Uncompressed Ratio Check Filename
1 1 68 B 20 B 0.125 CRC64 file.txt.xz# 多线程压缩(如果支持)
$ xz -T4 large_file.img# 不解压查看内容
$ xzcat file.txt.xz
This is a test file
🗂️ 归档与压缩组合工具
4. tar - 最强大的归档工具
通常与压缩工具结合使用
# 创建tar归档
$ tar -cvf archive.tar file1.txt file2.txt dir1/
file1.txt
file2.txt
dir1/
dir1/subfile.txt# 查看tar归档内容
$ tar -tf archive.tar
file1.txt
file2.txt
dir1/
dir1/subfile.txt# 解压tar归档
$ tar -xvf archive.tar
file1.txt
file2.txt
dir1/
dir1/subfile.txt# 创建并gzip压缩
$ tar -czvf archive.tar.gz dir1/
dir1/
dir1/file1.txt
dir1/file2.txt# 创建并bzip2压缩
$ tar -cjvf archive.tar.bz2 dir1/# 创建并xz压缩
$ tar -cJvf archive.tar.xz dir1/# 解压gzip压缩的tar包
$ tar -xzvf archive.tar.gz# 解压bzip2压缩的tar包
$ tar -xjvf archive.tar.bz2# 解压xz压缩的tar包
$ tar -xJvf archive.tar.xz# 解压到指定目录
$ tar -xzvf archive.tar.gz -C /target/directory/# 创建归档时排除文件
$ tar -czvf backup.tar.gz --exclude="*.tmp" --exclude="cache" /home/user/# 增量备份(只备份新文件)
$ tar -czvf incremental.tar.gz --newer-mtime="2024-01-01" /data/
5. zip / unzip
跨平台兼容的压缩工具
# 压缩单个文件
$ zip archive.zip file.txt
adding: file.txt (stored 0%)# 压缩多个文件
$ zip archive.zip file1.txt file2.txt file3.txt# 递归压缩目录
$ zip -r project.zip my_project/
adding: my_project/ (stored 0%)
adding: my_project/main.py (deflated 15%)
adding: my_project/config.json (stored 0%)# 最大压缩率
$ zip -9 backup.zip large_file.dat# 加密压缩(设置密码)
$ zip -e secret.zip confidential.txt
Enter password:
Verify password: # 分卷压缩(每卷100MB)
$ zip -s 100m -r split_archive.zip large_directory/# 查看压缩包内容
$ zip -sf archive.zip
Archive contains:
file1.txt
file2.txt
dir1/
Total 3 entries (103 bytes)# 详细列表
$ unzip -l archive.zip
Archive: archive.zip
Length Date Time Name
20 01-01-2024 10:00 file1.txt
35 01-01-2024 10:01 file2.txt
0 01-01-2024 10:02 dir1/
55 3 files# 解压文件
$ unzip archive.zip
Archive: archive.zip
extracting: file1.txt
extracting: file2.txt
creating: dir1/# 解压到指定目录
$ unzip archive.zip -d /target/directory/# 安静模式解压
$ unzip -q archive.zip# 覆盖解压(不提示)
$ unzip -o archive.zip# 测试压缩包完整性
$ unzip -t archive.zip
Archive: archive.zip
testing: file1.txt OK
testing: file2.txt OK
No errors detected in archive.zip
6. 7z / 7za
高压缩率的多格式工具
# 安装7z(如果未安装)
$ sudo apt install p7zip-full # Debian/Ubuntu
$ sudo yum install p7zip # CentOS/RHEL# 压缩文件/目录
$ 7z a archive.7z file1.txt dir1/
7-Zip [64] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21
Scanning the drive:
2 files, 103 bytes (1 KiB)
Creating archive: archive.7z
Items to compress: 2
Files read from disk: 2
Archive size: 200 bytes (1 KiB)
Everything is Ok# 最大压缩率
$ 7z a -mx=9 backup.7z large_file.iso# 分卷压缩(每卷50MB)
$ 7z a -v50m split.7z large_file.dat# 加密压缩
$ 7z a -p password.7z secret_files/
Enter password (will not be echoed):
Reenter password:# 查看压缩包内容
$ 7z l archive.7z
7-Zip [64] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21
Listing archive: archive.7z
Path = archive.7z
Type = 7z
Physical Size = 200
Headers Size = 138
Method = LZMA2:12
Solid = -
Blocks = 1
Date Time Attr Size Compressed Name
2024-01-01 10:00:00 ....A 20 20 file1.txt
2024-01-01 10:01:00 ....A 35 35 file2.txt
2024-01-01 10:02:00 D.... 0 0 dir1
2 55 55 2 files, 1 folders# 解压文件
$ 7z x archive.7z
Everything is Ok
Files: 2
Size: 55
Compressed: 200# 解压到指定目录
$ 7z x archive.7z -o/target/directory/# 测试压缩包完整性
$ 7z t archive.7z
Everything is Ok
🔄 特殊压缩工具
7. rar / unrar
商业压缩工具(需要安装)
# 安装(Debian/Ubuntu)
$ sudo apt install rar unrar# 压缩文件
$ rar a archive.rar file1.txt file2.txt# 压缩目录
$ rar a -r project.rar my_project/# 分卷压缩(每卷10MB)
$ rar a -v10m split.rar large_file.iso# 设置密码
$ rar a -p secret.rar confidential/# 解压文件
$ unrar x archive.rar# 查看压缩包内容
$ unrar l archive.rar# 测试压缩包
$ unrar t archive.rar
8. zstd
现代高性能压缩工具
# 安装
$ sudo apt install zstd# 压缩文件
$ zstd file.txt
file.txt -> file.txt.zst# 保留原文件压缩
$ zstd -k file.txt# 最大压缩率
$ zstd -19 large_file.dat# 解压文件
$ unzstd file.txt.zst
# 或
$ zstd -d file.txt.zst# 快速压缩(低压缩率,高速度)
$ zstd -1 file.txt# 查看压缩文件信息
$ zstd -l file.txt.zst
🛠️ 实用脚本与高级用法
9. 自动备份脚本示例
#!/bin/bash
# backup_script.shBACKUP_DIR="/backups"
SOURCE_DIRS=("/home/user" "/etc" "/var/www")
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_FILE="$BACKUP_DIR/full_backup_$DATE.tar.gz"echo "开始备份: $(date)"# 创建备份目录
mkdir -p $BACKUP_DIR# 执行备份
tar -czf $BACKUP_FILE \--exclude="*.tmp" \--exclude="cache/*" \--exclude="*.log" \"${SOURCE_DIRS[@]}"# 检查备份是否成功
if [ $? -eq 0 ]; thenecho "备份成功: $BACKUP_FILE"echo "备份大小: $(du -h $BACKUP_FILE | cut -f1)"
elseecho "备份失败!"exit 1
fi# 清理7天前的备份
find $BACKUP_DIR -name "full_backup_*.tar.gz" -mtime +7 -deleteecho "备份完成: $(date)"
10. 压缩性能测试脚本
#!/bin/bash
# compression_test.shTEST_FILE="test_data.txt"
SIZE="100M"# 生成测试文件
echo "生成测试文件..."
dd if=/dev/urandom of=$TEST_FILE bs=1M count=100 status=progressecho -e "\n压缩测试结果:"
echo "文件类型 | 压缩时间 | 压缩后大小 | 压缩率"# gzip测试
echo -n "gzip -1 | "
time gzip -1 -c $TEST_FILE > test.gz 2>&1
GZ_SIZE=$(stat -c%s test.gz)
echo -n "$(echo "scale=2; ($GZ_SIZE/1024/1024)" | bc) MB | "
echo "$(echo "scale=1; (100-$GZ_SIZE*100/104857600)" | bc)%"# bzip2测试
echo -n "bzip2 -1 | "
time bzip2 -1 -c $TEST_FILE > test.bz2 2>&1
BZ_SIZE=$(stat -c%s test.bz2)
echo -n "$(echo "scale=2; ($BZ_SIZE/1024/1024)" | bc) MB | "
echo "$(echo "scale=1; (100-$BZ_SIZE*100/104857600)" | bc)%"# xz测试
echo -n "xz -1 | "
time xz -1 -c $TEST_FILE > test.xz 2>&1
XZ_SIZE=$(stat -c%s test.xz)
echo -n "$(echo "scale=2; ($XZ_SIZE/1024/1024)" | bc) MB | "
echo "$(echo "scale=1; (100-$XZ_SIZE*100/104857600)" | bc)%"# 清理
rm -f test.gz test.bz2 test.xz $TEST_FILE
11. 网络传输压缩示例
# 压缩并传输到远程服务器
$ tar -czf - /large/directory/ | ssh user@remote-server "cd /backup && tar -xzf -"# 从远程服务器下载并解压
$ ssh user@remote-server "tar -czf - /data/" | tar -xzf - -C /local/backup/# 使用rsync压缩传输
$ rsync -avz -e ssh /local/dir/ user@remote:/backup/dir/
📋 快速参考表
| 命令 | 压缩 | 解压 | 查看内容 | 特点 |
|---|---|---|---|---|
gzip file | ✅ | gunzip file.gz | zcat file.gz | 速度快,通用 |
bzip2 file | ✅ | bunzip2 file.bz2 | bzcat file.bz2 | 压缩率高 |
xz file | ✅ | unxz file.xz | xzcat file.xz | 最高压缩率 |
zip archive.zip file | ✅ | unzip archive.zip | unzip -l archive.zip | 跨平台 |
tar -czf archive.tar.gz dir | ✅ | tar -xzf archive.tar.gz | tar -tzf archive.tar.gz | 目录归档 |
7z a archive.7z file | ✅ | 7z x archive.7z | 7z l archive.7z | 多格式支持 |
💡 最佳实践建议
- 日常使用:
gzip或tar + gzip - 高压缩率:
xz或7z - 跨平台分享:
zip - 目录备份:
tar + gzip/xz - 大文件: 考虑分卷压缩
- 敏感数据: 使用加密压缩
掌握这些压缩解压指令将大大提高您在Linux环境下的工作效率。根据具体需求选择合适的工具,可以在压缩率、速度和兼容性之间找到最佳平衡。
