tar

title

tar(tape archive)是Linux中最常用的归档工具,可以将多个文件和目录打包成一个文件,并支持压缩。

基本语法

tar [选项] [归档文件名] [文件或目录]

主要操作选项

  • -c : 创建归档文件(create)
  • -x : 提取归档文件(extract)
  • -t : 列出归档文件内容(list)
  • -r : 向归档文件追加文件
  • -u : 更新归档文件

常用选项

  • -f : 指定归档文件名
  • -v : 显示详细过程(verbose)
  • -z : 使用gzip压缩/解压
  • -j : 使用bzip2压缩/解压
  • -J : 使用xz压缩/解压
  • -C : 指定解压目录

常用操作

创建归档

# 创建归档文件
tar -cf archive.tar file1 file2 directory/

# 创建并显示过程
tar -cvf archive.tar file1 file2 directory/

# 创建gzip压缩归档
tar -czf archive.tar.gz file1 file2 directory/

# 创建bzip2压缩归档
tar -cjf archive.tar.bz2 file1 file2 directory/

# 创建xz压缩归档
tar -cJf archive.tar.xz file1 file2 directory/

提取归档

# 提取归档文件
tar -xf archive.tar

# 提取并显示过程
tar -xvf archive.tar

# 提取gzip压缩归档
tar -xzf archive.tar.gz

# 提取到指定目录
tar -xf archive.tar -C /path/to/destination/

# 只提取特定文件
tar -xf archive.tar file1 directory/file2

查看归档内容

# 列出归档文件内容
tar -tf archive.tar

# 详细列出归档内容
tar -tvf archive.tar

# 列出压缩归档内容
tar -tzf archive.tar.gz

高级用法

排除文件

# 排除特定文件
tar -czf archive.tar.gz --exclude='*.log' directory/

# 排除多个模式
tar -czf archive.tar.gz --exclude='*.log' --exclude='*.tmp' directory/

# 使用排除文件列表
tar -czf archive.tar.gz --exclude-from=exclude_list.txt directory/

增量归档

# 创建基础归档
tar -czf full_backup.tar.gz /home/user/

# 创建增量归档(基于修改时间)
find /home/user/ -newer /path/to/timestamp -print0 | tar -czf incremental.tar.gz --null -T -

权限和属性

# 保持文件权限
tar -czpf archive.tar.gz directory/

# 保持SELinux上下文
tar -czf archive.tar.gz --selinux directory/

# 保持扩展属性
tar -czf archive.tar.gz --xattrs directory/

实用示例

备份脚本

#!/bin/bash
# 每日备份脚本

DATE=$(date +%Y%m%d)
BACKUP_DIR="/backup"
SOURCE_DIR="/home/user/documents"

# 创建备份
tar -czf "$BACKUP_DIR/backup_$DATE.tar.gz" "$SOURCE_DIR"

# 删除7天前的备份
find "$BACKUP_DIR" -name "backup_*.tar.gz" -mtime +7 -delete

远程备份

# 通过SSH备份到远程服务器
tar -czf - /local/data | ssh user@remote 'cat > /backup/data.tar.gz'

# 从远程服务器恢复
ssh user@remote 'cat /backup/data.tar.gz' | tar -xzf - -C /local/restore/

分卷压缩

# 创建分卷归档(每个100MB)
tar -czf - large_directory/ | split -b 100m - backup.tar.gz.

# 合并并解压分卷
cat backup.tar.gz.* | tar -xzf -

文件扩展名约定

  • .tar : 未压缩的tar归档
  • .tar.gz.tgz : gzip压缩的tar归档
  • .tar.bz2.tbz2 : bzip2压缩的tar归档
  • .tar.xz : xz压缩的tar归档

常见错误和解决

权限问题

# 提取时保持原有权限
tar -xpf archive.tar

# 忽略权限错误
tar -xf archive.tar --no-same-owner

路径问题

# 去除路径前缀
tar -czf archive.tar.gz -C /path/to/source .

# 添加路径前缀
tar -xf archive.tar --transform 's|^|newprefix/|'

相关命令

  • gzip/gunzip - gzip压缩工具
  • bzip2/bunzip2 - bzip2压缩工具
  • xz/unxz - xz压缩工具
  • zip/unzip - zip压缩工具
  • rsync - 文件同步工具

tar命令是Linux系统中最重要的归档工具,熟练掌握其用法对日常工作非常有帮助。


powered by Gitbook© 2025 编外计划 | 最后修改: 2025-07-28 12:47:16

results matching ""

    No results matching ""