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

参数速记表

参数含义记法
-xextract(解包)extract
-ccreate(创建包)create
-zgzip(压缩/解压)gzip
-ffile(指定文件名)file
-tlist(列出内容)list
-vverbose(显示过程)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 是 Linux 版的 unzip
  • ls ← 找到 .tar.gz 文件的位置
  • cd ← 进入目标目录
  • wget ← 下载 .tar.gz 文件

同层(文件操作工具集)

  • unzip ← .zip ↔ .tar.gz,两种格式都要会

下游(解包之后)

  • find ← 找到解包出来的文件
  • chmod ← 给解包的可执行程序设权限

进阶理解

  • apt ← apt 的 .deb 包底层就是 tar 格式包裹起来的

节点版本:v1.0 · 2026-04-20 下一个节点建议:findchmod