{"msg":"操作成功","code":200,"data":{"createBy":"admin","createTime":"2024-12-28 12:44:02","updateBy":"admin","updateTime":"2024-12-28 12:44:02","remark":null,"id":96,"articleTitle":"每天一个Linux命令（二十）tar","articleUrl":"linux_tar","articleThumbnail":"https://www.asumimoe.com/imgfiles/20250301/b95d839fa195428cb42fc7f104f50b0d.png","articleFlag":"0","draftStatus":"1","reprintStatement":"0","articleSummary":"tar（Tape Archive）是 Linux/Unix 系统中用于打包和压缩文件的核心工具，支持创建、查看、提取归档文件，并能与多种压缩算法（gzip、bzip2、xz等）结合使用。它是文件备份和分发场景中使用最广泛的命令之一。","articleContent":"`tar`（Tape Archive）是 Linux/Unix 系统中用于**打包和压缩文件**的核心工具，支持创建、查看、提取归档文件，并能与多种压缩算法（gzip、bzip2、xz等）结合使用。它是文件备份和分发场景中使用最广泛的命令之一。\n\n---\n\n## 语法\n\n```bash\ntar [选项] [归档文件名] [文件/目录...]\n```\n\n---\n\n## 常用选项\n\n| 选项        | 说明                             |\n| ----------- | -------------------------------- |\n| `-c`        | 创建新归档                       |\n| `-x`        | 提取归档文件                     |\n| `-t`        | 查看归档内容                     |\n| `-v`        | 显示详细操作过程                 |\n| `-f`        | 指定归档文件名                   |\n| `-z`        | 使用 gzip 压缩/解压（.tar.gz）   |\n| `-j`        | 使用 bzip2 压缩/解压（.tar.bz2） |\n| `-J`        | 使用 xz 压缩/解压（.tar.xz）     |\n| `-r`        | 追加文件到归档                   |\n| `-u`        | 仅添加比归档中更新的文件         |\n| `--exclude` | 排除指定文件/目录                |\n| `-C`        | 指定解压目录                     |\n| `-p`        | 保留文件权限属性                 |\n| `--totals`  | 显示归档总字节数                 |\n\n---\n\n## 基础使用示例\n\n### 1. 创建普通 tar 归档\n\n```bash\ntar -cvf archive.tar file1.txt dir1/\n```\n\n输出示例：\n\n```bash\nfile1.txt\ndir1/\ndir1/file2.txt\n```\n\n---\n\n### 2. 创建 gzip 压缩归档\n\n```bash\ntar -czvf archive.tar.gz file1.txt dir1/\n```\n\n输出示例：\n\n```bash\nfile1.txt\ndir1/\ndir1/file2.txt\n```\n\n---\n\n### 3. 查看归档内容\n\n```bash\ntar -tf archive.tar.gz\n```\n\n输出示例：\n\n```bash\nfile1.txt\ndir1/\ndir1/file2.txt\n```\n\n---\n\n### 4. 解压归档到当前目录\n\n```bash\ntar -xzvf archive.tar.gz\n```\n\n输出示例：\n\n```bash\nfile1.txt\ndir1/\ndir1/file2.txt\n```\n\n---\n\n### 5. 解压到指定目录\n\n```bash\ntar -xzvf archive.tar.gz -C /target/path\n```\n\n---\n\n### 6. 追加文件到已有归档\n\n```bash\ntar -rvf archive.tar newfile.txt\n```\n\n---\n\n### 7. 验证归档完整性\n\n```bash\ntar -tvfW archive.tar\n```\n\n输出示例：\n\n```bash\nVerify file1.txt\nVerify dir1/file2.txt\n```\n\n---\n\n## 进阶用法\n\n### 1. 排除特定文件\n\n```bash\ntar -czvf backup.tar.gz --exclude='*.tmp' --exclude='cache/' data/\n```\n\n输出示例：\n\n```bash\ndata/file1.txt\ndata/config/\ndata/config/settings.conf\n```\n\n---\n\n### 2. 保留文件权限\n\n```bash\ntar -cpzvf secure_backup.tar.gz /etc/ssh/\n```\n\n输出示例：\n\n```bash\n/etc/ssh/\n/etc/ssh/sshd_config\n/etc/ssh/ssh_host_rsa_key\n```\n\n---\n\n### 3. 创建增量备份\n\n```bash\ntar -g snapshot.snar -czvf inc_backup_$(date +%Y%m%d).tar.gz /data\n```\n\n输出示例：\n\n```bash\n/data/file1.txtbash\n/data/newfile.log\n```\n\n---\n\n### 4. 分卷压缩大文件\n\n```bash\ntar -cvzf - bigfile.img | split -d -b 2G - bigfile_part.tar.gz.\n```\n\n生成分卷文件：\n\n```bash\nbigfile_part.tar.gz.00\nbigfile_part.tar.gz.01\n```\n\n---\n\n### 5. 从网络直接压缩传输\n\n```bash\ntar -czf - /source | ssh user@remote \"cat > /backup/backup.tar.gz\"\n```\n\n---\n\n### 6. 比较归档与文件系统差异\n\n```bash\ntar -df archive.tar\n```\n\n输出示例：\n\n```bash\nfile1.txt: Mod time differs\ndir1/file2.txt: Size differs\n```\n\n---\n\n## 注意事项\n\n1. **路径问题**：\n\n   - 绝对路径归档会保留完整路径，建议使用相对路径\n   - 使用 `-C` 参数可解决路径错位问题\n\n2. **压缩算法选择**：\n\n   | 算法  | 扩展名 | 压缩率 | 速度 |\n   | ----- | ------ | ------ | ---- |\n   | gzip  | .gz    | 中等   | 快   |\n   | bzip2 | .bz2   | 高     | 慢   |\n   | xz    | .xz    | 最高   | 最慢 |\n\n3. **权限要求**：\n\n   - 需要读取权限来打包文件\n   - 需要写入权限来解压文件\n\n4. **特殊文件**：\n\n   - 默认不归档设备文件，需使用 `--acls` 或 `--selinux` 保留特殊属性\n\n5. **跨平台兼容**：\n\n   - macOS 的 BSD tar 与 Linux 的 GNU tar 存在参数差异\n   - 建议显式使用 `--format=posix` 保证兼容性\n\n---\n\n## 实际应用场景\n\n### 1. 网站备份\n\n```bash\ntar -czvf site_backup-$(date +%Y%m%d).tar.gz \\\n    --exclude='./cache' \\\n    --exclude='./tmp' \\\n    /var/www/html\n```\n\n### 2. 数据库备份组合\n\n```bash\nmysqldump -u root -p dbname | tar -czvf db_backup-$(date +%F).tar.gz -\n```\n\n### 3. 加密归档\n\n```bash\ntar -czvf - sensitive_data | gpg -c > archive.tar.gz.gpg\n```\n\n### 4. 日志轮转归档\n\n```bash\nfind /var/log -name \"*.log\" -mtime +30 -exec tar -rvzf old_logs.tar.gz {} +\n```","categoryId":1,"viewCount":80,"categoryName":"Linux","author":"球接子","authorAvatar":null,"tagIds":[10],"tagNames":["Linux基础"]}}