打包 vs. 压缩
在学习命令之前,必须先理解两个概念:

- 打包:将多个文件或目录合并成一个单一的文件,这个过程不减少文件大小,只是将它们组织在一起,常见的打包工具有
tar,cpio。 - 压缩:使用特定的算法(如 gzip, bzip2, xz)来减小文件的大小,压缩通常针对的是一个单一文件。
在实际使用中,我们通常将这两个步骤合二为一:先打包,再压缩。
最核心的命令:tar
tar (Tape Archiver) 是 Linux 下最强大、最常用的归档工具,它本身只负责打包,但可以调用其他压缩程序(如 gzip, bzip2, xz)来完成压缩。
基本语法
tar [选项] [归档文件名] [要打包的文件或目录]
常用选项
| 选项 | 长选项 | 描述 |
|---|---|---|
-c |
--create |
创建一个新的归档文件(打包)。 |
-x |
--extract |
解包一个归档文件。 |
-t |
--list |
列出归档文件中的内容,不解包。 |
-f |
--file=ARCHIVE |
指定归档文件的文件名,此选项通常是最后一个,后面紧跟文件名。 |
-v |
--verbose |
显示详细的处理过程(正在打包/解包哪些文件)。 |
-z |
--gzip |
调用 gzip 程序进行压缩/解压,文件后缀通常为 .tar.gz 或 .tgz。 |
-j |
--bzip2 |
调用 bzip2 程序进行压缩/解压,压缩率比 gzip 高,但速度慢,文件后缀通常为 .tar.bz2。 |
-J |
--xz |
调用 xz 程序进行压缩/解压,压缩率最高,但速度最慢,文件后缀通常为 .tar.xz。 |
-C |
--directory=DIR |
在解包时,将文件解压到指定的目录 DIR。 |
tar 命令详解(最常用场景)
场景1:打包并使用 gzip 压缩(最常用)
这是最常见的用法,用于创建一个 .tar.gz 文件。
命令:

# 将 my_project 目录打包并压缩为 my_project.tar.gz tar -czvf my_project.tar.gz my_project/ # 解释: # -c: 创建归档 # -z: 使用 gzip 压缩 # -v: 显示过程 # -f: 指定文件名为 my_project.tar.gz # my_project/: 要打包的目录
场景2:解压 .tar.gz 文件
命令:
# 解压 my_project.tar.gz 到当前目录 tar -xzvf my_project.tar.gz # 解释: # -x: 解包 # -z: 使用 gzip 解压 # -v: 显示过程 # -f: 指定要解压的文件 # 解压到指定目录 /tmp tar -xzvf my_project.tar.gz -C /tmp
场景3:打包并使用 bzip2 压缩
当需要更高的压缩率时使用。
命令:
# 将 my_project 目录打包并压缩为 my_project.tar.bz2 tar -cjvf my_project.tar.bz2 my_project/ # 解压 my_project.tar.bz2 tar -xjvf my_project.tar.bz2
场景4:打包并使用 xz 压缩
当追求极致的压缩率时使用(用于长期归档或网络传输)。

命令:
# 将 my_project 目录打包并压缩为 my_project.tar.xz tar -cJvf my_project.tar.xz my_project/ # 解压 my_project.tar.xz tar -xJvf my_project.tar.xz
场景5:只查看归档文件内容,不解压
命令:
# 查看 my_project.tar.gz 的内容 tar -tzvf my_project.tar.gz
场景6:向已存在的归档文件中添加新文件
命令:
# 将 new_file.txt 添加到 my_project.tar.gz 中 tar -rvf my_project.tar.gz new_file.txt # 注意:my_project.tar.gz 是压缩过的(如 .gz),此命令会破坏压缩包。 # 正确做法是先解压,添加文件,再重新压缩。
其他打包/压缩命令
除了 tar,还有一些其他工具,它们的使用场景和 tar 不同。
zip 和 unzip
zip 是跨平台最常用的压缩格式,在 Windows 和 Linux 上都通用,它将每个文件单独压缩,然后打包。
- 特点:跨平台兼容性好。
- 缺点:对于大量小文件,压缩率通常不如
tar.gz。
命令:
# 安装 (如果系统没有) # Debian/Ubuntu: sudo apt-get install zip unzip # CentOS/RHEL: sudo yum install zip unzip # 压缩 zip -r my_project.zip my_project/ # -r: 递归压缩目录 # 解压 unzip my_project.zip unzip -l my_project.zip
gzip / gunzip
gzip 是一个单纯的压缩工具,它只能压缩单个文件,不能打包多个文件。
命令:
# 压缩一个文件,生成 file.gz,原 file 文件会被删除 gzip large_file.log # 解压,生成 large_file.log,原 file.gz 文件会被删除 gunzip large_file.gz # 解压并保留原文件 gzip -d large_file.gz # 压缩并保留原文件 gzip -c large_file.log > large_file.gz
bzip2 / bunzip2
与 gzip 类似,也是一个单纯的压缩工具,但压缩率更高,速度更慢。
命令:
# 压缩 bzip2 large_file.log # 解压 bunzip2 large_file.bz2
xz / unxz
与 gzip 和 bzip2 类似,是目前压缩率最高的工具之一,速度最慢。
命令:
# 压缩 xz large_file.log # 解压 unxz large_file.xz
快速选择指南
| 你的需求 | 推荐命令 | 文件后缀 | 说明 |
|---|---|---|---|
| 日常 Linux 环境下备份/归档 | tar -czvf ... |
.tar.gz |
最常用,速度快,兼容性好。 |
| 需要更高的压缩率 | tar -cjvf ... |
.tar.bz2 |
压缩率比 gzip 高,但慢。 |
| 追求极致压缩率 | tar -cJvf ... |
.tar.xz |
压缩率最高,速度最慢。 |
| 需要与 Windows 用户共享 | zip -r ... |
.zip |
跨平台,Windows 上无需额外软件即可解压。 |
| 只压缩一个单一的大文件 | gzip ... / xz ... |
.gz / .xz |
比 tar 压缩单个文件更直接。 |
| 工具 | 类型 | 功能 | 典型用法 |
|---|---|---|---|
tar |
打包+压缩 | 打包多个文件/目录,并调用外部压缩程序 | tar -czvf archive.tar.gz dir/ |
zip |
打包+压缩 | 跨平台,将多个文件/目录打包成 .zip 格式 | zip -r archive.zip dir/ |
gzip |
压缩 | 单文件压缩,速度快 | gzip file |
bzip2 |
压缩 | 单文件压缩,压缩率高 | bzip2 file |
xz |
压缩 | 单文件压缩,压缩率最高 | xz file |
掌握 tar 命令就足以应对绝大多数 Linux 下的打包和压缩场景。-czvf (打包压缩) 和 -xzvf (解压) 这两个组合,再结合 -C 指定解压目录,就能解决大部分问题。
