一、日志深度分析:从海量日志中快速找 “问题线索”
系统日志(比如/var/log/syslog
)就像 “黑匣子”,出问题时(比如服务启动失败、登录异常),里面藏着答案。今天学 3 个实用技巧,从日志里 “挖线索”。
1. 按时间范围筛选日志(找 “某个时间段的异常”)
场景:比如你发现 “今天上午 10 点到 11 点之间,SSH 登录总失败”,想只看这段时间的auth.log
(安全日志)。
命令公式:用grep
结合日期关键词筛选(日志里的时间格式一般是 “月 日 时:分: 秒”,比如 “Jul 12 10:30:22”)。
实操步骤:
假设要找 “7 月 12 日 10 点到 11 点的 SSH 登录日志”:
bash
# 查看/var/log/auth.log中,7月12日10点(10:00-10:59)的记录
grep "Jul 12 10:" /var/log/auth.log
- 解释:
grep "Jul 12 10:"
:筛选包含 “7 月 12 日 10 点” 的行(日志里的时间格式固定,直接按这个搜);- 输出结果会只显示这段时间的日志,避免被其他时间的记录干扰。
2. 统计 “错误出现的次数”(判断问题是否频繁)
场景:日志里有很多 “Failed password”(密码错误),想知道 “今天到底失败了多少次”,判断是不是有人恶意尝试登录。
命令公式:用grep
筛选错误关键词,再用wc -l
统计行数(一行代表一次错误)。
实操步骤:
统计auth.log
中 “今天的密码错误次数”:
bash
# 先筛选今天的日志(假设今天是7月12日),再统计错误次数
grep "Jul 12" /var/log/auth.log | grep "Failed password" | wc -l
- 逐句解释:
grep "Jul 12" /var/log/auth.log
:先捞出今天的所有安全日志;| grep "Failed password"
:从今天的日志里,再捞出包含 “密码错误” 的行(| 是 “管道”,把前一步结果传给后一步);| wc -l
:统计最终筛选出的行数(即错误次数)。
3. 跟踪 “特定服务的日志”(比如找 “SSH 服务启动失败的原因”)
场景:SSH 服务启动失败(sudo systemctl start ssh
提示错误),想从日志里看 “到底哪里错了”。
实操步骤:
用grep
筛选包含 “ssh” 关键词的日志(SSH 服务的日志会带 “sshd” 标识):
bash
# 从系统日志syslog中找SSH相关的记录
grep "sshd" /var/log/syslog
# 如果想实时看SSH的日志(比如启动服务时监控)
tail -f /var/log/syslog | grep "sshd" # 实时跟踪并筛选ssh相关日志
- 举例:
如果输出里有 “Address already in use”(地址已被占用),说明 22 端口被其他程序占用,导致 SSH 启动失败 —— 这就是解决问题的关键线索!
二、软件源码安装:安装 “包管理工具没有的特殊软件”
之前学的apt install
是 “点外卖”(方便但菜品固定),今天学 “自己买菜做饭”—— 源码安装:从软件官网下载源码,手动编译安装,适合安装 “最新版本” 或 “apt 没有的软件”(比如某个小众工具)。
1. 源码安装的 4 个固定步骤(记这四步就够了)
任何源码安装都逃不过这四步:下载源码→解压→配置→编译安装,就像 “买菜→拆包装→准备食材→炒菜”。
2. 实操:源码安装 “tree 工具”(显示目录树结构,apt 也有,但用它练手)
步骤 1:下载源码包(从官网找,这里用示例链接)
bash
cd ~/linux_study # 到学习目录操作,不乱
# 下载tree的源码包(如果链接失效,百度“tree源码下载”找最新的)
wget http://mama.indstate.edu/users/ice/tree/src/tree-2.1.1.tgz
wget
:“下载文件” 的命令(如果没有,先sudo apt install wget
);- 执行后,目录里会多一个
tree-2.1.1.tgz
压缩包。
步骤 2:解压源码包(拆包装)
bash
tar -zxvf tree-2.1.1.tgz # 解压tgz压缩包
cd tree-2.1.1 # 进入解压后的目录(里面是源码文件)
步骤 3:配置(准备食材,检查系统环境)
bash
./configure # 配置编译参数(生成Makefile,指导后续编译)
- 这一步会检查系统是否有 “编译工具”(比如 gcc),如果提示 “command not found”,安装缺少的工具:
bash
sudo apt install gcc make # 安装编译必需的工具(输入密码后按y)
安装后再重新执行./configure
,直到显示 “configuration done”(配置完成)。
步骤 4:编译并安装(炒菜 + 装盘)
bash
make # 编译源码(把人类能看懂的代码翻译成机器能懂的二进制文件)
sudo make install # 安装到系统(把编译好的文件放到/usr/bin等目录,让系统能找到)
步骤 5:验证安装成功
输入tree
命令,会显示当前目录的树状结构(说明安装成功):
bash
tree # 试试!会以树形显示目录里的文件
卸载方法:如果想删除源码安装的软件,在源码目录执行:
bash
sudo make uninstall # 卸载(比apt remove麻烦,但必须会)
三、防火墙规则细化:给 “防盗门” 加 “精准门禁”
之前学的ufw allow 22/tcp
是 “允许所有人访问 22 端口”(像 “家门对所有人开放”),今天学 “只允许特定 IP 访问某端口”(像 “只让家人刷脸进门”),更安全。
1. 防火墙规则的 “优先级”(先拒绝后允许,更安全)
防火墙规则遵循 “先匹配的规则生效”,推荐设置 “默认拒绝所有”,再手动允许需要的规则(就像 “默认锁门,只给信任的人钥匙”)。
2. 实操 1:只允许 “你的 IP” 访问 SSH 端口(22)
场景:防止别人随便尝试登录你的服务器,只让你自己的电脑(比如 IP 是192.168.1.101
)通过 SSH 连接。
步骤 1:先设置默认规则(默认拒绝所有入站连接)
bash
sudo ufw default deny incoming # 默认拒绝所有外部访问
sudo ufw default allow outgoing # 默认允许本机访问外部(不影响你上网)
步骤 2:允许 “你的 IP” 访问 22 端口(SSH)
bash
# 替换192.168.1.101为你的实际IP(比如你电脑的IP)
sudo ufw allow from 192.168.1.101 to any port 22/tcp
- 解释:
from 你的IP
表示 “只允许这个 IP”,to any port 22
表示 “访问任意 IP 的 22 端口”(这里的 “任意 IP” 指你的服务器自己)。
步骤 3:启用防火墙并查看规则
bash
sudo ufw enable # 启用规则(如果之前禁用了)
sudo ufw status numbered # 查看带编号的规则(方便后续修改)
- 输出会显示类似:
[ 1] 22/tcp ALLOW IN 192.168.1.101
(规则生效)。
3. 实操 2:删除错误的规则(规则写错了怎么办)
如果刚才的 IP 填错了,用编号删除:
bash
sudo ufw delete 1 # 删除编号1的规则(根据status numbered的结果填编号)
今日必练实操清单(15 分钟完成)
-
日志分析:
- 用
grep "Jul 12" /var/log/syslog | grep "error"
(替换成今天的日期),统计系统日志里的错误次数。
- 用
-
源码安装:
- 按步骤源码安装 “tree 工具”,成功后用
tree ~/linux_study
查看目录树,再用sudo make uninstall
卸载(练手)。
- 按步骤源码安装 “tree 工具”,成功后用
-
防火墙细化:
- 设置 “只允许本机(127.0.0.1)访问 80 端口”(模拟 “只让自己访问网页服务”),命令:
sudo ufw allow from 127.0.0.1 to any port 80/tcp
,用ufw status
确认规则生效。
- 设置 “只允许本机(127.0.0.1)访问 80 端口”(模拟 “只让自己访问网页服务”),命令:
今日总结(3 句话记住核心)
- 日志分析:
grep "时间/关键词" 日志文件 | wc -l
→ 按时间 / 关键词筛日志,统计问题次数,快速找线索。 - 源码安装:
wget下载→tar解压→./configure配置→make编译→sudo make install
→ 四步安装 apt 没有的软件,像 “自己做饭”。 - 防火墙细化:
sudo ufw allow from 特定IP to any port 端口
→ 只让信任的 IP 访问特定端口,比 “允许所有人” 更安全。