学习目标

  • 理解本节涉及的核心主题:Linux 基本命令、查找与搜索、grep - 搜索文本中的模式、总结。
  • 掌握重点命令或工具:greptargzipbzip2
  • 能够结合示例完成常见操作,并理解关键参数、使用场景与结果差异。
  • 能够识别本节相关的常见风险、易错点或排查思路。

学习重点

  • 主题范围:Linux 基本命令、查找与搜索、grep - 搜索文本中的模式、总结、文件压缩与解压、tar - 打包与解包文件
  • 重点命令:greptargzipbzip2
  • 学习重点:命令用途、关键参数、典型场景、与相近命令的区别
  • 复习方式:先理解场景,再动手练习,最后对照结果检查

Linux 基本命令

查找与搜索

grep - 搜索文本中的模式

grep 是一个强大的文本搜索工具,用于在文件或输入流中查找符合特定模式的行。它支持简单的文本匹配和复杂的正则表达式,常用于日志分析、代码审查等场景。

基本用法

命令语法:

grep [选项] 模式 [文件...]

示例:在 example.txt 中查找包含 "Error" 的行

假设 logs/system.log 文件内容如下:

2024-01-01 10:00:00 INFO Starting system.
2024-01-01 10:05:00 ERROR Failed to connect to database.
2024-01-01 10:10:00 INFO User 'alice' logged in.
2024-01-01 10:15:00 WARNING Disk space running low.
2024-01-01 10:20:00 ERROR Unable to open file.

命令:

grep "ERROR" /home/user/logs/system.log

输出:

2024-01-01 10:05:00 ERROR Failed to connect to database.
2024-01-01 10:20:00 ERROR Unable to open file.
常用选项
  • -i:忽略大小写
  • -r:递归搜索
  • -v:反向匹配(显示不匹配的行)
  • -n:显示行号

示例 1:忽略大小写搜索 "error"

grep -i "error" /home/user/logs/system.log

输出:

2024-01-01 10:05:00 ERROR Failed to connect to database.
2024-01-01 10:20:00 ERROR Unable to open file.

示例 2:递归搜索所有 .log 文件中包含 "WARNING" 的行

grep -r "WARNING" /home/user/logs/

输出:

/home/user/logs/system.log:2024-01-01 10:15:00 WARNING Disk space running low.

示例 3:显示不包含 "INFO" 的行,并显示行号

grep -v -n "INFO" /home/user/logs/system.log

输出:

2:2024-01-01 10:05:00 ERROR Failed to connect to database.
4:2024-01-01 10:15:00 WARNING Disk space running low.
5:2024-01-01 10:20:00 ERROR Unable to open file.
正则表达式与高级用法

grep 支持使用正则表达式进行复杂的模式匹配,可以匹配多种文本模式。

示例 1:匹配以 "User" 开头的行

grep "^User" /home/user/logs/system.log

输出:

2024-01-01 10:10:00 INFO User 'alice' logged in.

示例 2:匹配包含数字的行

grep "[0-9]" /home/user/logs/system.log

输出:

2024-01-01 10:00:00 INFO Starting system.
2024-01-01 10:05:00 ERROR Failed to connect to database.
2024-01-01 10:10:00 INFO User 'alice' logged in.
2024-01-01 10:15:00 WARNING Disk space running low.
2024-01-01 10:20:00 ERROR Unable to open file.

示例 3:匹配包含 "Error" 或 "Warning" 的行

grep -E "Error|Warning" /home/user/logs/system.log

输出:

2024-01-01 10:05:00 ERROR Failed to connect to database.
2024-01-01 10:15:00 WARNING Disk space running low.
2024-01-01 10:20:00 ERROR Unable to open file.
管道与结合使用

grep 常与其他命令结合使用,通过管道传递数据,实现复杂的数据处理。

示例 1:查找当前目录及子目录中所有 .py 文件中包含 "import" 的行

grep "import" $(find /home/user/projects -type f -name "*.py")

示例 2:实时监控日志文件中包含 "ERROR" 的新日志

结合 tail -f 使用:

tail -f /home/user/logs/system.log | grep "ERROR"

说明:

  • tail -f 持续输出 system.log 文件的新内容。
  • grep "ERROR" 过滤出包含 "ERROR" 的行,实时显示错误日志。

示例 3:统计 README.md 文件中包含 "Linux" 的行数

grep "Linux" /home/user/projects/project_alpha/README.md | wc -l

输出:

3

说明:

  • grep "Linux" README.md 查找包含 "Linux" 的行。
  • wc -l 统计匹配行的数量。

总结

掌握查找与搜索命令是高效进行系统管理和文件处理的基础。以下是基于假设目录结构和文件的具体应用总结:

  • find:适用于在复杂目录结构中按多种条件查找文件。
    • 查找

      /home/user/documents
      

      中所有

      .docx
      

      文件:

      find /home/user/documents -type f -name "*.docx"
      
    • 查找

      /home/user/projects
      

      中最近 3 天内修改过的文件并删除:

      find /home/user/projects -type f -mtime -3 -exec rm {} \;
      
  • locate:适合需要快速查找文件路径,尤其在已知部分文件名时。
    • 快速查找所有包含 "project" 的目录:

      locate project
      
    • 查找所有

      .css
      

      文件(在更新数据库后):

      sudo updatedb
      locate "*.css"
      
  • grep:用于在文件内容中搜索特定模式,适用于日志分析、代码审查等。
    • logs/error.log
      

      中查找所有 "Timeout" 错误:

      grep "Timeout" /home/user/logs/error.log
      
    • 递归搜索

      /home/user/projects
      

      目录中所有

      .js
      

      文件中的 "function" 关键字,并显示行号:

      grep -r -n "function" /home/user/projects -type f -name "*.js"
      

文件压缩与解压

在文件管理和系统维护中,文件压缩与解压是常见且重要的操作。它们不仅可以节省存储空间,还能方便文件的传输与备份。Unix/Linux 提供了多种压缩与解压工具,如 targzipbzip2zipunzip 等。为了更直观地理解这些工具的使用,假设我们有以下的目录结构和文件内容:

假设的目录结构

/home/user/
├── documents/
│   ├── report.docx
│   ├── summary.txt
│   ├── data.csv
│   └── old_reports/
│       ├── report_2020.docx
│       └── report_2021.docx
├── downloads/
│   ├── setup.exe
│   ├── movie.mkv
│   └── archive.zip
├── projects/
│   ├── project_alpha/
│   │   ├── main.py
│   │   ├── utils.py
│   │   └── README.md
│   └── project_beta/
│       ├── app.js
│       ├── index.html
│       └── styles.css
└── logs/
    ├── system.log
    ├── error.log
    └── access.log

以下将详细介绍常用的文件压缩与解压工具及其使用方法,并通过具体示例说明如何在上述目录结构中应用这些工具。

tar - 打包与解包文件

tar(tape archive 的缩写)是一个用于打包多个文件和目录为一个单一文件的工具,常与压缩工具结合使用以减少存储空间。

基本用法

命令语法:

tar [选项] [归档文件] [文件/目录...]

常用选项:

  • -c:创建新的归档文件。
  • -x:解开归档文件。
  • -v:显示操作过程(verbose)。
  • -f:指定归档文件的名称。
  • -z:通过 gzip 进行压缩。
  • -j:通过 bzip2 进行压缩。
创建压缩包与解压缩包

示例场景:/home/user/projects/project_alpha 目录打包为 project_alpha.tar.gz

创建压缩包:

tar -czvf project_alpha.tar.gz /home/user/projects/project_alpha

解释:

  • -c:创建新的归档文件。
  • -z:使用 gzip 压缩。
  • -v:显示详细过程。
  • -f project_alpha.tar.gz:指定归档文件名。

输出示例:

/home/user/projects/project_alpha/
/home/user/projects/project_alpha/main.py
/home/user/projects/project_alpha/utils.py
/home/user/projects/project_alpha/README.md

解压缩包:

project_alpha.tar.gz 解压到当前目录。

tar -xzvf project_alpha.tar.gz

解释:

  • -x:解开归档文件。
  • -z:通过 gzip 解压。
  • -v:显示详细过程。
  • -f project_alpha.tar.gz:指定要解压的归档文件。

输出示例:

/home/user/projects/project_alpha/
/home/user/projects/project_alpha/main.py
/home/user/projects/project_alpha/utils.py
/home/user/projects/project_alpha/README.md
常用选项(如 -c, -x, -v, -f, -z, -j

创建不压缩的归档文件:

tar -cvf documents.tar /home/user/documents

创建使用 bzip2 压缩的归档文件:

tar -cjvf documents.tar.bz2 /home/user/documents

解压使用 bzip2 压缩的归档文件:

tar -xjvf documents.tar.bz2
与其他压缩工具结合使用

tar 常与 gzipbzip2 结合使用,以实现高效的压缩和解压。

示例: 仅打包不压缩:

tar -cvf backup.tar /home/user/logs

示例: 使用 gzip 压缩:

tar -czvf backup.tar.gz /home/user/logs

示例: 使用 bzip2 压缩:

tar -cjvf backup.tar.bz2 /home/user/logs

示例: 解压不同类型的压缩包:

tar -xvf backup.tar

tar -xzvf backup.tar.gz

tar -xjvf backup.tar.bz2
示例操作

示例 1:备份 documents 目录

tar -czvf documents_backup.tar.gz /home/user/documents

示例 2:查看归档文件内容

tar -tzvf documents_backup.tar.gz

输出示例:

/home/user/documents/
/home/user/documents/report.docx
/home/user/documents/summary.txt
/home/user/documents/data.csv
/home/user/documents/old_reports/
/home/user/documents/old_reports/report_2020.docx
/home/user/documents/old_reports/report_2021.docx

示例 3:从归档文件中提取特定文件

提取 report_2020.docx

tar -xzvf documents_backup.tar.gz -C /home/user/restore documents/old_reports/report_2020.docx

解释:

  • -C /home/user/restore:指定解压到的目标目录。

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

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 通常能提供更高的压缩比,适合需要最大限度压缩的场景。
  • 支持多线程(通过 pbzip2 等工具):提高压缩和解压速度。

缺点:

  • 较慢的压缩和解压速度:相比 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 提供了更小的压缩文件,但压缩时间更长。


本节总结

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

复习建议

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