讲解
先分清两件事:tar 负责「打包」——把一堆文件和目录合并成一个 .tar 归档文件,本身不压缩;gzip 负责「压缩」单个文件。两者合体就是 Linux 世界最常见的 .tar.gz(也简写 .tgz):先打包再压缩。现代 tar 内置了压缩选项,一条命令搞定。
四个核心操作记口诀:创建 c、解开 x、查看 t、指定文件 f。tar -czf backup.tar.gz docs/ 把 docs/ 打包压缩成 backup.tar.gz(z 表示走 gzip);tar -xzf backup.tar.gz 解压到当前目录;tar -tzf backup.tar.gz 只看内容不解压——解压陌生压缩包之前先 t 一眼是好习惯,避免文件散落到不想放的地方。加 -C 目录 可以指定解开到哪里。f 后面必须紧跟文件名,所以习惯把 f 放在选项串最后。
单独的 gzip 用法也简单:gzip file 把 file 压成 file.gz 并删除原文件,gunzip file.gz 还原。gzip 一次只处理一个文件,所以想压目录就得先 tar 打包。其他常见格式:.tar.bz2 用 j 选项(压缩率高但慢)、.tar.xz 用 J、.zip 用 zip/unzip 命令。日常 90% 的场景 .tar.gz 就够了。
示例
# 打包压缩 docs 和 projects 两个目录
tar -czf backup.tar.gz docs projects
ls -lh backup.tar.gz
# 不解压,先看看包里有什么
tar -tzf backup.tar.gz
# 解压到指定目录
mkdir -p restore
tar -xzf backup.tar.gz -C restore
ls restore
# gzip 单文件:压缩后原文件消失,gunzip 还原
cp hello.txt hello-copy.txt
gzip hello-copy.txt
ls hello-copy.txt.gz
gunzip hello-copy.txt.gz
ls hello-copy.txt
常见坑
- f 不在选项串最后:tar -fcz backup.tar.gz docs 会把 c 当成文件名报错。记住 f 永远压轴。
- 解压先不查看:直接 -xzf 一个陌生压缩包,文件可能散落当前目录或覆盖同名文件。先 -tzf 看清单。
- 以为 tar 本身能压缩:tar 只打包,压缩靠 z(gzip)/j(bzip2)/J(xz)选项调用外部算法。
- 绝对路径警告:tar 打包 /etc 这类绝对路径时会自动剥掉开头的 / 并提示,这是保护行为,解压时不会覆盖系统目录。
小结
c 创建、x 解开、t 查看、f 指定文件、z 走 gzip;-C 指定目标目录;gzip/gunzip 处理单文件。下一节走出本机:ssh 与 scp。