20·文件管理进阶

tar、gzip、bzip2 压缩与归档

targziparchive

第20课:tar、gzip、bzip2 压缩与归档

1. 学习目标

完成本课学习后,你将能够:

  • 理解并区分 “归档”与“压缩”两个概念。
  • 熟练使用 tar 命令 创建、查看、解压归档文件(tar 包)。
  • 掌握 结合 gzipbzip2 对归档文件进行压缩和解压。
  • 运用 常用选项(如排除文件、增量备份)处理实际运维任务。
  • 理解 不同压缩工具的特性,并能根据需求做出合理选择。

2. 核心概念

2.1 归档与压缩:打包与装箱

想象一下搬家:

  • 归档:就是把散落在书架、桌子、抽屉里的所有书(文件/目录)收集起来,打包进一个行李箱(tar 包)。行李箱本身只是把东西集中在一起,并不改变它们的体积。
  • 压缩:就是对打包好的行李箱进行 抽真空处理,尽可能减小其占用的空间。gzipbzip2 就是不同的“抽真空”工具。

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.gztar.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:基础打包压缩

  1. 在你的家目录 (~) 下,创建三个文件:memo.txt, report.txt, data.csv
  2. 使用 targzip,将这三个文件打包压缩成 my_files.tar.gz
  3. 不解压,查看 my_files.tar.gz 内包含哪些文件。
  4. my_files.tar.gz 解压到一个新创建的目录 ~/archive_test 中。

练习2:排除与增量备份

  1. 创建一个目录 ~/website,在其中放入一些文件,并创建一个名为 temp.log 的文件。
  2. 使用 tarbzip2,对 ~/website 目录进行打包压缩,但在过程中排除 temp.log 文件。压缩包命名为 website_backup.tar.bz2
  3. 验证 temp.log 是否被成功排除。

练习3:命令组合挑战

  1. 编写一条命令,将 /var/log/syslog (如果存在) 这个文件,使用 gzip 压缩,并将压缩后的文件保存为 /tmp/syslog_backup.gz
    • 提示:这里可以不用tar,直接用gzip命令。
  2. 编写一条命令,查找当前目录下所有 .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 -dgunzip 命令。tarzj 选项是专门用来处理其自身归档文件的压缩层。
  • 压缩失败后残留文件:使用 gzip file.txt 压缩成功后,原文件 file.txt 会被删除并生成 file.txt.gz。如果压缩中断或失败,可能只留下损坏的 .gz 文件。建议重要数据先备份或使用 tar 一次性打包压缩。

6. 小结

本课我们深入学习了 Linux 下最经典的文件打包与压缩工具链:

  1. 核心概念:归档 (tar) 是“打包”,压缩 (gzip/bzip2) 是“减体积”。
  2. tar 命令:掌握 -c(创建), -x(解压), -t(查看), -v(详细), -f(文件) 这五个核心选项是基础。-z(gzip) 和 -j(bzip2) 是处理压缩格式的钥匙。
  3. 工具选择gzip 速度快、通用性强;bzip2 压缩率更高、速度较慢。tar.gz 是兼顾速度与压缩率的常见格式。
  4. 高级用法--exclude 排除文件,-C 指定解压目录,-g 实现增量备份,能让你在运维中更加得心应手。
  5. 实践第一:多动手操作,理解选项间的组合,才能避免常见错误,真正掌握这些强大工具的使用。

请务必完成实践练习,下一课我们将学习如何使用 dfdu 命令查看磁盘空间使用情况。

练习编辑器

rust
Loading...

继续学习

完成本课后,建议继续学习下一课「df 与 du 磁盘使用查看」 以巩固所学知识。