学习目标

  • 理解本节涉及的核心主题:Linux 基本命令、文件压缩与解压、zip - 创建压缩文件、unzip - 解压缩 ZIP 文件。
  • 掌握重点命令或工具:zipunzipgzipbzip2
  • 能够结合示例完成常见操作,并理解关键参数、使用场景与结果差异。
  • 能够识别本节相关的常见风险、易错点或排查思路。

学习重点

  • 主题范围:Linux 基本命令、文件压缩与解压、zip - 创建压缩文件、unzip - 解压缩 ZIP 文件、gzip - 压缩文件、bzip2 - 高效压缩工具
  • 重点命令:zipunzipgzipbzip2
  • 学习重点:命令用途、关键参数、典型场景、与相近命令的区别
  • 复习方式:先理解场景,再动手练习,最后对照结果检查

Linux 基本命令

文件压缩与解压

zip - 创建压缩文件

zip 是一种广泛使用的压缩格式,支持压缩多个文件和目录,并提供密码保护功能。

基本用法

命令语法:

zip [选项] 压缩包名 文件/目录...

示例:report.docxsummary.txt 压缩为 documents.zip

zip documents.zip /home/user/documents/report.docx /home/user/documents/summary.txt

输出示例:

adding: /home/user/documents/report.docx (stored 0%)
adding: /home/user/documents/summary.txt (stored 0%)
压缩多个文件与目录

示例场景: 将整个 projects 目录及其子目录压缩为 projects.zip

zip -r projects.zip /home/user/projects

解释:

  • -r:递归压缩目录及其子目录。
  • projects.zip:目标压缩包名称。
  • /home/user/projects:要压缩的目录。

输出示例:

  adding: /home/user/projects/project_alpha/ (stored 0%)
  adding: /home/user/projects/project_alpha/main.py (deflated 60%)
  adding: /home/user/projects/project_alpha/utils.py (deflated 55%)
  adding: /home/user/projects/project_alpha/README.md (deflated 50%)
  adding: /home/user/projects/project_beta/ (stored 0%)
  adding: /home/user/projects/project_beta/app.js (deflated 65%)
  adding: /home/user/projects/project_beta/index.html (deflated 70%)
  adding: /home/user/projects/project_beta/styles.css (deflated 75%)
常用选项(如 -r, -e
  • -r:递归压缩目录及其子目录。
  • -e:启用密码保护,需要在命令执行后输入密码。
  • -q:静默模式,减少输出信息。
  • -9:最高压缩级别。

示例 1:创建带密码保护的压缩包

zip -e secure_backup.zip /home/user/documents/summary.txt /home/user/documents/data.csv

操作过程:

系统会提示输入并确认密码。

示例 2:使用最高压缩级别压缩文件

zip -9 optimized.zip /home/user/downloads/movie.mkv

示例 3:静默压缩

zip -rq silent_backup.zip /home/user/logs

输出示例:

无输出,压缩过程在后台进行。

示例操作

示例 1:压缩 logs 目录并启用密码保护

zip -re logs_backup.zip /home/user/logs

操作过程:

系统提示输入密码并确认:

Enter password:
Verify password:

输出示例:

adding: /home/user/logs/system.log (deflated 40%)
adding: /home/user/logs/error.log (deflated 50%)
adding: /home/user/logs/access.log (deflated 35%)

示例 2:压缩多个文件和目录

zip -r full_backup.zip /home/user/documents /home/user/projects /home/user/logs

输出示例:

  adding: /home/user/documents/ (stored 0%)
  adding: /home/user/documents/report.docx (deflated 20%)
  adding: /home/user/documents/summary.txt (deflated 15%)
  adding: /home/user/documents/data.csv (deflated 25%)
  adding: /home/user/documents/old_reports/ (stored 0%)
  adding: /home/user/documents/old_reports/report_2020.docx (deflated 18%)
  adding: /home/user/documents/old_reports/report_2021.docx (deflated 22%)
  adding: /home/user/projects/ (stored 0%)
  adding: /home/user/projects/project_alpha/ (stored 0%)
  adding: /home/user/projects/project_alpha/main.py (deflated 30%)
  adding: /home/user/projects/project_alpha/utils.py (deflated 28%)
  adding: /home/user/projects/project_alpha/README.md (deflated 35%)
  adding: /home/user/projects/project_beta/ (stored 0%)
  adding: /home/user/projects/project_beta/app.js (deflated 32%)
  adding: /home/user/projects/project_beta/index.html (deflated 40%)
  adding: /home/user/projects/project_beta/styles.css (deflated 45%)
  adding: /home/user/logs/ (stored 0%)
  adding: /home/user/logs/system.log (deflated 40%)
  adding: /home/user/logs/error.log (deflated 50%)
  adding: /home/user/logs/access.log (deflated 35%)

unzip - 解压缩 ZIP 文件

unzip 是用于解压缩 .zip 文件的工具,支持解压整个压缩包或其中的部分文件。

基本用法

命令语法:

unzip [选项] 压缩包名

示例: 解压 documents.zip 到当前目录。

unzip documents.zip

输出示例:

Archive:  documents.zip
  inflating: report.docx
  inflating: summary.txt
常用选项(如 -d, -l
  • -d:指定解压缩到的目标目录。
  • -l:列出压缩包内容而不解压。
  • -o:覆盖现有文件而不提示。
  • -n:不覆盖现有文件,跳过。
  • -j:解压缩时不保留目录结构。

示例 1:将压缩包解压到指定目录

unzip projects.zip -d /home/user/restore_projects

输出示例:

Archive:  projects.zip
   creating: /home/user/restore_projects/projects/
   creating: /home/user/restore_projects/projects/project_alpha/
  inflating: /home/user/restore_projects/projects/project_alpha/main.py
  inflating: /home/user/restore_projects/projects/project_alpha/utils.py
  inflating: /home/user/restore_projects/projects/project_alpha/README.md
   creating: /home/user/restore_projects/projects/project_beta/
  inflating: /home/user/restore_projects/projects/project_beta/app.js
  inflating: /home/user/restore_projects/projects/project_beta/index.html
  inflating: /home/user/restore_projects/projects/project_beta/styles.css

示例 2:列出压缩包内容

unzip -l full_backup.zip

输出示例:

Archive:  full_backup.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
      1024  2024-04-27 10:00   documents/report.docx
       512  2024-04-27 10:01   documents/summary.txt
      2048  2024-04-27 10:02   documents/data.csv
      1024  2024-04-27 10:03   documents/old_reports/report_2020.docx
      1024  2024-04-27 10:04   documents/old_reports/report_2021.docx
      4096  2024-04-27 10:05   projects/project_alpha/main.py
      4096  2024-04-27 10:06   projects/project_alpha/utils.py
       256  2024-04-27 10:07   projects/project_alpha/README.md
      4096  2024-04-27 10:08   projects/project_beta/app.js
      2048  2024-04-27 10:09   projects/project_beta/index.html
      1024  2024-04-27 10:10   projects/project_beta/styles.css
---------                     -------
     15360                     12 files
解压部分文件

示例场景: 仅解压 README.md 文件。

unzip projects.zip projects/project_alpha/README.md -d /home/user/restore_projects

输出示例:

  inflating: /home/user/restore_projects/projects/project_alpha/README.md

解释:

  • 仅解压指定的 README.md 文件到目标目录。
示例操作

示例 1:解压带密码保护的压缩包

假设 secure_backup.zip 使用密码保护。

unzip secure_backup.zip

操作过程:

系统提示输入密码:

Archive:  secure_backup.zip
[secure_backup.zip] documents/summary.txt password:

输入正确密码后,开始解压。

示例 2:解压时覆盖现有文件

unzip -o documents.zip

解释:

  • -o:覆盖现有文件而不提示。

输出示例:

inflating: report.docx
inflating: summary.txt

示例 3:解压时不保留目录结构

假设压缩包中包含多个目录结构,但只希望将所有文件解压到单一目录。

unzip -j archive.zip -d /home/user/flat_directory

解释:

  • -j:不保留目录结构。
  • -d /home/user/flat_directory:指定目标目录。

输出示例:

inflating: report.docx
inflating: summary.txt
inflating: data.csv
inflating: report_2020.docx
inflating: report_2021.docx

所有文件将被解压到 /home/user/flat_directory,不包含原有的目录层次。

gzip - 压缩文件

gzip 是一个常用的文件压缩工具,适用于压缩单个文件,通常与 tar 结合使用以压缩整个目录。

基本用法

命令语法:

gzip [选项] [文件...]

示例: 压缩单个文件 summary.txt

gzip /home/user/documents/summary.txt

操作结果:

  • summary.txt 被压缩为 summary.txt.gz
  • 原文件 summary.txt 被删除(除非使用保留选项)。
压缩与解压缩

压缩文件:

gzip /home/user/documents/data.csv

输出:

  • 生成 data.csv.gz
  • 删除原文件 data.csv

保留原文件:

使用 -k 选项保留原文件。

gzip -k /home/user/documents/data.csv

解压缩文件:

gzip -d /home/user/documents/data.csv.gz

或使用 gunzip 命令:

gunzip /home/user/documents/data.csv.gz

输出:

  • 恢复 data.csv
  • 删除压缩文件 data.csv.gz
常用选项(如 -d, -k
  • -d:解压缩文件。
  • -k:保留原文件。
  • -c:将输出写到标准输出,不删除原文件。
  • -r:递归处理目录中的文件。

示例 1:递归压缩 projects 目录中的所有 .txt 文件

gzip -r /home/user/projects/*.txt

解释:

  • -r:递归处理目录中的文件。
  • 此命令将压缩所有 .txt 文件为 .txt.gz

示例 2:将 report.docx 压缩并保留原文件

gzip -k /home/user/documents/report.docx

输出:

  • 生成 report.docx.gz
  • 保留原文件 report.docx
示例操作

示例 1:压缩 logs 目录中的所有日志文件

gzip /home/user/logs/*.log

操作结果:

  • 生成 system.log.gzerror.log.gzaccess.log.gz
  • 删除原文件 system.logerror.logaccess.log

示例 2:解压缩 data.csv.gz 并保留压缩文件

gzip -dk /home/user/documents/data.csv.gz

输出:

  • 恢复 data.csv
  • 保留压缩文件 data.csv.gz

bzip2 - 高效压缩工具

bzip2 是一种高效的压缩工具,相比 gzip,它通常能提供更高的压缩比,但压缩和解压速度较慢。

基本用法

命令语法:

bzip2 [选项] [文件...]

示例: 压缩文件 data.csv

bzip2 /home/user/documents/data.csv

操作结果:

  • 生成 data.csv.bz2
  • 删除原文件 data.csv
压缩与解压缩

压缩文件:

bzip2 /home/user/documents/report.docx

输出:

  • 生成 report.docx.bz2
  • 删除原文件 report.docx

保留原文件:

使用 -k 选项保留原文件。

bzip2 -k /home/user/documents/report.docx

解压缩文件:

bzip2 -d /home/user/documents/report.docx.bz2

或使用 bunzip2 命令:

bunzip2 /home/user/documents/report.docx.bz2

输出:

  • 恢复 report.docx
  • 删除压缩文件 report.docx.bz2
优缺点比较

优点:

  • 更高的压缩比:相比 gzipbzip2 能提供更小的压缩文件,适合需要最大限度压缩的场景。
  • 适用于大型文件:对于需要长时间存储的大型文件,bzip2 更为高效。

缺点:

  • 较慢的压缩和解压速度:相比 gzipbzip2 的速度较慢,可能不适合需要快速处理的场景。
  • 较高的资源消耗:在压缩和解压过程中,占用更多的内存和 CPU 资源。

示例对比:

压缩同一文件使用 gzipbzip2 的大小比较。

gzip -c /home/user/documents/data.csv > data.csv.gz

bzip2 -c /home/user/documents/data.csv > data.csv.bz2

检查文件大小:

ls -lh data.csv.gz data.csv.bz2

输出示例:

-rw-r--r-- 1 user user  1.2M Apr 27 10:00 data.csv.gz
-rw-r--r-- 1 user user  900K Apr 27 10:01 data.csv.bz2

bzip2 提供了更小的压缩文件,但压缩时间更长。

示例操作

示例 1:压缩 projects 目录中的所有 .docx 文件

bzip2 /home/user/documents/*.docx

操作结果:

  • 生成 report.docx.bz2report_2020.docx.bz2report_2021.docx.bz2
  • 删除原文件 report.docxreport_2020.docxreport_2021.docx

示例 2:解压缩 report.docx.bz2 并保留压缩文件

bzip2 -dk /home/user/documents/report.docx.bz2

输出:

  • 恢复 report.docx
  • 保留压缩文件 report.docx.bz2

zip - 创建压缩文件

zip 是一种广泛使用的压缩格式,支持压缩多个文件和目录,并提供密码保护功能。

基本用法

命令语法:

zip [选项] 压缩包名 文件/目录...

示例:report.docxsummary.txt 压缩为 documents.zip

zip documents.zip /home/user/documents/report.docx /home/user/documents/summary.txt

输出示例:

  adding: /home/user/documents/report.docx (stored 0%)
  adding: /home/user/documents/summary.txt (stored 0%)
压缩多个文件与目录

示例场景: 将整个 projects 目录及其子目录压缩为 projects.zip

zip -r projects.zip /home/user/projects

解释:

  • -r:递归压缩目录及其子目录。
  • projects.zip:目标压缩包名称。
  • /home/user/projects:要压缩的目录。

输出示例:

  adding: /home/user/projects/project_alpha/ (stored 0%)
  adding: /home/user/projects/project_alpha/main.py (deflated 60%)
  adding: /home/user/projects/project_alpha/utils.py (deflated 55%)
  adding: /home/user/projects/project_alpha/README.md (deflated 50%)
  adding: /home/user/projects/project_beta/ (stored 0%)
  adding: /home/user/projects/project_beta/app.js (deflated 65%)
  adding: /home/user/projects/project_beta/index.html (deflated 70%)
  adding: /home/user/projects/project_beta/styles.css (deflated 75%)
常用选项(如 -r, -e
  • -r:递归压缩目录及其子目录。
  • -e:启用密码保护,需要在命令执行后输入密码。
  • -9:最高压缩级别。
  • -q:静默模式,减少输出信息.

示例 1:创建带密码保护的压缩包

zip -e secure_backup.zip /home/user/documents/summary.txt /home/user/documents/data.csv

操作过程:

系统会提示输入并确认密码。

示例 2:使用最高压缩级别压缩文件

zip -9 optimized.zip /home/user/downloads/movie.mkv

示例 3:静默压缩

zip -rq silent_backup.zip /home/user/logs

输出示例:

无输出,压缩过程在后台进行。

示例操作

示例 1:压缩 logs 目录并启用密码保护

zip -re logs_backup.zip /home/user/logs

操作过程:

系统提示输入密码并确认:

Enter password:
Verify password:

输出示例:

  adding: /home/user/logs/system.log (deflated 40%)
  adding: /home/user/logs/error.log (deflated 50%)
  adding: /home/user/logs/access.log (deflated 35%)

示例 2:压缩多个文件和目录

zip -r full_backup.zip /home/user/documents /home/user/projects /home/user/logs

输出示例:

  adding: /home/user/documents/ (stored 0%)
  adding: /home/user/documents/report.docx (deflated 20%)
  adding: /home/user/documents/summary.txt (deflated 15%)
  adding: /home/user/documents/data.csv (deflated 25%)
  adding: /home/user/documents/old_reports/ (stored 0%)
  adding: /home/user/documents/old_reports/report_2020.docx (deflated 18%)
  adding: /home/user/documents/old_reports/report_2021.docx (deflated 22%)
  adding: /home/user/projects/ (stored 0%)
  adding: /home/user/projects/project_alpha/ (stored 0%)
  adding: /home/user/projects/project_alpha/main.py (deflated 30%)
  adding: /home/user/projects/project_alpha/utils.py (deflated 28%)
  adding: /home/user/projects/project_alpha/README.md (deflated 35%)
  adding: /home/user/projects/project_beta/ (stored 0%)
  adding: /home/user/projects/project_beta/app.js (deflated 32%)
  adding: /home/user/projects/project_beta/index.html (deflated 40%)
  adding: /home/user/projects/project_beta/styles.css (deflated 45%)
  adding: /home/user/logs/ (stored 0%)
  adding: /home/user/logs/system.log (deflated 40%)
  adding: /home/user/logs/error.log (deflated 50%)
  adding: /home/user/logs/access.log (deflated 35%)

本节总结

  • 本节主要围绕 Linux 基本命令、文件压缩与解压、zip - 创建压缩文件、unzip - 解压缩 ZIP 文件、gzip - 压缩文件 展开。
  • 需要重点掌握的命令或工具包括:zipunzipgzipbzip2
  • 学习时应优先抓住「命令解决什么问题、在什么场景下使用、执行后会产生什么结果」。
  • 对涉及权限、覆盖、网络、系统服务、删除或安全配置的操作,建议先在测试环境练习。

复习建议

  • 先用自己的话复述本节每个主题或命令的作用,避免只记参数不懂用途。
  • 按原文示例至少手敲一遍典型命令,并观察输出变化。
  • 对高风险操作先确认路径、权限和目标对象,再执行实际命令。
  • 可优先复习这些高频命令:zipunzipgzipbzip2