tar命令指南:Linux文件打包压缩工具
1. 简介
tar(tape archive)是Unix/Linux系统中最常用的归档工具,它可以将多个文件和目录打包成一个文件,并支持多种压缩格式。
主要功能
- 文件和目录的打包
- 支持多种压缩格式(gzip、bzip2、xz)
- 保留文件权限和时间戳
- 支持增量备份
- 支持分卷压缩
2. 基本用法
创建归档
# 创建tar归档
tar -cf archive.tar file1 file2 dir1
# 创建并显示过程
tar -cvf archive.tar file1 file2 dir1
# 追加文件到归档
tar -rf archive.tar file3
# 更新归档中的文件
tar -uf archive.tar file1
提取归档
# 提取所有文件
tar -xf archive.tar
# 提取到指定目录
tar -xf archive.tar -C /target/dir
# 提取特定文件
tar -xf archive.tar file1 file2
# 查看归档内容
tar -tf archive.tar
3. 压缩选项
gzip压缩
# 创建gzip压缩归档
tar -czf archive.tar.gz directory/
# 提取gzip压缩归档
tar -xzf archive.tar.gz
# 查看gzip压缩归档内容
tar -tzf archive.tar.gz
bzip2压缩
# 创建bzip2压缩归档
tar -cjf archive.tar.bz2 directory/
# 提取bzip2压缩归档
tar -xjf archive.tar.bz2
# 查看bzip2压缩归档内容
tar -tjf archive.tar.bz2
xz压缩
# 创建xz压缩归档
tar -cJf archive.tar.xz directory/
# 提取xz压缩归档
tar -xJf archive.tar.xz
# 查看xz压缩归档内容
tar -tJf archive.tar.xz
4. 高级特性
排除文件
# 使用--exclude选项
tar -czf archive.tar.gz --exclude='*.log' directory/
# 使用多个排除模式
tar -czf archive.tar.gz --exclude='*.tmp' --exclude='*.log' directory/
# 使用排除文件列表
tar -czf archive.tar.gz -X exclude.txt directory/
分卷压缩
# 创建固定大小的分卷
tar -czf - directory/ | split -b 1G - archive.tar.gz.
# 合并分卷文件
cat archive.tar.gz.* > archive.tar.gz
# 使用tar的内置分卷功能
tar -czf archive.tar.gz -L 1G directory/
5. 备份应用
增量备份
# 创建完整备份
tar -czf full-backup.tar.gz --level=0 -g backup.snar directory/
# 创建增量备份
tar -czf inc-backup.tar.gz --level=1 -g backup.snar directory/
# 恢复增量备份
tar -xzf full-backup.tar.gz
tar -xzf inc-backup.tar.gz
备份脚本示例
#!/bin/bash
BACKUP_DIR="/backup"
DATE=$(date +%Y%m%d)
tar -czf $BACKUP_DIR/backup-$DATE.tar.gz \
--exclude='*.tmp' \
--exclude='*.log' \
/important/directory/
# 保留最近7天的备份
find $BACKUP_DIR -name "backup-*.tar.gz" -mtime +7 -delete
6. 最佳实践
性能优化
- 使用-p选项保留权限信息
- 使用--exclude排除不必要的文件
- 使用pigz进行多线程压缩
- 使用-j或-J时注意CPU占用
备份建议
- 定期进行完整备份
- 使用增量备份节省空间
- 备份前验证源文件完整性
- 定期测试备份恢复
7. 常见问题排查
压缩问题
# 检查归档完整性
tar -tf archive.tar.gz > /dev/null
# 使用-k选项保留已有文件
tar -xzf archive.tar.gz -k
# 显示详细错误信息
tar -xzvf archive.tar.gz
空间问题
# 估算压缩后大小
tar -cf - directory/ | wc -c
# 使用du估算源文件大小
du -sh directory/
# 检查目标分区空间
df -h /target/directory
权限问题
# 保留所有权限
tar -cpf archive.tar directory/
# 以root身份提取
sudo tar -xf archive.tar
# 修改所有权
tar -xf archive.tar --no-same-owner