归档(Archiving)是将多个文件和目录组合成一个单一文件的过程,通常用于备份或传输目的。Linux提供了多种强大的归档工具,每种工具都有其特点和适用场景。
工具 | 压缩率 | 速度 | 特点 | 常见扩展名 |
---|---|---|---|---|
tar | 无压缩 | 快 | 纯归档,常与其他压缩工具配合 | .tar |
gzip | 中等 | 快 | 广泛支持,平衡选择 | .gz, .tgz |
bzip2 | 高 | 慢 | 较高压缩率 | .bz2, .tbz |
xz | 非常高 | 最慢 | 极高压缩率 | .xz, .txz |
zip | 中等 | 中等 | 跨平台兼容 | .zip |
7z | 高 | 慢 | 极高压缩率 | .7z |
基本语法:
tar [选项] [归档文件] [文件/目录列表]
常用选项组合:
- 创建归档:tar -cvf archive.tar files/
- 查看内容:tar -tvf archive.tar
- 提取归档:tar -xvf archive.tar
- 提取到指定目录:tar -xvf archive.tar -C /target/directory
高级用法:
# 排除特定文件
tar -cvf archive.tar --exclude='*.tmp' directory/
# 创建增量备份
tar -cvf backup.tar --listed-incremental=snapshot.file directory/
# 多卷归档(分割大文件)
tar -cvzf - large_dir/ | split -b 2G - backup.tar.gz.
基本用法:
# 压缩
gzip filename # 生成filename.gz
tar -czvf archive.tar.gz directory/ # 常用tar+gzip组合
# 解压
gunzip file.gz
gzip -d file.gz
tar -xzvf archive.tar.gz
高级选项:
# 设置压缩级别(1-9,默认6)
gzip -9 file # 最高压缩率
gzip -1 file # 最快压缩
# 保留原始文件
gzip -c file > file.gz
# 测试压缩文件完整性
gzip -t file.gz
基本用法:
# 压缩
bzip2 filename # 生成filename.bz2
tar -cjvf archive.tar.bz2 directory/
# 解压
bunzip2 file.bz2
bzip2 -d file.bz2
tar -xjvf archive.tar.bz2
高级选项:
# 设置块大小(100-900k)
bzip2 -9 file # 最大块大小(900k)
bzip2 -1 file # 最小块大小(100k)
# 显示压缩信息
bzip2 -v file
基本用法:
# 压缩
xz filename # 生成filename.xz
tar -cJvf archive.tar.xz directory/
# 解压
unxz file.xz
xz -d file.xz
tar -xJvf archive.tar.xz
高级选项:
# 设置压缩级别(0-9,默认6)
xz -9 file # 最高压缩率
xz -0 file # 最快压缩(不压缩)
# 多线程压缩(需要支持)
xz -T4 file # 使用4个线程
# 完整备份家目录(使用xz高压缩率)
tar -cJvf home_backup_$(date +%Y%m%d).tar.xz ~/
# 排除特定目录
tar -czvf backup.tar.gz --exclude='./Downloads' --exclude='./.cache' ~/
# 首次完整备份
tar -cvzf full_backup_$(date +%Y%m%d).tar.gz --listed-incremental=backup.snar ~/
# 后续增量备份
tar -cvzf incr_backup_$(date +%Y%m%d).tar.gz --listed-incremental=backup.snar ~/
# 创建Windows兼容的ZIP归档
zip -r archive.zip directory/
# 解压Windows创建的ZIP文件
unzip -O CP936 windows_file.zip # 处理中文文件名
# 分割大归档文件
tar -cvzf - large_dir/ | split -b 2G - large_archive.tar.gz.
# 合并并解压分割文件
cat large_archive.tar.gz.* | tar -xzvf -
选择合适的压缩工具:
并行压缩工具:
# 安装并行工具
sudo apt install pigz pbzip2 pxz
# 使用pigz(并行gzip)
tar -cvf - directory/ | pigz > archive.tar.gz
# 使用pbzip2(并行bzip2)
tar -cvf - directory/ | pbzip2 > archive.tar.bz2
I/O性能优化:
# 使用更快的存储设备
tar -cvzf /ssd/backup.tar.gz /hdd/data/
# 减少磁盘I/O(使用内存)
tar -cvzf archive.tar.gz --ignore-failed-read directory/
归档文件安全:
# 加密归档(GPG)
tar -czvf - sensitive_data/ | gpg -c > archive.tar.gz.gpg
# 解密并提取
gpg -d archive.tar.gz.gpg | tar -xzvf -
处理特殊文件:
# 保留权限和属性
tar -cvpzf backup.tar.gz /important/dir/
# 处理稀疏文件
tar -cvzf backup.tar.gz --sparse large_sparse_file
完整性验证:
# 创建校验和
sha256sum archive.tar.gz > archive.tar.gz.sha256
# 验证校验和
sha256sum -c archive.tar.gz.sha256
文件名编码问题:
# 处理Windows创建的ZIP中的中文文件名
unzip -O CP936 windows_file.zip
# 或使用7z
7z x windows_file.zip
空间不足问题:
# 预估归档大小
tar -cvf - directory/ | wc -c
# 或使用du估算
du -sh directory/
损坏归档修复:
# 尝试修复ZIP文件
zip -FF broken.zip --out fixed.zip
# 测试tar归档完整性
tar -tvf archive.tar
处理特殊权限:
# 保留所有权限(需要root)
sudo tar -cvpzf backup.tar.gz /etc/
# 提取时保留权限
sudo tar -xvpzf backup.tar.gz -C /
#!/bin/bash
# 自动备份脚本
BACKUP_DIR="/backups"
SOURCE_DIR="/data"
LOG_FILE="/var/log/backup.log"
RETENTION_DAYS=30
# 创建备份目录
mkdir -p "$BACKUP_DIR"
# 生成日期戳
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
# 执行备份
echo "[$(date)] 开始备份 $SOURCE_DIR 到 $BACKUP_DIR" >> "$LOG_FILE"
tar -cvpzf "$BACKUP_DIR/backup_$TIMESTAMP.tar.gz" \
--exclude='*/cache' \
--exclude='*/tmp' \
"$SOURCE_DIR" >> "$LOG_FILE" 2>&1
# 清理旧备份
find "$BACKUP_DIR" -name "backup_*.tar.gz" -mtime +$RETENTION_DAYS -delete >> "$LOG_FILE" 2>&1
echo "[$(date)] 备份完成" >> "$LOG_FILE"
远程备份:
# 直接备份到远程服务器
tar -cvzf - /data | ssh user@remote "cat > /backups/backup_$(date +%Y%m%d).tar.gz"
# 或使用rsync增量备份
rsync -avz --delete /data/ user@remote:/backups/data/
差异备份:
# 使用find和tar创建差异备份
find /data -newer /var/log/last_backup -type f -print0 | \
tar -cvzf diff_backup_$(date +%Y%m%d).tar.gz --null -T -
touch /var/log/last_backup
使用Zstandard(现代压缩工具):
# 安装zstd
sudo apt install zstd
# 创建zstd压缩归档
tar -cvf - directory/ | zstd -o archive.tar.zst
# 解压
zstd -d archive.tar.zst -o - | tar -xvf -
通过掌握这些Linux归档技术和实践方法,您将能够高效地管理系统备份、数据传输和存储优化任务。根据具体需求选择合适的工具和参数组合,可以显著提高工作效率。