tar 是 Linux 下最常用的归档工具,名字源自 “tape archive”(磁带归档)。它的核心功能是把多个文件和目录打包成一个单一文件(归档),同时可以调用 gzip、bzip2、xz 等压缩工具对归档进行压缩或解压。在日常运维和开发中,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创建,-zgzip压缩,-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 系统上通用。