我们来详细讲讲 tar 这个在 Linux 和类 Unix 系统中无比重要的工具。
tar 的全称是 Tape Archive(磁带归档)。顾名思义,它最初设计用于将多个文件打包成一个归档文件,以便备份到磁带上。虽然现在磁带已经不常用,但 tar 命令依然是文件打包、压缩和解压的绝对核心工具。
它的核心功能可以概括为两点:
- 打包(归档):将多个文件或目录合并成一个单一的文件(通常称为
tar包或tarball)。 - 压缩/解压:虽然
tar本身不压缩,但它可以轻松地与压缩程序(如gzip,bzip2,xz)协同工作,一步完成打包和压缩,或者解压和解包。
一、为什么需要 tar?
想象一下,如果你有成千上万个文件需要传输或备份,逐个操作会极其低效。tar 解决了这个问题:
- 方便管理:将一个包含无数文件的目录变成单个文件,便于移动、复制、发送。
- 保持结构:保留所有文件的目录结构、权限、所有权(如使用
sudo)和时间戳等信息。 - 结合压缩:大幅减少文件体积,节省存储空间和网络带宽。
二、核心语法和常用参数
tar 命令的基本语法是:
tar [选项] 生成的归档文件.tar [要打包的文件或目录...]
它的选项功能独特,通常可以不加 -。但为了规范,现代用法中通常也会加上。
最常用的三个“模式”选项(不能同时使用):
| 选项 | 全称 | 含义 |
|---|---|---|
-c | --create | 创建一个新的归档文件 |
-x | --extract | 解压一个已有的归档文件 |
-t | --list | 查看归档文件里包含了哪些内容(列表) |
辅助选项(常与上面三个搭配使用):
| 选项 | 全称 | 含义 |
|---|---|---|
-f | --file | 指定归档文件名。这个选项后面必须紧跟文件名,这是最常用的选项。 |
-v | --verbose | 显示详细过程。打包或解压时,会列出正在处理的文件名。 |
-z | --gzip | 通过 gzip 进行压缩或解压,文件后缀通常是 .tar.gz 或 .tgz。 |
-j | --bzip2 | 通过 bzip2 进行压缩或解压,文件后缀通常是 .tar.bz2 或 .tbz2。 |
-J | --xz | 通过 xz 进行压缩或解压,文件后缀通常是 .tar.xz 或 .txz。 |
-C | --directory | 改变至指定目录再执行操作,常用于解压到特定路径。 |
注意:现代版本的 tar 提供了一个更智能的选项 -a (--auto-compress),它可以自动根据你指定的文件后缀名(如 .tar.gz) 来选择合适的压缩方式。但掌握 -z, -j, -J 仍然很重要。
三、常用命令示例
假设我们有一个名为 project 的目录,里面有一些文件和子目录。
1. 仅打包(不压缩)
# 将 project 目录打包成 file.tar
tar -cvf file.tar project/
2. 打包并使用 gzip 压缩(最常用)
# 打包并压缩成 file.tar.gz
tar -czvf file.tar.gz project/
3. 打包并使用 bzip2 压缩(压缩率更高,更慢)
# 打包并压缩成 file.tar.bz2
tar -cjvf file.tar.bz2 project/
4. 打包并使用 xz 压缩(压缩率最高,非常慢)
# 打包并压缩成 file.tar.xz
tar -cJvf file.tar.xz project/
5. 查看压缩包内容
不解压,只看一下里面有什么文件。
tar -tzvf file.tar.gz
6. 解压压缩包
# 解压到当前目录 (会自动识别压缩格式)
tar -xvf file.tar.gz
# 解压到指定目录 /tmp
tar -xvf file.tar.gz -C /tmp
7. 只解压压缩包中的特定文件
# 先查看包里有啥
tar -tzvf file.tar.gz
# 假设里面有 project/readme.txt
tar -xzvf file.tar.gz project/readme.txt
四、总结与最佳实践
- 记住组合:创建归档最常用的就是
-czvf(创建压缩包)和-xzvf(解压压缩包)。 -f选项必须放最后:因为-f后面要接文件名,所以它通常是选项序列里的最后一个。- 压缩格式选择:
.tar.gz(-z):通用、均衡。在压缩速度和压缩率之间取得了很好的平衡,是网络下载和分发中最常见的格式。.tar.bz2(-j):压缩率更高,但压缩和解压速度比 gzip 慢。适合对体积敏感但对时间不敏感的场景。.tar.xz(-J):极限压缩,压缩率最高,但速度也最慢。常用于发行版软件包或需要极致节省空间的场景。
- 使用绝对路径要小心:如果用绝对路径(如
/home/user/file)打包,解压时也会覆盖到绝对路径,这可能很危险。通常建议先cd到要打包目录的父目录再操作,这样打包的是相对路径。
希望这个详细的讲解能帮助你彻底掌握 tar 命令!

549

被折叠的 条评论
为什么被折叠?



