2. 环境准备:Linux基础命令回顾、Python3环境安装、pip与虚拟环境配置

说实话,日志分析这件事,环境没搭好,后面全是坑。我见过太多人一上来就写代码,结果连文件都找不到、权限报错、Python版本冲突……折腾半天,正事儿一点没干。

这一章,咱们把地基打牢。别嫌基础,你想想看,后面几十章都要站在这个环境上跑。

2.1 Linux基础命令回顾

日志分析的主战场,99% 是 Linux 服务器。Windows?也有,但咱们这课主要讲 Linux。我自己的习惯是,不管用什么发行版,先把这几个命令刻在脑子里。

2.1.1 文件与目录操作

你拿到一份日志,第一件事是什么?找到它、看它、筛它。这几个命令就够了:

命令 用途 我常用的参数
ls 列出目录内容 -lh 看大小,-t 按时间排序
cd 切换目录 没有参数就是回 home
pwd 显示当前路径 迷路时救命用的
cat 查看小文件 日志太大别用,会卡死终端
less 分页查看大文件 Shift+G 跳到最后,/ 搜索关键词
head / tail 看头/看尾 tail -f 实时跟踪日志,调试神器
grep 文本搜索 -i 忽略大小写,-v 反向匹配,-E 正则
wc 统计行数/字数 wc -l 看日志有多少行
我的小习惯: 每次排查问题,我都是 tail -f 加 grep 组合。开两个终端,一个看实时流,一个筛关键词。效率翻倍。

2.1.2 权限与进程管理

日志文件经常有权限问题。你写了个脚本,一跑发现 Permission denied,那叫一个憋屈。

  • chmod +x script.py —— 给脚本加执行权限。我经常忘,后来养成了写完脚本顺手 chmod +x 的习惯。
  • chown user:group file —— 改文件所有者。部署日志采集 agent 时经常用到。
  • ps aux | grep python —— 看 Python 进程有没有在跑。排查脚本是否卡死时必用。
  • kill -9 PID —— 强制杀进程。嗯,慎用,但有时候真管用。
注意: kill -9 是最后手段。它会直接干掉进程,不给任何清理机会。我曾经在生产环境上误杀了一个日志采集进程,导致丢了几分钟数据……从那以后,我都是先 kill -15 试试。

2.1.3 文本处理三剑客

日志分析,说白了就是文本处理。这三个工具,你越用越觉得香。

  • grep:搜索。比如 grep "ERROR" app.log,一秒找出所有错误行。
  • awk:按列处理。比如 awk '{print $1, $4}',只取时间戳和 IP。
  • sed:替换与编辑。比如 sed 's/old/new/g',批量替换日志中的敏感信息。

举个例子,你想统计日志里每种错误级别出现了多少次:

grep -oP '\[(INFO|WARN|ERROR|DEBUG)\]' app.log | sort | uniq -c | sort -rn

这一行命令,就能给你一张错误分布表。我在一次线上故障排查中,就是用这行命令,30 秒定位到是某个模块疯狂刷 WARN 导致磁盘写满。

2.2 Python3 环境安装

好,命令熟悉了,接下来装 Python。现在都 2025 年了,别再用 Python 2 了。我建议统一用 Python 3.8+。

2.2.1 检查系统是否已安装

先看看系统里有没有:

python3 --version
# 或者
python --version

如果输出类似 Python 3.9.7,那就省事了。如果没装,或者版本太低,咱们手动装。

2.2.2 在 Ubuntu/Debian 上安装

sudo apt update
sudo apt install python3 python3-pip python3-venv -y

这三行,一次搞定 Python3、pip 和虚拟环境模块。我建议你一次性装全,省得后面缺东西。

2.2.3 在 CentOS/RHEL 上安装

sudo yum install -y epel-release
sudo yum install -y python3 python3-pip

CentOS 默认源里的 Python 版本可能比较老。如果你需要最新版,可以考虑用源码编译,或者加个 deadsnakes PPA(Ubuntu)或 IUS 仓库(CentOS)。

避坑指南: 我曾经在 CentOS 7 上直接用 yum 装 Python 3.6,结果发现很多新库不支持。后来老老实实编译安装了 Python 3.9。如果你也遇到类似问题,别慌,编译安装其实不复杂。

2.2.4 验证安装

python3 --version
pip3 --version

看到版本号输出,就说明装好了。

2.3 pip 与虚拟环境配置

Python 的包管理,核心就两个东西:pip 和 虚拟环境。我见过太多人直接在系统全局装包,结果项目一多,依赖全乱套了。

2.3.1 pip 基础用法

pip 是 Python 的包管理器。说白了,就是帮你下载、安装、管理第三方库的工具。

命令 说明
pip install 包名 安装包
pip install 包名==版本号 安装指定版本
pip list 列出已安装的包
pip freeze 输出当前环境的包清单(常用于生成 requirements.txt)
pip uninstall 包名 卸载包

举个例子,咱们后面要用 pandas 和 matplotlib 做日志数据分析和可视化:

pip install pandas matplotlib

这样就把两个库装到当前环境了。但注意,如果你没激活虚拟环境,它会装到系统全局。我不推荐这么做。

2.3.2 虚拟环境:为什么需要它?

你想想看,你同时做两个项目:一个用 Django 3.2,一个用 Django 4.0。如果都装在系统全局,肯定冲突。虚拟环境就是给每个项目一个独立的 Python 解释器和包目录,互不干扰。

我个人的习惯是:每个项目,一个虚拟环境。哪怕只是个几十行的小脚本,我也建个虚拟环境。习惯了就不觉得麻烦。

2.3.3 创建与使用虚拟环境

Python 3.3+ 自带 venv 模块,不需要额外安装。

# 创建虚拟环境(在项目目录下执行)
python3 -m venv venv

# 激活虚拟环境(Linux/Mac)
source venv/bin/activate

# 激活虚拟环境(Windows)
venv\Scripts\activate

# 退出虚拟环境
deactivate

激活后,你会发现终端前面多了个 (venv) 前缀。这时候你再 pip install,所有包都会装到这个虚拟环境里,不会污染系统。

我的工作流: 每次开始一个新项目,我都是:
1. mkdir project_name && cd project_name
2. python3 -m venv venv
3. source venv/bin/activate
4. pip install 需要的库
5. pip freeze > requirements.txt
这样,换台机器,只要 pip install -r requirements.txt,环境就一模一样。

2.3.4 使用 requirements.txt 管理依赖

这是团队协作和部署时的标准做法。把你的依赖写进文件,别人一装就好。

# 生成 requirements.txt
pip freeze > requirements.txt

# 从 requirements.txt 安装
pip install -r requirements.txt

文件内容大概长这样:

pandas==1.5.3
matplotlib==3.7.1
requests==2.28.2

版本号锁死,避免「在我机器上能跑」的尴尬。

注意: 不要把 pip freeze 的输出直接扔进生产环境。它会把所有依赖(包括依赖的依赖)都列出来。建议手动整理,只保留顶层依赖。比如你用了 pandas,它底层依赖 numpy,你只需要写 pandas,pip 会自动装 numpy。

2.4 本章知识体系总览

下面这张图,把咱们这一章的核心逻辑串起来了。你可以把它当个地图,后面忘了哪个环节,回来瞄一眼就行。

环境准备知识体系 环境准备知识体系 Linux 基础命令 Python3 环境安装 pip 与虚拟环境 文件操作 权限管理 文本处理 检查版本 apt/yum 安装 源码编译 pip 安装/卸载 venv 创建 requirements.txt 核心原则:每个项目一个虚拟环境,依赖用 requirements.txt 锁定版本

嗯,环境准备这块,咱们就聊到这儿。你跟着把 Linux 命令过一遍,Python3 装好,虚拟环境配起来,后面写代码、跑脚本就顺了。别急,慢慢来,每一步都踩实了,后面才能跑得快。