人人都会AI编程

tar:归档压缩、常用参数组合

更新时间:2026-07-12

tar 是 Linux 下最常用的归档工具,名字源自 “tape archive”(磁带归档)。它的核心功能是把多个文件和目录打包成一个单一文件(归档),同时可以调用 gzipbzip2xz 等压缩工具对归档进行压缩或解压。在日常运维和开发中,tar 是分发源码、备份数据、迁移目录的首选命令。

1. 基本概念

  • 归档(Archiving):将多个文件或目录合并为一个 .tar 文件,不压缩,体积约等于所有文件大小之和(加上少量头部信息)。
  • 压缩(Compression):在归档的基础上,使用压缩算法减小体积,通常对应 .tar.gz(或 .tgz)、.tar.bz2.tar.xz 等后缀。

tar 的命令格式为:

tar [选项] [归档文件名] [要打包的文件或目录...]

其中选项通常组合使用,且 - 前缀可省略。

2. 最常用的五个选项

几乎所有 tar 操作都围绕下面几个主要选项展开:

| 选项 | 含义 |
|------|------|
| -c | 创建归档(create) |
| -x | 解压归档(extract) |
| -t | 列出归档内容(list) |
| -v | 显示详细过程,列出处理的文件名(verbose) |
| -f | 指定归档文件名,必须紧接在选项之后,且直接给出文件名 |

此外,压缩方式选项记得选一个,常见如下:

  • -z:通过 gzip 压缩或解压(.tar.gz.tgz
  • -j:通过 bzip2(.tar.bz2
  • -J:通过 xz(.tar.xz

3. 最实用的命令组合

以下示例覆盖了 90% 以上的日常使用场景,记住这几个组合就能高效工作。

创建并压缩(打包)

# 将 myproject/ 目录打包并压缩为 myproject.tar.gz
tar -czvf myproject.tar.gz myproject/
  • -c 创建,-z gzip压缩,-v 显示文件列表,-f 指定文件名。

解压到当前目录

tar -xzvf myproject.tar.gz
  • 将归档解压到当前工作目录,原目录结构会恢复。

解压到指定目录

tar -xzvf myproject.tar.gz -C /opt/app/
  • -C 参数指定目标目录,必须提前存在。

仅查看归档内容(不解压)

tar -tzvf myproject.tar.gz
  • -t 列出内容,方便在解压前确认里面有什么文件。

创建不压缩的纯归档

tar -cvf myarchive.tar file1 dir2/
  • 不加压缩选项,得到的 .tar 文件通常用于进一步处理(例如用管道传给其他压缩工具)或快速临时打包。

使用 bzip2 或 xz 压缩

tar -cjvf archive.tar.bz2 mydata/    # bzip2 压缩率更高,但较慢
tar -cJvf archive.tar.xz mydata/    # xz 压缩率最高,适合最终分发

4. 几个实用要点

  • 路径问题:打包时如果使用绝对路径,会保留绝对路径信息,解压时可能直接覆盖系统文件,非常危险。建议始终使用相对路径,例如先 cd 到目标目录的上层再进行打包。
  • 权限保留:默认情况下 tar 会保留文件的权限、所有者和时间戳。解压时如需使用 root 权限保留所有者为原来用户,请加 -p(preserve permissions)选项。
  • 排除文件:打包时可以使用 --exclude 跳过不需要的目录或文件,例如 tar -czvf backup.tar.gz --exclude='.git' --exclude='*.log' myproject/
  • 分卷压缩:对于超大归档,可结合 split 命令,但更简单的做法是先用 tar 打包再用 split 切割,或直接使用 tar -czvf - mydir/ | split -b 1G - backup.tar.gz. 管道方式处理。

5. 一句话速查表

| 任务 | 命令 |
|------|------|
| 打包成 .tar.gz | tar -czvf file.tar.gz dir/ |
| 解压 .tar.gz | tar -xzvf file.tar.gz |
| 解压到 /opt | tar -xzvf file.tar.gz -C /opt |
| 查看内容 | tar -tzvf file.tar.gz |
| 打包成 .tar.bz2 | tar -cjvf file.tar.bz2 dir/ |
| 打包成 .tar.xz | tar -cJvf file.tar.xz dir/ |

掌握了这些 tar 用法,你就拥有了 Linux 文件归档和传输的基本技能。它简单、可靠,并且可以在几乎所有 Unix-like 系统上通用。