第20课:tar、gzip、bzip2 压缩与归档
1. 学习目标
完成本课学习后,你将能够:
- 理解并区分 “归档”与“压缩”两个概念。
- 熟练使用
tar命令 创建、查看、解压归档文件(tar 包)。 - 掌握 结合
gzip和bzip2对归档文件进行压缩和解压。 - 运用 常用选项(如排除文件、增量备份)处理实际运维任务。
- 理解 不同压缩工具的特性,并能根据需求做出合理选择。
2. 核心概念
2.1 归档与压缩:打包与装箱
想象一下搬家:
- 归档:就是把散落在书架、桌子、抽屉里的所有书(文件/目录)收集起来,打包进一个行李箱(tar 包)。行李箱本身只是把东西集中在一起,并不改变它们的体积。
- 压缩:就是对打包好的行李箱进行 抽真空处理,尽可能减小其占用的空间。
gzip和bzip2就是不同的“抽真空”工具。
2.2 tar 命令:归档大师
tar (Tape Archive) 是 Linux 下最核心的归档工具,它可以将多个文件和目录打包成一个单独的文件。
- 核心思路:
tar [选项] [目标文件名] [要打包的源文件或目录] - 关键记忆法:
-c创建(create),-x解压(extract),-t查看(list),-v显示过程(verbose),-f指定文件名(file)。
2.3 gzip 与 bzip2:压缩工具
gzip:使用.gz扩展名,压缩速度快,但压缩率相对较低。是系统中最常见的压缩格式之一。bzip2:使用.bz2扩展名,压缩率通常高于gzip,但压缩和解压速度较慢。适合对存储空间敏感的场景。- 最佳实践:通常不单独使用它们,而是与
tar结合,生成tar.gz或tar.bz2文件,这也是更常见的“压缩包”形式。
3. 代码示例
准备工作: 创建一个用于练习的目录结构。
mkdir my_project
cd my_project
touch file1.txt file2.txt
mkdir docs && touch docs/README.md
3.1 创建与查看 tar 包
# 1. 创建一个tar归档包(仅打包,不压缩)
# 将当前目录下的 file1.txt, file2.txt, docs目录 打包成 project.tar
tar -cvf project.tar file1.txt file2.txt docs/
# 2. 查看tar包内的内容(不解压)
tar -tvf project.tar
3.2 使用 gzip 和 bzip2 压缩
# 1. 创建一个.tar.gz压缩包 (常用方式)
# `z` 选项表示使用 gzip
tar -czvf project.tar.gz file1.txt file2.txt docs/
# 2. 创建一个.tar.bz2压缩包
# `j` 选项表示使用 bzip2
tar -cjvf project.tar.bz2 file1.txt file2.txt docs/
# 3. 查看压缩包内容(同样使用对应的z或j选项)
tar -tzvf project.tar.gz
3.3 解压缩归档文件
# 1. 解压.tar.gz 文件到当前目录
tar -xzvf project.tar.gz
# 2. 解压.tar.bz2 文件到指定目录(-C 选项)
mkdir extracted_files
tar -xjvf project.tar.bz2 -C extracted_files/
# 3. 解压普通的.tar文件
tar -xvf project.tar
3.4 高级技巧
# 1. 排除特定文件或目录进行打包(例如,排除所有.log文件)
tar -czvf backup.tar.gz --exclude='*.log' /path/to/source
# 2. 增量备份(示例:基于快照文件 `snapshot.file`)
# 创建基准备份
tar -czvf backup-full.tar.gz -g snapshot.file /home/user/documents
# 创建增量备份(只备份自上次备份以来修改过的文件)
tar -czvf backup-incremental.tar.gz -g snapshot.file /home/user/documents
4. 实践练习
练习1:基础打包压缩
- 在你的家目录 (
~) 下,创建三个文件:memo.txt,report.txt,data.csv。 - 使用
tar和gzip,将这三个文件打包压缩成my_files.tar.gz。 - 不解压,查看
my_files.tar.gz内包含哪些文件。 - 将
my_files.tar.gz解压到一个新创建的目录~/archive_test中。
练习2:排除与增量备份
- 创建一个目录
~/website,在其中放入一些文件,并创建一个名为temp.log的文件。 - 使用
tar和bzip2,对~/website目录进行打包压缩,但在过程中排除temp.log文件。压缩包命名为website_backup.tar.bz2。 - 验证
temp.log是否被成功排除。
练习3:命令组合挑战
- 编写一条命令,将
/var/log/syslog(如果存在) 这个文件,使用gzip压缩,并将压缩后的文件保存为/tmp/syslog_backup.gz。- 提示:这里可以不用
tar,直接用gzip命令。
- 提示:这里可以不用
- 编写一条命令,查找当前目录下所有
.txt文件,将它们打包压缩成textfiles.tar.gz。- 提示:使用
find命令的输出作为tar的输入。
- 提示:使用
5. 常见错误
- 选项顺序与连写:
tar -zcvf file.tar.gz是正确的。tar -cvzf file.tar.gz也是对的(选项顺序不敏感)。但tar -czvf file.tar.gz中的f必须是最后一个选项,因为它后面紧跟着文件名。这是一个容易混淆的规则。 - 路径问题:在归档时使用相对路径(如
tar -cvf ../backup.tar ./data)会导致解压时文件直接释放到当前目录,可能造成文件覆盖。建议在源目录的父目录下操作,并使用相对路径,或使用-C选项在解压时指定目录。 - 忘记
f后面跟文件名:输入tar -czv myarchive.tar.gz后系统会等待输入,因为它没找到f指定的文件名参数。正确写法:tar -czvf myarchive.tar.gz ... - 混淆压缩与归档:试图用
tar命令直接解压一个.gz文件(gzip生成的),这通常会失败。应使用gzip -d或gunzip命令。tar的z或j选项是专门用来处理其自身归档文件的压缩层。 - 压缩失败后残留文件:使用
gzip file.txt压缩成功后,原文件file.txt会被删除并生成file.txt.gz。如果压缩中断或失败,可能只留下损坏的.gz文件。建议重要数据先备份或使用tar一次性打包压缩。
6. 小结
本课我们深入学习了 Linux 下最经典的文件打包与压缩工具链:
- 核心概念:归档 (
tar) 是“打包”,压缩 (gzip/bzip2) 是“减体积”。 tar命令:掌握-c(创建),-x(解压),-t(查看),-v(详细),-f(文件) 这五个核心选项是基础。-z(gzip) 和-j(bzip2) 是处理压缩格式的钥匙。- 工具选择:
gzip速度快、通用性强;bzip2压缩率更高、速度较慢。tar.gz是兼顾速度与压缩率的常见格式。 - 高级用法:
--exclude排除文件,-C指定解压目录,-g实现增量备份,能让你在运维中更加得心应手。 - 实践第一:多动手操作,理解选项间的组合,才能避免常见错误,真正掌握这些强大工具的使用。
请务必完成实践练习,下一课我们将学习如何使用 df 和 du 命令查看磁盘空间使用情况。
练习编辑器
rust
Loading...