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