如何在 Linux 中解压 .tar.gz 文件:完整指南与高级技巧
在任何 Linux 环境中,处理压缩文件是日常工作的现实。最广泛使用的格式之一是 .tar.gz,这是一种两阶段格式,结合了用于存档的 tar 和用于压缩的 gzip。无论您是在解包软件源代码、恢复备份,还是在 VPS 主机 服务器上部署配置文件,了解如何高效且安全地处理 .tar.gz 存档是一项基础的 Linux 技能。
本指南涵盖了从基本提取命令到大型存档的高级技术、安全加固和脚本最佳实践的所有内容。
.tar.gz 文件是什么?
.tar.gz 文件(通常称为 tarball)分两个步骤创建:
tar 将多个文件和目录捆绑到单个存档中(.tar)
gzip 压缩该存档以减小其大小(.tar.gz 或 .tgz)
常见用途
分发软件源代码
打包配置文件和备份
存档日志文件以供长期存储
在服务器之间传输大型目录树
示例文件名: project-files.tar.gz基本提取命令
提取 .tar.gz 文件的标准命令是:
tar -xvzf file.tar.gz标志分解
| 标志 | 含义 |
|---|---|
-x | 从存档中提取文件 |
-v | 详细模式 — 在提取时列出每个文件 |
-z | 使用 gzip 解压缩 |
-f | 指定要操作的文件名 |
这个单一命令处理了绝大多数日常提取任务。
提取到特定目录
默认情况下,tar 将文件提取到当前工作目录。要将输出重定向到特定位置,请使用 -C 标志:
tar -xvzf file.tar.gz -C /path/to/target-directory> 注意: 目标目录必须已存在。如果需要,请先使用 mkdir -p /path/to/target-directory 创建它。
这种方法在自动化部署脚本中或在生产服务器上组织多个存档时特别有用。
在提取前预览存档内容
在提取存档之前(特别是来自不熟悉的来源的存档),最好先检查其内容:
tar -tvzf file.tar.gz-t 标志列出存档内的所有文件和目录,而不提取任何内容。这可以帮助您:
- 了解内部目录结构
- 避免意外覆盖现有文件
- 检测可疑或意外的路径
提取特定文件或目录
您不总是需要提取整个存档。要提取单个文件或文件夹,请指定其在存档内显示的确切路径:
tar -xvzf file.tar.gz path/to/specific-file.txt要找到确切的内部路径,请先运行 --list 命令:
tar -tvzf file.tar.gz | grep filename> 重要: 使用存档列表中显示的相对路径,而不是以 / 开头的绝对路径。
提取不受信任的存档时的安全考虑
从未知或不受信任的来源提取 .tar.gz 文件可能会带来严重的安全风险,包括 路径遍历攻击,其中恶意存档会覆盖关键系统文件。应用这些保护:
防止目录覆盖
tar --no-overwrite-dir -xvzf file.tar.gz删除前导路径组件
--strip-components 标志从提取的路径中删除前导目录级别,这可以消除绝对路径注入尝试:
tar --strip-components=1 -xvzf untrusted-archive.tar.gz提取到隔离目录
始终将不受信任的存档提取到专用沙箱目录中,并在将文件移动到最终目的地之前检查内容:
mkdir /tmp/sandbox && tar -xvzf untrusted-archive.tar.gz -C /tmp/sandbox这些做法在共享基础设施上尤为关键。如果您管理多个站点或客户端,请考虑使用具有严格权限边界的 共享网络主机 环境。
高效处理大型存档
对于跨越数 GB 的存档,标准提取可能感觉像一个黑匣子。这些技术改进了可见性和性能。
使用 pv 监控进度
pv(管道查看器)显示实时进度条和传输速度:
pv file.tar.gz | tar xzvf -如果尚未安装,请安装 pv:
# Debian/Ubuntu
sudo apt install pv
# CentOS/RHEL/AlmaLinux
sudo dnf install pv禁用详细模式以加快提取速度
提取非常大的存档时,-v 标志可能会通过将数千个文件名打印到终端来减慢速度。删除它以获得更好的性能:
tar -xzf file.tar.gz使用 pigz 进行并行解压缩
对于多核服务器,pigz 用并行实现替换 gzip,可以大大减少解压缩时间:
tar -I pigz -xf file.tar.gz分两个步骤解压缩
有时您需要更精细的控制 — 例如,在集成到管道中或在解包前检查中间 .tar 文件时。您可以将该过程分为两个命令:
# Step 1: Decompress gzip to get a plain .tar archive
gunzip file.tar.gz
# Step 2: Extract the .tar archive
tar -xvf file.tar这种方法在以下情况下很有用:
- 您想在提取前检查原始
.tar - 您的管道分别处理
.tar和.gz阶段 - 您需要将
.tar文件传递给另一个工具
创建 .tar.gz 存档
了解如何创建存档与提取存档同样重要。语法与提取相似,但使用 -c(创建)而不是 -x:
tar -czvf archive-name.tar.gz /path/to/directory/排除特定文件或目录
tar -czvf archive.tar.gz /path/to/directory/ --exclude='*.log' --exclude='node_modules'这对于创建干净的部署包或备份而不会产生不必要的膨胀非常有价值。
在脚本中自动化 .tar.gz 操作
在生产服务器上 — 无论您运行 专用服务器 还是托管 VPS — 自动化存档操作可以节省时间并减少人为错误。
示例:自动备份脚本
#!/bin/bash
BACKUP_DIR="/var/backups"
SOURCE_DIR="/var/www/html"
DATE=$(date +%Y-%m-%d)
ARCHIVE="$BACKUP_DIR/website-backup-$DATE.tar.gz"
mkdir -p "$BACKUP_DIR"
tar -czf "$ARCHIVE" --exclude='*.tmp' "$SOURCE_DIR"
echo "Backup created: $ARCHIVE"使用 cron 作业安排此脚本以实现完全自动化的每日备份:
0 2 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1使用 GUI 存档管理器(可选)
如果您在 Linux 桌面环境中工作,图形工具提供了拖放替代方案:
| 桌面环境 | 存档管理器 |
|---|---|
| GNOME | File Roller |
| KDE Plasma | Ark |
| Xfce | Thunar Archive Plugin |
这些工具原生支持 .tar.gz,适合偶尔使用。但是,对于服务器管理,命令行仍然是最可靠和可脚本化的方法。
快速参考:基本 tar 命令
| 任务 | 命令 |
|---|---|
| 提取存档 | tar -xvzf file.tar.gz |
| 提取到目录 | tar -xvzf file.tar.gz -C /target/ |
| 列出内容 | tar -tvzf file.tar.gz |
| 提取单个文件 | tar -xvzf file.tar.gz path/to/file |
