tar 命令的模式
要明白 tar 命令通过一个选项来指定其操作模式,这个选项通常是单字符的,对于解压,最核心的模式是 -x。

-x: extract,表示“解压”或“提取”。- 它的“对立面”是
-c(create,创建归档)。 - 另一个常用模式是
-t(table,列出归档内容)。
最常用的解压参数组合
在实际使用中,我们很少只使用 -x,通常会结合其他选项来指定解压到哪里、是否显示过程、是否覆盖文件等。
基本解压到当前目录
这是最简单的用法,将归档文件中的所有内容解压到当前工作目录。
tar -xvf filename.tar
参数分解:
-x: extract,解压模式。-v: verbose,详细模式,在解压时,会显示正在解压的文件名,如果不加-v,命令会静默执行,适合在脚本中使用。-f: file,指定归档文件名。这个选项后面必须紧跟归档文件的名称,这是tar命令的一个约定。-f和文件名之间可以有空格,也可以没有,但通常习惯有空格。
示例:
# 解压名为 my_project.tar 的文件到当前目录,并显示解压过程 tar -xvf my_project.tar
按归档类型选择正确的解压方式
tar 本身只负责将多个文件“拼接”成一个文件(归档),并不负责压缩,压缩是通过其他工具(如 gzip, bzip2, xz)实现的,这些工具通常会修改归档文件的后缀名。
你需要根据文件后缀名来选择正确的参数组合。
解压 .tar.gz 或 .tgz 文件 (gzip 压缩)
这是目前最常见的一种压缩归档格式。
# 方法一:分别指定参数 tar -xzvf filename.tar.gz # 方法二:使用组合参数 (更推荐) tar -xzf filename.tar.gz
参数分解:
-z: 这个参数告诉tar命令,归档文件是经过gzip压缩的。tar会自动调用gzip进行解压。
示例:
# 解压一个名为 backup.tar.gz 的文件 tar -xzf backup.tar.gz # 解压一个名为 logs.tgz 的文件 tar -xzf logs.tgz
解压 .tar.bz2 文件 (bzip2 压缩)
这种格式比 gzip 压缩率更高,但速度稍慢。
tar -xjvf filename.tar.bz2 # 更常见的写法 tar -xjf filename.tar.bz2
参数分解:
-j: 告诉tar命令,归档文件是经过bzip2压缩的。
解压 .tar.xz 文件 (xz 压缩)
这是目前压缩率最高的格式之一,但解压和压缩速度也最慢。
tar -xJvf filename.tar.xz # 更常见的写法 tar -xJf filename.tar.xz
参数分解:
-J: (注意是大写的 J) 告诉tar命令,归档文件是经过xz压缩的,这是一个比较新的选项,在较新的tar版本中可用。
解压 .tar.Z 文件 (old Unix compress)
这是一种比较古老的压缩格式,现在很少见。
tar -xZvf filename.tar.Z
参数分解:
-Z: 告诉tar命令,归档文件是经过旧的compress工具压缩的。
其他常用且重要的解压参数
除了上述核心参数,还有一些非常实用的选项。
指定解压目录 (-C)
默认情况下,tar 会将文件解压到当前目录,如果你想把文件解压到指定的其他目录,可以使用 -C (大写) 选项。
tar -xzf filename.tar.gz -C /path/to/destination
参数分解:
-C: Change directory,指定解压的目标目录。
示例:
# 将一个软件包解压到 /opt 目录下 tar -xzf software-1.0.tar.gz -C /opt # 将备份文件解压到 /var/backups 目录下 sudo tar -xzf system_backup_20251027.tar.gz -C /var/backups
只查看不解压 (-t)
有时候你只是想看看归档文件里有什么,而不是真的解压它,这时可以使用 -t (table) 模式。
# 查看 .tar.gz 文件的内容 tar -tzvf filename.tar.gz # 查看 .tar.bz2 文件的内容 tar -tjvf filename.tar.bz2
参数分解:
-t: 列出归档文件中的内容。
覆盖已存在的文件 (--overwrite)
默认情况下,如果解压时目标目录已经存在同名文件,tar 会提示你并跳过该文件,不会覆盖,如果你想强制覆盖,需要使用 --overwrite 选项。
# 强制覆盖已存在的文件 tar --overwrite -xzf filename.tar.gz
注意: 这个选项在某些非常旧的
tar版本中可能不支持,对于旧版本,可以先删除目标文件再解压。
不保留文件原有权限 (--no-same-permissions)
默认情况下,tar 会尝试保留归档文件中文件的原始权限(所有者、组、读/写/执行权限),如果你不希望这样做(以普通用户身份解压一个由 root 创建的归档文件,不想保留 root 的权限),可以使用 --no-same-permissions。
# 解压时不保留原始权限 tar --no-same-permissions -xzf filename.tar.gz
注意: 这样解压出来的文件,其所有者会是当前执行命令的用户,权限也可能被修改。
忽略零字节文件 (--ignore-zeros)
这个选项用于处理损坏的归档文件,它告诉 tar 在遇到文件末尾的零字节块时不要停止,而是继续读取,有时可以恢复部分损坏的归档。
# 尝试解压一个可能损坏的归档文件 tar --ignore-zeros -xvf broken_archive.tar
完整参数列表速查表
| 组合命令 | 功能描述 | 示例 |
|---|---|---|
tar -xvf file.tar |
解压 .tar 文件到当前目录 |
tar -xvf documents.tar |
tar -xzvf file.tar.gz |
解压 .tar.gz 文件 |
tar -xzvf project.tar.gz |
tar -xjvf file.tar.bz2 |
解压 .tar.bz2 文件 |
tar -xjvf source.tar.bz2 |
tar -xJvf file.tar.xz |
解压 .tar.xz 文件 |
tar -xJvf logs.tar.xz |
tar -xvf file.tar -C /path |
解压到指定目录 | tar -xvf app.tar -C /opt |
tar -tvf file.tar |
查看 .tar 文件内容 |
tar -tvf data.tar |
tar -tzvf file.tar.gz |
查看 .tar.gz 文件内容 |
tar -tzvf backup.tar.gz |
tar --overwrite -xzf file |
强制覆盖已存在的文件 | tar --overwrite -xzf config.tar.gz |
tar 命解压的核心公式:
tar -[x/t] -[z/j/J/Z] -v -f filename.tar.[gz/bz2/xz] -C /path/to/dir
- 第一个选项
-x或-t决定是解压还是查看。 - 第二个选项
-z,-j,-J, 或-Z决定了解压哪种压缩格式,根据文件后缀来选择。 -v可选,用于显示过程。-f必选,后面跟文件名。-C可选,用于指定解压路径。
对于初学者来说,tar -xzf (用于 .tar.gz) 和 tar -xjf (用于 .tar.bz2) 以及 -C 的用法,就能解决绝大多数问题了。
