grep
是 Linux 运维工作中最常用的命令之一,在实际运维场景中 grep 应用广泛,涵盖日志分析、系统监控、故障排查等多个方面。
一、基本语法
grep [选项] 模式 [文件...]
二、常用选项
选项 | 说明 |
---|---|
-i | 忽略大小写 |
-v | 反向匹配,显示不包含模式的行 |
-n | 显示匹配行的行号 |
-c | 只显示匹配行的计数 |
-l | 只显示包含匹配项的文件名 |
-q | 静默输出 |
-o | 仅显示匹配的部分 |
-r 或 -R | 递归搜索目录 |
-E | 使用扩展正则表达式 (等同于egrep) |
-F | 不使用正则表达式,按字面意思匹配 (等同于fgrep) |
-A num | 显示匹配行及其后num行 |
-B num | 显示匹配行及其前num行 |
-C num | 显示匹配行及其前后各num行 |
三、日志分析与监控
1、实时监控日志文件
# 实时监控 Nginx 访问日志中的 500 错误
[root@lichu ~]# tail -f /var/log/nginx/access.log | grep " 500 "
2、分析时间段内的日志
# 分析上午9点的日志
[root@lichu ~]# grep "14/Aug/2025:09" /var/log/nginx/access.log
四、系统监控与检查
1、检查网络连接
# 统计各IP的连接数
[root@lichu ~]# netstat -ntu |awk '/^tcp|^udp)/ {print $5}' |cut -d: -f1 |sort |uniq -c |sort -nr
2、检查磁盘使用
# 检查磁盘空间不足的分区
[root@lichu ~]# df -h | grep -E "[8-9][0-9]%|100%"
五、配置文件检查
1、检查无效配置
# 检查Nginx无效配置(注释和空行除外)
[root@lichu ~]# grep -vE "^#|^$" /etc/nginx/nginx.conf
[root@lichu ~]# grep -vE "^.*#|^$" /etc/nginx/nginx.conf
2、检查服务配置
# 检查所有启用的服务
[root@lichu ~]# systemctl list-unit-files | grep enabled
六、综合案例
1、分析网站访问情况
# 统计访问量最高的10个IP
[root@lichu ~]# grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b" /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -10
106 139.0.0.0
62 93.123.109.245
17 91.234.6.206
17 149.102.254.28
15 91.224.92.17
12 125.0.0.0
11 170.64.210.68
9 45.156.128.149
9 130.0.0.0
7 45.156.128.148
# 统计访问量最高的10个URL
[root@lichu ~]# awk '{print $7}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -10
136 /
53 /wp-admin/setup-config.php
53 /wordpress/wp-admin/setup-config.php
23 /favicon.ico
23 400
6 /.env
4 /.git/config
4 /cmd_sco
2 /shell?cd+/tmp;rm+-rf+*;wget+
2 mstshash=Administr"
2、查找系统异常
# 查找系统关键日志中的异常(结合多个日志文件)
[root@lichu ~]# grep -i -r "error\|fail\|critical\|exception\|denied\|refused\|timeout" /var/log/{messages,syslog,dmesg,secure}
3、检查SSH登录尝试
# 检查失败的SSH登录尝试
grep "Failed password" /var/log/secure| awk '{print $11}' | sort | uniq -c | sort -nr
# 检查成功登录的IP
grep "Accepted password" /var/log/secure | awk '{print $11}' | sort | uniq