目录
- 目录
- 一、压缩命令分类说明
- 1.1 压缩工具对比
- 1.2 tar 命令:归档基础
- 二、压缩解压命令详解
- 2.1 tar 命令 - 归档工具
- 基本语法
- 常用选项组合
- 详细选项说明
- 实战示例
- 2.2 gzip/gunzip 命令
- 功能说明
- 基本语法
- 常用选项
- 实战示例
- 2.3 xz 命令 - 高压缩比工具
- 功能说明
- 基本语法
- 常用选项
- 实战示例
- 2.4 zip/unzip 命令
- 功能说明
- 基本语法
- zip 常用选项
- unzip 常用选项
- 实战示例
- 三、远程传输命令详解
- 3.1 scp 命令 - 安全文件传输
- 功能说明
- 基本语法
- 常用选项
- 实战示例
- 3.2 rsync 命令 - 智能文件同步
- 功能说明
- 基本语法
- 常用选项
- 本地同步示例
- 远程同步示例
- 高级同步技巧
- 四、压缩格式对比与选择指南
- 4.1 压缩性能测试比较
- 创建测试文件
- 压缩工具选择建议
- 五、综合课堂练习
- 练习1:备份脚本编写(25分钟)
- 练习2:压缩工具性能测试(20分钟)
- 练习3:增量同步实战(15分钟)
- 六、实用技巧和故障排除
- 6.1 压缩传输技巧
- 6.2 性能优化
- 6.3 安全注意事项
一、压缩命令分类说明
1.1 压缩工具对比
| 工具 | 压缩格式 | 特点 | 适用场景 |
|---|---|---|---|
| gzip | .gz | 压缩速度快,通用性好 | 单个文件压缩,日志压缩 |
| bzip2 | .bz2 | 压缩比优于gzip | 需要较好压缩比的单个文件 |
| xz | .xz | 压缩比最高,速度慢 | 发行版包,需要高压缩比 |
| zip | .zip | 跨平台,支持目录 | Windows兼容,目录打包 |
1.2 tar 命令:归档基础
tar本身是归档工具,常与压缩工具结合使用:
.tar.gz或.tgz:tar + gzip.tar.bz2:tar + bzip2.tar.xz:tar + xz
二、压缩解压命令详解
2.1 tar 命令 - 归档工具
基本语法
tar [选项] 归档文件名 文件或目录...常用选项组合
| 操作 | 选项组合 | 示例 |
|---|---|---|
| 创建归档 | -cf |
tar -cf archive.tar files/ |
| 查看内容 | -tf |
tar -tf archive.tar |
| 解压归档 | -xf |
tar -xf archive.tar |
| gzip压缩 | -czf |
tar -czf archive.tar.gz files/ |
| bzip2压缩 | -cjf |
tar -cjf archive.tar.bz2 files/ |
| xz压缩 | -cJf |
tar -cJf archive.tar.xz files/ |
详细选项说明
| 选项 | 说明 |
|---|---|
-c |
创建归档 |
-x |
解压归档 |
-t |
查看归档内容 |
-z |
使用gzip压缩/解压 |
-j |
使用bzip2压缩/解压 |
-J |
使用xz压缩/解压 |
-v |
显示详细过程 |
-f |
指定归档文件名 |
-C |
指定解压目录 |
--exclude |
排除文件/目录 |
实战示例
# 创建普通归档
tar -cf project.tar my_project/
# 查看归档内容
tar -tf project.tar
tar -tvf project.tar # 详细列表
# 解压到当前目录
tar -xf backup.tar
tar -xvf backup.tar # 显示解压过程
# 解压到指定目录
tar -xf backup.tar -C /tmp/extract/
# 创建gzip压缩的tar包
tar -czf project.tar.gz my_project/
tar -czvf project.tar.gz my_project/ # 显示进度
# 创建bzip2压缩的tar包
tar -cjf project.tar.bz2 my_project/
# 创建xz压缩的tar包(高压缩比)
tar -cJf project.tar.xz my_project/
# 排除特定文件
tar -czf site.tar.gz --exclude="*.tmp" --exclude="logs/" website/
# 增量备份
tar -g snapshot -czf backup_full.tar.gz /data/ # 全量备份
tar -g snapshot -czf backup_incremental.tar.gz /data/ # 增量备份2.2 gzip/gunzip 命令
功能说明
压缩/解压单个文件,生成.gz格式
基本语法
# 压缩
gzip [选项] 文件...
# 解压
gunzip [选项] 文件.gz
# 或
gzip -d 文件.gz常用选项
| 选项 | 说明 | 示例 |
|---|---|---|
-d |
解压文件 | gzip -d file.gz |
-c |
输出到标准输出 | gzip -c file > file.gz |
-k |
保留原文件 | gzip -k file.txt |
-1到-9 |
压缩级别(1最快,9最好) | gzip -9 large_file.log |
-l |
显示压缩文件信息 | gzip -l file.gz |
实战示例
# 基本压缩(原文件被删除)
gzip large_file.log
gzip file1.txt file2.txt # 压缩多个文件
# 最大压缩比
gzip -9 best_compression.txt
# 保留原文件压缩
gzip -c original.txt > original.txt.gz
gzip -k keep_original.log
# 解压文件
gunzip file.txt.gz
gzip -d data.csv.gz
# 查看压缩信息
gzip -l compressed.log.gz
# 压缩目录中的所有文件
gzip *.log
# 查看压缩文件内容
zcat compressed.log.gz
zless large_file.txt.gz
zgreap "error" application.log.gz2.3 xz 命令 - 高压缩比工具
功能说明
提供最高压缩比,适合压缩大文件
基本语法
# 压缩
xz [选项] 文件...
# 解压
unxz [选项] 文件.xz
# 或
xz -d 文件.xz常用选项
| 选项 | 说明 | 示例 |
|---|---|---|
-d |
解压 | xz -d file.xz |
-k |
保留原文件 | xz -k large_file.iso |
-z |
强制压缩 | xz -z file.txt |
-1到-9 |
压缩级别 | xz -9 huge_file.bin |
-T |
多线程压缩 | xz -T4 big_file.img |
实战示例
# 基本压缩
xz large_file.log # 生成large_file.log.xz
# 保留原文件压缩
xz -k original_file.bin
# 多线程压缩大文件
xz -T4 -9 large_database.dump
# 解压文件
unxz compressed_file.log.xz
xz -d backup.tar.xz
# 查看压缩信息
xz -l file.xz
# 与tar结合使用
tar -cJf backup.tar.xz /important/data/
tar -xJf backup.tar.xz
# 压缩比测试
time xz -9 large_file.bin
ls -lh large_file.bin*2.4 zip/unzip 命令
功能说明
创建和解压zip格式,Windows兼容
基本语法
# 压缩
zip [选项] 压缩包名 文件...
# 解压
unzip [选项] 压缩包名zip 常用选项
| 选项 | 说明 | 示例 |
|---|---|---|
-r |
递归压缩目录 | zip -r project.zip project/ |
-q |
安静模式 | zip -q quiet.zip files/ |
-e |
加密压缩 | zip -e secret.zip confidential.txt |
-1到-9 |
压缩级别 | zip -9 max_compression.zip big_file |
-s |
分卷大小 | zip -r -s 100m split.zip large_dir/ |
-x |
排除文件 | zip -r project.zip . -x "*.tmp" |
unzip 常用选项
| 选项 | 说明 | 示例 |
|---|---|---|
-l |
列出压缩包内容 | unzip -l archive.zip |
-d |
指定解压目录 | unzip data.zip -d /tmp/ |
-o |
覆盖文件不提示 | unzip -o backup.zip |
-v |
详细输出 | unzip -v large.zip |
-P |
密码解压 | unzip -P password encrypted.zip |
实战示例
# 基本压缩
zip documents.zip file1.txt file2.doc
zip -r project.zip my_project/
# 加密压缩
zip -e secret.zip confidential.txt
# 分卷压缩(每卷100M)
zip -r -s 100m large_files.zip big_directory/
# 排除特定文件
zip -r website.zip public_html/ -x "*.log" "tmp/*"
# 列出压缩包内容
unzip -l documents.zip
unzip -v large_archive.zip
# 解压到指定目录
unzip data.zip -d /tmp/extract/
# 安静解压(覆盖现有文件)
unzip -q -o backup.zip
# 密码解压
unzip -P mypassword encrypted.zip三、远程传输命令详解
3.1 scp 命令 - 安全文件传输
功能说明
基于SSH的安全文件传输
基本语法
scp [选项] 源文件 目标文件
# 本地 → 远程
scp 本地文件 用户名@远程主机:目标路径
# 远程 → 本地
scp 用户名@远程主机:远程文件 本地路径常用选项
| 选项 | 说明 | 示例 |
|---|---|---|
-P |
指定SSH端口 | scp -P 2222 file user@host:/path |
-r |
递归复制目录 | scp -r dir/ user@host:/path |
-C |
压缩传输 | scp -C large.iso user@host:/path |
-i |
指定密钥文件 | scp -i key.pem file user@host:/path |
-l |
限制带宽(kbit/s) | scp -l 1000 bigfile user@host:/path |
-v |
详细输出 | scp -v file user@host:/path |
实战示例
# 本地文件 → 远程服务器
scp document.txt student@192.168.1.100:/home/student/
scp backup.tar.gz admin@example.com:/backup/
# 远程文件 → 本地
scp student@192.168.1.100:/home/student/report.pdf ./
scp user@server:/var/log/app.log ./logs/
# 递归复制目录
scp -r my_project/ student@server:/home/student/
# 指定非标准端口
scp -P 2222 -r website/ admin@host:/var/www/
# 使用密钥认证
scp -i ~/.ssh/id_rsa -r data/ user@host:/backup/
# 带宽限制(避免影响网络)
scp -l 500 large_file.iso user@host:/tmp/
# 压缩传输大文件
scp -C database.dump user@host:/backup/
# 详细传输过程
scp -v bigfile.bin user@host:/tmp/3.2 rsync 命令 - 智能文件同步
功能说明
增量同步,支持断点续传,适合备份和镜像
基本语法
rsync [选项] 源路径 目标路径常用选项
| 选项 | 说明 |
|---|---|
-a |
归档模式(保留所有属性) |
-v |
显示详细过程 |
-z |
压缩传输 |
-r |
递归同步目录 |
-u |
只更新(不覆盖新文件) |
-n |
试运行(不实际执行) |
-P |
显示进度+断点续传 |
-L |
同步符号链接指向的文件 |
--delete |
删除目标多余文件 |
--exclude |
排除文件/目录 |
本地同步示例
# 基本同步
rsync -av /home/student/documents/ /backup/documents/
# 增量备份(只同步变化部分)
rsync -avu /data/ /backup/daily/
# 镜像同步(目标与源完全一致)
rsync -av --delete /source/ /mirror/
# 试运行(查看将要同步的内容)
rsync -avun /source/ /backup/
# 显示进度(大文件传输)
rsync -avP large_file.iso /backup/
# 排除特定文件类型
rsync -av --exclude="*.tmp" --exclude=".git/" /project/ /backup/远程同步示例
# 推送到远程服务器
rsync -avz /backup/ student@192.168.1.100:/remote/backup/
# 从远程服务器拉取
rsync -avz student@192.168.1.100:/home/student/ /local/backup/
# 使用SSH特定选项
rsync -av -e "ssh -p 2222" /data/ user@host:/backup/
# 带宽限制(1000KB/s)
rsync -avz --bwlimit=1000 large_files/ user@server:/backup/
# 部分传输(断点续传)
rsync -avP bigfile.tar.gz user@host:/downloads/
# 排除列表文件
rsync -av --exclude-from=exclude.list /data/ user@host:/backup/高级同步技巧
# 增量备份链接(节省空间)
rsync -av --link-dest=/backup/previous/ /source/ /backup/new/
# 实时同步(简单监控)
while true; do
rsync -av --delete /source/ /backup/latest/
sleep 300 # 5分钟同步一次
done
# 备份脚本示例
#!/bin/bash
SOURCE="/important/data"
BACKUP="/backup/$(date +%Y%m%d)"
LOG="/var/log/backup.log"
echo "$(date): 开始备份" >> $LOG
rsync -av --delete $SOURCE $BACKUP >> $LOG 2>&1
if [ $? -eq 0 ]; then
echo "$(date): 备份成功" >> $LOG
else
echo "$(date): 备份失败" >> $LOG
fi四、压缩格式对比与选择指南
4.1 压缩性能测试比较
创建测试文件
# 创建100MB测试文件
dd if=/dev/zero of=testfile bs=1M count=100
# 测试不同压缩工具
time gzip testfile
time bzip2 testfile
time xz testfile
time zip testfile.zip testfile
# 比较压缩结果
ls -lh testfile.* | sort -k5 -h压缩工具选择建议
# 速度优先(日常使用)
tar -czf backup.tar.gz data/ # ✅ 推荐
# 压缩比优先(归档存储)
tar -cJf archive.tar.xz important/ # ✅ 高压缩比
# Windows兼容
zip -r windows_backup.zip files/ # ✅ 跨平台
# 单个文件快速压缩
gzip logfile.log # ✅ 简单快速五、综合课堂练习
练习1:备份脚本编写(25分钟)
任务:编写自动化备份脚本
# 要求:
# 1. 备份指定目录到远程服务器
# 2. 使用压缩归档,按日期命名
# 3. 保留7天内的备份
# 4. 记录备份日志
# 5. 错误处理和邮件通知参考答案:
#!/bin/bash
# auto_backup.sh
# 配置变量
SOURCE_DIRS=("/home/student/documents" "/etc" "/var/www")
BACKUP_SERVER="student@192.168.1.100"
REMOTE_DIR="/backup/$(hostname)"
BACKUP_NAME="backup_$(date +%Y%m%d_%H%M).tar.xz"
LOG_FILE="/var/log/backup.log"
# 创建本地临时备份
echo "$(date): 开始备份..." >> $LOG_FILE
tar -cJf /tmp/$BACKUP_NAME ${SOURCE_DIRS[@]} 2>/dev/null
if [ $? -eq 0 ]; then
echo "$(date): 本地压缩成功" >> $LOG_FILE
# 传输到远程服务器
scp /tmp/$BACKUP_NAME $BACKUP_SERVER:$REMOTE_DIR/
if [ $? -eq 0 ]; then
echo "$(date): 远程传输成功" >> $LOG_FILE
# 清理远程旧备份(7天前)
ssh $BACKUP_SERVER "find $REMOTE_DIR -name '*.tar.xz' -mtime +7 -delete"
else
echo "$(date): 错误:远程传输失败" >> $LOG_FILE
fi
# 清理本地临时文件
rm -f /tmp/$BACKUP_NAME
else
echo "$(date): 错误:本地压缩失败" >> $LOG_FILE
fi练习2:压缩工具性能测试(20分钟)
任务:比较不同压缩工具的性能
# 1. 创建测试数据(文本文件、二进制文件)
# 2. 测试gzip、bzip2、xz、zip的压缩时间和压缩比
# 3. 制作性能对比报告参考答案:
#!/bin/bash
# compression_test.sh
# 创建测试文件
echo "创建测试文件..."
dd if=/dev/urandom of=test_binary.bin bs=1M count=50
find /usr/share/doc -name "*.txt" -exec cat {} + > test_text.txt 2>/dev/null
# 测试函数
test_compression() {
tool=$1
file=$2
level=$3
echo -n "测试 $tool 级别 $level: "
# 压缩时间测试
start_time=$(date +%s)
case $tool in
"gzip") gzip -$level -c $file > $file.$level.gz ;;
"bzip2") bzip2 -$level -c $file > $file.$level.bz2 ;;
"xz") xz -$level -c $file > $file.$level.xz ;;
"zip") zip -$level $file.$level.zip $file > /dev/null ;;
esac
end_time=$(date +%s)
# 计算压缩比
original_size=$(stat -c%s $file)
compressed_size=$(stat -c%s $file.$level.* 2>/dev/null || echo 0)
ratio=$(echo "scale=2; ($original_size - $compressed_size) / $original_size * 100" | bc)
echo "$(($end_time - $start_time))秒, 压缩比: ${ratio}%"
}
# 执行测试
for file in test_binary.bin test_text.txt; do
echo -e "\n测试文件: $file"
echo "原始大小: $(stat -c%s $file) bytes"
for level in 1 6 9; do
test_compression "gzip" $file $level
done
done
# 清理
rm -f test_* *.gz *.bz2 *.xz *.zip练习3:增量同步实战(15分钟)
任务:配置增量同步系统
# 1. 设置本地到远程的增量同步
# 2. 实现每周全量备份+每日增量备份
# 3. 配置同步异常报警参考答案:
#!/bin/bash
# incremental_sync.sh
SOURCE="/data"
REMOTE="user@backup-server:/backup"
LOG="/var/log/sync.log"
# 根据日期判断备份类型
if [ $(date +%u) -eq 1 ]; then # 周一全量备份
BACKUP_TYPE="full"
BACKUP_DIR="weekly_$(date +%Y%m%d)"
else # 其他天增量备份
BACKUP_TYPE="incremental"
BACKUP_DIR="daily_$(date +%Y%m%d)"
fi
echo "$(date): 开始$BACKUP_TYPE备份" >> $LOG
if [ "$BACKUP_TYPE" = "full" ]; then
rsync -av --delete $SOURCE $REMOTE/$BACKUP_DIR/ >> $LOG 2>&1
else
# 查找最新的全量备份作为基准
LATEST_FULL=$(ssh user@backup-server "ls -td /backup/weekly_* | head -1")
rsync -av --link-dest=$LATEST_FULL $SOURCE $REMOTE/$BACKUP_DIR/ >> $LOG 2>&1
fi
if [ $? -eq 0 ]; then
echo "$(date): $BACKUP_TYPE备份成功" >> $LOG
else
echo "$(date): 错误:$BACKUP_TYPE备份失败" >> $LOG
# 发送报警邮件
echo "备份失败" | mail -s "备份报警" admin@company.com
fi六、实用技巧和故障排除
6.1 压缩传输技巧
# 边压缩边传输(节省临时空间)
tar -czf - /big_directory | ssh user@host "cat > backup.tar.gz"
# 从远程解压到本地
ssh user@host "tar -czf - /remote/data" | tar -xzf - -C /local/
# 网络中断续传
rsync -avP --partial user@host:/bigfile.iso ./6.2 性能优化
# 使用快速压缩级别
tar -czf -1 backup.tar.gz data/ # 快速压缩
# 并行压缩大文件
pigz -9 bigfile.img # 多线程gzip
pbzip2 -9 large_file.bin # 多线程bzip2
# 网络带宽优化
scp -l 1000 bigfile user@host:/path # 限制带宽
rsync --bwlimit=50000 large_dir/ user@host:/backup/6.3 安全注意事项
# 使用SSH密钥认证
scp -i ~/.ssh/id_rsa file user@host:/path
# 敏感文件加密压缩
zip -e sensitive.zip confidential.doc
tar -czf - secret_files/ | openssl enc -aes-256-cbc -out backup.tar.gz.enc
# 安全传输后删除本地副本
shred -u sensitive_file.txt通过本教程的学习,你应该能够熟练使用Linux下的各种压缩工具和远程传输命令,根据不同的场景选择最合适的工具组合。
作者:严锋 创建时间:2025-11-01 10:59
最后编辑:严锋 更新时间:2025-11-04 14:01
最后编辑:严锋 更新时间:2025-11-04 14:01