Linux tar 命令使用说明
概述
tar(tape archive)是 Linux 系统中用于创建、查看和提取归档文件的工具。它可以将多个文件或目录打包成一个文件,也可以结合压缩工具(如 gzip、bzip2、xz)进行压缩。
基本语法
- tar [选项] [归档文件名] [要归档的文件/目录...]
复制代码 主要操作模式
创建归档
- -c, --create: 创建新的归档文件
- -r, --append: 向现有归档文件追加文件
- -u, --update: 更新归档文件中的文件
提取归档
- -x, --extract: 从归档文件中提取文件
- -t, --list: 列出归档文件的内容
压缩选项
- -z, --gzip: 使用 gzip 压缩/解压
- -j, --bzip2: 使用 bzip2 压缩/解压
- -J, --xz: 使用 xz 压缩/解压
- -Z, --compress: 使用 compress 压缩/解压
常用选项
基本选项
- -f, --file: 指定归档文件名
- -v, --verbose: 显示详细信息
- -C, --directory: 切换到指定目录
- -P, --absolute-names: 保留绝对路径
- -p, --preserve-permissions: 保留文件权限
- --exclude: 排除指定文件或目录
- -X, --exclude-from: 从文件读取排除列表
高级选项
- --wildcards: 使用通配符匹配
- --strip-components=N: 提取时去掉N层目录
- --remove-files: 归档后删除原文件
- --checkpoint: 显示进度信息
常用命令示例
1. 创建归档文件
基本打包
- # 创建tar归档文件
- tar -cf archive.tar file1.txt file2.txt
- # 创建归档并显示详细信息
- tar -cvf archive.tar file1.txt file2.txt
- # 打包整个目录
- tar -cvf backup.tar /home/user/documents/
复制代码 压缩打包
- # 使用gzip压缩
- tar -czvf archive.tar.gz file1.txt file2.txt
- # 使用bzip2压缩
- tar -cjvf archive.tar.bz2 file1.txt file2.txt
- # 使用xz压缩(压缩率最高)
- tar -cJvf archive.tar.xz file1.txt file2.txt
复制代码 2. 查看归档文件内容
- # 列出归档文件内容
- tar -tf archive.tar
- # 详细列出归档文件内容
- tar -tvf archive.tar
- # 查看压缩归档文件内容
- tar -tzf archive.tar.gz
复制代码 3. 提取归档文件
- # 提取到当前目录
- tar -xf archive.tar
- # 提取并显示详细信息
- tar -xvf archive.tar
- # 提取到指定目录
- tar -xvf archive.tar -C /target/directory/
- # 提取压缩归档文件
- tar -xzf archive.tar.gz
- tar -xjf archive.tar.bz2
- tar -xJf archive.tar.xz
复制代码 4. 增量备份
- # 创建完整备份
- tar -czf backup_full.tar.gz /home/user/
- # 创建增量备份(只备份修改的文件)
- tar -czf backup_incremental.tar.gz --newer-mtime='2024-01-01' /home/user/
复制代码 5. 排除特定文件
- # 排除特定文件
- tar -czf backup.tar.gz --exclude='*.log' --exclude='*.tmp' /home/user/
- # 从文件读取排除列表
- tar -czf backup.tar.gz -X exclude_list.txt /home/user/
复制代码 实际应用场景
1. 系统备份
- # 备份重要配置文件
- tar -czf config_backup.tar.gz /etc/
- # 备份用户数据
- tar -czf user_data.tar.gz /home/ --exclude='*.cache'
- # 备份整个系统(排除不需要的目录)
- tar -czf system_backup.tar.gz / --exclude='/proc' --exclude='/sys' --exclude='/tmp'
复制代码 2. 软件分发
- # 打包源代码
- tar -czf myapp-1.0.tar.gz myapp/
- # 创建发布包
- tar -czf release.tar.gz --exclude='*.git' --exclude='*.o' src/
复制代码 3. 日志归档
- # 归档旧日志文件
- tar -czf logs_2024.tar.gz /var/log/*.log
- # 按日期归档日志
- tar -czf logs_$(date +%Y%m%d).tar.gz /var/log/
复制代码 4. 数据库备份
- # 备份数据库文件
- tar -czf database_backup.tar.gz /var/lib/mysql/
- # 备份并保留权限
- tar -czpf database_backup.tar.gz /var/lib/mysql/
复制代码 高级用法
1. 流式处理
- # 通过管道传输
- tar -czf - /source/ | ssh user@remote "tar -xzf - -C /destination/"
- # 远程备份
- ssh user@remote "tar -czf - /remote/path/" | tar -xzf - -C /local/path/
复制代码 2. 多卷归档
- # 创建多卷归档(每个文件最大100MB)
- tar -czf - /large/directory/ | split -b 100m - archive.tar.gz.
复制代码 3. 并行压缩
- # 使用pigz进行并行gzip压缩
- tar -cf - /source/ | pigz > archive.tar.gz
- # 使用pbzip2进行并行bzip2压缩
- tar -cf - /source/ | pbzip2 > archive.tar.bz2
复制代码 常见文件扩展名
扩展名压缩方式命令示例.tar无压缩tar -cf.tar.gzgziptar -czf.tgzgziptar -czf.tar.bz2bzip2tar -cjf.tar.xzxztar -cJf.tar.Zcompresstar -cZf性能优化技巧
1. 选择合适的压缩算法
- # 快速压缩(gzip)
- tar -czf archive.tar.gz files/
- # 高压缩率(xz)
- tar -cJf archive.tar.xz files/
- # 平衡选择(bzip2)
- tar -cjf archive.tar.bz2 files/
复制代码 2. 并行处理
- # 使用pigz并行压缩
- tar -cf - files/ | pigz -p 4 > archive.tar.gz
- # 使用pbzip2并行压缩
- tar -cf - files/ | pbzip2 -p4 > archive.tar.bz2
复制代码 故障排除
1. 常见错误
- # 权限不足
- sudo tar -czf backup.tar.gz /etc/
- # 磁盘空间不足
- df -h # 检查磁盘空间
- tar -czf backup.tar.gz --exclude='/large/directory' /
- # 文件名过长
- tar -czf backup.tar.gz --transform 's/.*\///' files/
复制代码 2. 验证归档完整性
- # 测试归档文件
- tar -tzf archive.tar.gz
- # 验证提取
- tar -tzf archive.tar.gz | wc -l
- tar -xzf archive.tar.gz && echo "提取成功"
复制代码 示例脚本
自动备份脚本
- #!/bin/bash
- # 自动备份脚本
- BACKUP_DIR="/backup"
- SOURCE_DIR="/home/user"
- DATE=$(date +%Y%m%d_%H%M%S)
- BACKUP_FILE="backup_${DATE}.tar.gz"
- # 创建备份
- tar -czf "${BACKUP_DIR}/${BACKUP_FILE}" \
- --exclude='*.cache' \
- --exclude='*.tmp' \
- "${SOURCE_DIR}"
- # 删除7天前的备份
- find "${BACKUP_DIR}" -name "backup_*.tar.gz" -mtime +7 -delete
- echo "备份完成: ${BACKUP_FILE}"
复制代码 批量解压脚本
- #!/bin/bash
- # 批量解压tar文件
- for file in *.tar.gz; do
- if [ -f "$file" ]; then
- echo "解压文件: $file"
- tar -xzf "$file"
- fi
- done
复制代码 总结
tar 是 Linux 系统中功能强大的归档工具,具有以下特点:
- 多功能性: 可以创建、查看、提取归档文件
- 压缩支持: 支持多种压缩算法(gzip、bzip2、xz)
- 灵活性: 支持排除文件、保留权限、增量备份等
- 兼容性: 几乎所有 Linux 系统都预装
- 效率: 支持流式处理和并行压缩
掌握 tar 命令的使用,可以有效地进行文件备份、软件分发和系统管理。
来源:豆瓜网用户自行投稿发布,如果侵权,请联系站长删除 |