tar · Linux 打包机
上游:unzip(先学 .zip,再学 Linux 原生格式)· ls(查看 .tar.gz 文件) 下游:find(找到解包的文件)· chmod(解包后设权限)· wget(下载 .tar.gz) 参见:apt(apt 的软件包底层就是 .tar.gz 格式)
一句话是什么
tar 是 Linux 的原生打包工具——把很多文件打成一个包,
或者解开一个包。.tar.gz 是 Linux 世界最常见的压缩格式。
为什么需要它
.zip 是 Windows 发明的,.tar.gz 是 Linux 的老家格式。
在 Linux 世界,几乎所有软件的源代码、服务器程序都是 .tar.gz 格式:
python-3.12.tar.gz
nginx-1.26.tar.gz
node-v20.tar.gz
.tar.gz 其实是两步:
tar = 把多个文件打成一个包(像把很多东西装进一个箱子)
gz = 用 gzip 压缩(像把箱子用真空袋压扁)
所以 tar 既能打包,也能解包,还能顺便压缩。
核心用法
解包(最常用)
# 解压 .tar.gz 文件
tar -xzf 文件.tar.gz
# 解压到指定目录
tar -xzf 文件.tar.gz -C ~/目标目录/
# 先看看里面有什么(不解压)
tar -tzf 文件.tar.gz打包(备份时用)
# 把目录打包成 .tar.gz
tar -czf 备份.tar.gz 目录/
# 把多个文件打包
tar -czf 备份.tar.gz 文件1 文件2 文件3参数速记表
| 参数 | 含义 | 记法 |
|---|---|---|
-x | extract(解包) | extract |
-c | create(创建包) | create |
-z | gzip(压缩/解压) | gzip |
-f | file(指定文件名) | file |
-t | list(列出内容) | list |
-v | verbose(显示过程) | verbose |
-C | 指定目标目录 | Change directory |
记忆口诀
解包:tar -xzf → "x 是解,z 是 gz,f 是文件"
打包:tar -czf → "c 是创建,z 是压缩,f 是文件"
查看:tar -tzf → "t 是列表"
Linux 笑话
tar 是 Linux 用户公认最难记参数的命令之一。
网上有一个著名的漫画:
新手查 Google:"how to extract tar file"
结果:tar -xvzf file.tar.gz
新手查 Google:"how to create tar file"
结果:tar -cvzf file.tar.gz dir/
新手查 Google:"tar man page"
结果:看到 40 页密密麻麻的参数,当场放弃
Linux 社区有一个梗:
“We all know the tar command, we just google it every single time.”
(我们都”会”用 tar,只是每次都要谷歌一遍。)
例题精讲
📗 初探 Starter — 解压一个软件包
任务:下载 Python 源代码包(小文件),解压看看里面是什么。
# 第一步:创建一个测试 .tar.gz 练手
mkdir -p ~/练习/tar-test/原始
echo "文件A内容" > ~/练习/tar-test/原始/fileA.txt
echo "文件B内容" > ~/练习/tar-test/原始/fileB.txt
# 打包
tar -czf ~/练习/tar-test/测试包.tar.gz -C ~/练习/tar-test/ 原始/
# 第二步:先看看里面有什么(不解压)
tar -tzf ~/练习/tar-test/测试包.tar.gz
# 输出:
# 原始/
# 原始/fileA.txt
# 原始/fileB.txt
# 第三步:解压到新目录
mkdir -p ~/练习/tar-test/解压结果
tar -xzf ~/练习/tar-test/测试包.tar.gz -C ~/练习/tar-test/解压结果/
# 第四步:确认
ls ~/练习/tar-test/解压结果/
# 原始/你学到了什么:-t 先看,-x 再解,-C 指定目录。
📘 应用 User — 备份学习笔记
任务:把自己的学习基地打成一个备份包,方便发给爸爸。
# 第一步:查看学习基地大小
du -sh ~/学习基地/
# 示例:4.0M 学习基地/
# 第二步:打成 tar.gz 备份包(文件名包含日期)
tar -czf ~/备份-学习基地-$(date +%Y%m%d).tar.gz ~/学习基地/
# 确认备份文件存在
ls -lh ~/备份-学习基地-*.tar.gz
# -rw-r--r-- 1 aaron aaron 1.2M Apr 20 备份-学习基地-20260420.tar.gz
# 第三步:验证备份内容(不解压,只查看)
tar -tzf ~/备份-学习基地-20260420.tar.gz | head -10
# 第四步:测试恢复(解压到临时目录)
mkdir -p /tmp/恢复测试
tar -xzf ~/备份-学习基地-20260420.tar.gz -C /tmp/恢复测试/
ls /tmp/恢复测试/你学到了什么:$(date +%Y%m%d) 是 shell 命令替换,
自动把当前日期插入文件名——备份文件名里有日期,以后找起来方便。
📙 管理 Admin — 安装从官网下载的软件
任务:从官网下载一个 .tar.gz 格式的软件,解压并安装。
# 以 Node.js 为例(LTS 版本)
# 下载(用 wget 或 curl)
wget https://nodejs.org/dist/v20.11.0/node-v20.11.0-linux-x64.tar.gz
# 第一步:看看压缩包里有什么
tar -tzf node-v20.11.0-linux-x64.tar.gz | head -5
# node-v20.11.0-linux-x64/
# node-v20.11.0-linux-x64/bin/
# node-v20.11.0-linux-x64/bin/node
# node-v20.11.0-linux-x64/bin/npm
# 第二步:解压到 /usr/local/(系统软件目录)
sudo tar -xzf node-v20.11.0-linux-x64.tar.gz -C /usr/local/ --strip-components=1
# --strip-components=1 = 去掉外层目录名
# 不用 --strip,解压出来是 /usr/local/node-v20.11.0-linux-x64/bin/node
# 用了 --strip-components=1,解压出来是 /usr/local/bin/node ← 更整洁
# 第三步:验证
node --version
# v20.11.0你学到了什么:--strip-components=1 是个高级技巧,
去掉压缩包外层的目录名,直接把内容解压到目标位置。
官方文档参考
man tar # 完整手册
tar --help # 快速选项列表
tar= Tape ARchive;打包(-c)和解包(-x)是两个独立动作,-z追加 gzip 压缩。 在线:https://manpages.ubuntu.com/tar
节点链接
上游(先会这些,再来学 tar)
同层(文件操作工具集)
- unzip ← .zip ↔ .tar.gz,两种格式都要会
下游(解包之后)
进阶理解
- apt ← apt 的 .deb 包底层就是 tar 格式包裹起来的