tar
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系统中最重要的归档工具,熟练掌握其用法对日常工作非常有帮助。