本文档风哥主要介绍Linux系统中grep命令的使用方法,包括文本搜索、过滤、正则表达式匹配等,结合RHEL LINUX 10系统环境,提供详细的命令示例和输出结果,适合Linux运维人员在学习和生产环境中使用。更多视频教程www.fgedu.net.cn
参考Red Hat Enterprise Linux 10官方文档中的System administration章节
Part01-基础概念与理论知识
1.1 grep命令的基本概念
grep命令是Linux系统中最强大的文本搜索工具之一,用于在文件中搜索匹配指定模式的行。grep支持基本正则表达式(BRE)和扩展正则表达式(ERE),可以搜索文件内容、过滤命令输出、查找日志信息等。grep是Global Regular Expression Print的缩写,是Linux运维人员必须掌握的核心命令。
- 支持正则表达式
- 可以搜索多个文件
- 支持递归搜索目录
- 可以显示行号
- 支持反向匹配
- 支持颜色高亮
1.2 grep命令的语法格式
grep命令的基本语法格式如下:
grep [选项] 模式 [文件…]
# 语法说明:
# 模式:要搜索的文本模式或正则表达式
# 文件:要搜索的文件名,可以指定多个文件
# 如果不指定文件,则从标准输入读取
1.3 grep命令的常用参数
grep命令的常用参数如下:
# -i, –ignore-case
# 忽略大小写
grep -i “error” /var/log/messages
# -v, –invert-match
# 反向匹配(显示不匹配的行)
grep -v “DEBUG” /var/log/app.log
# -n, –line-number
# 显示行号
grep -n “error” /var/log/messages
# -c, –count
# 只显示匹配的行数
grep -c “error” /var/log/messages
# -l, –files-with-matches
# 只显示包含匹配内容的文件名
grep -l “error” /var/log/*.log
# -L, –files-without-match
# 只显示不包含匹配内容的文件名
grep -L “error” /var/log/*.log
# -r, –recursive
# 递归搜索目录
grep -r “error” /var/log/
# -R, –dereference-recursive
# 递归搜索目录,跟随符号链接
grep -R “error” /var/log/
# -w, –word-regexp
# 匹配整个单词
grep -w “error” /var/log/messages
# -x, –line-regexp
# 匹配整行
grep -x “error” /var/log/messages
# -A N, –after-context=N
# 显示匹配行后N行
grep -A 5 “error” /var/log/messages
# -B N, –before-context=N
# 显示匹配行前N行
grep -B 5 “error” /var/log/messages
# -C N, –context=N
# 显示匹配行前后各N行
grep -C 5 “error” /var/log/messages
# -E, –extended-regexp
# 使用扩展正则表达式
grep -E “error|warning” /var/log/messages
# -F, –fixed-strings
# 将模式视为固定字符串
grep -F “error*” /var/log/messages
# -P, –perl-regexp
# 使用Perl正则表达式
grep -P “\d{3}-\d{4}” /var/log/messages
# –color=WHEN
# 高亮显示匹配内容
grep –color=auto “error” /var/log/messages
# -e PATTERN, –regexp=PATTERN
# 指定多个模式
grep -e “error” -e “warning” /var/log/messages
# -f FILE, –file=FILE
# 从文件读取模式
grep -f patterns.txt /var/log/messages
# -q, –quiet, –silent
# 静默模式,不输出任何内容
grep -q “error” /var/log/messages
# -s, –no-messages
# 不显示错误信息
grep -s “error” /nonexistent
# -o, –only-matching
# 只显示匹配的部分
grep -o “[0-9]\+” /var/log/messages
# -m N, –max-count=N
# 最多显示N个匹配
grep -m 10 “error” /var/log/messages
Part02-生产环境规划与建议
2.1 grep命令使用场景规划
在生产环境中,grep命令主要用于以下场景:
# 1. 日志分析场景
# – 搜索错误日志
# – 搜索特定时间段的日志
# – 搜索特定IP地址的访问记录
# – 搜索特定用户的操作记录
# 2. 配置文件搜索场景
# – 搜索配置项
# – 搜索注释行
# – 搜索空行
# – 搜索特定参数
# 3. 代码搜索场景
# – 搜索函数定义
# – 搜索变量使用
# – 搜索特定字符串
# – 搜索TODO标记
# 4. 系统管理场景
# – 搜索进程信息
# – 搜索用户信息
# – 搜索网络连接
# – 搜索文件内容
2.2 grep命令安全使用建议
在生产环境中使用grep命令时,需要注意以下安全建议: from LinuxDBA视频:www.itpux.com
- 搜索敏感文件时注意权限控制
- 避免搜索密码等敏感信息
- 递归搜索时注意目录范围
- 大文件搜索时注意性能影响
- 使用正则表达式时注意转义
- 搜索结果过多时使用管道分页
2.3 grep命令最佳实践
grep命令在生产环境中的最佳实践:
# 1. 搜索时显示行号和颜色
# grep -n –color=auto “error” /var/log/messages
# 2. 搜索时忽略大小写
# grep -i “error” /var/log/messages
# 3. 搜索多个模式
# grep -E “error|warning|critical” /var/log/messages
# 4. 搜索时显示上下文
# grep -C 3 “error” /var/log/messages
# 5. 递归搜索目录
# grep -r “TODO” /path/to/project/
# 6. 搜索时排除特定文件
# grep -r –exclude=”*.log” “error” /var/log/
# 7. 搜索时排除特定目录
# grep -r –exclude-dir=”.git” “TODO” /path/to/project/
# 8. 搜索压缩文件
# zgrep “error” /var/log/app.log.gz
Part03-生产环境项目实施方案
3.1 基本搜索操作
grep命令在RHEL LINUX 10系统中的基本搜索操作示例:
# 1. 搜索文件中的关键字
# grep “error” /var/log/messages
Apr 2 10:00:01 server01 kernel: error: [UFW BLOCK] IN=eth0 OUT=
Apr 2 10:00:05 server01 systemd[1]: error: Starting Daily apt download activities…
# 2. 显示行号
# grep -n “error” /var/log/messages
123:Apr 2 10:00:01 server01 kernel: error: [UFW BLOCK] IN=eth0 OUT=
456:Apr 2 10:00:05 server01 systemd[1]: error: Starting Daily apt download activities…
# 3. 忽略大小写
# grep -i “ERROR” /var/log/messages
Apr 2 10:00:01 server01 kernel: error: [UFW BLOCK] IN=eth0 OUT=
Apr 2 10:00:05 server01 systemd[1]: error: Starting Daily apt download activities…
# 4. 反向匹配
# grep -v “DEBUG” /var/log/app.log
2026-04-02 10:00:01 INFO [main] Application starting…
2026-04-02 10:00:02 WARN [main] Configuration file not found
# 5. 统计匹配行数
# grep -c “error” /var/log/messages
15
# 6. 只显示文件名
# grep -l “error” /var/log/*.log
/var/log/messages
/var/log/syslog
/var/log/app.log
# 7. 显示匹配内容前N行
# grep -B 2 “error” /var/log/messages
Apr 2 09:58:00 server01 kernel: [UFW ALLOW] IN=eth0 OUT=
Apr 2 09:59:00 server01 kernel: [UFW ALLOW] IN=eth0 OUT=
Apr 2 10:00:01 server01 kernel: error: [UFW BLOCK] IN=eth0 OUT=
# 8. 显示匹配内容后N行
# grep -A 2 “error” /var/log/messages
Apr 2 10:00:01 server01 kernel: error: [UFW BLOCK] IN=eth0 OUT=
Apr 2 10:00:02 server01 systemd[1]: Started Session 123 of user root.
Apr 2 10:00:03 server01 sshd[12345]: Accepted publickey for root
# 9. 显示匹配内容前后各N行
# grep -C 2 “error” /var/log/messages
Apr 2 09:59:00 server01 kernel: [UFW ALLOW] IN=eth0 OUT=
Apr 2 10:00:00 server01 kernel: [UFW ALLOW] IN=eth0 OUT=
Apr 2 10:00:01 server01 kernel: error: [UFW BLOCK] IN=eth0 OUT=
Apr 2 10:00:02 server01 systemd[1]: Started Session 123 of user root.
Apr 2 10:00:03 server01 sshd[12345]: Accepted publickey for root
# 10. 匹配整个单词
# grep -w “error” /var/log/messages
Apr 2 10:00:01 server01 kernel: error: [UFW BLOCK] IN=eth0 OUT=
(不匹配errors、error_log等)
# 11. 高亮显示匹配内容
# grep –color=auto “error” /var/log/messages
Apr 2 10:00:01 server01 kernel: error: [UFW BLOCK] IN=eth0 OUT=
(error会高亮显示)
# 12. 只显示匹配的部分
# grep -o “[0-9]\+” /var/log/messages
10
00
01
10
00
05
3.2 正则表达式搜索
使用正则表达式进行高级搜索:
# 1. 搜索以特定字符串开头的行
# grep “^error” /var/log/messages
error: [UFW BLOCK] IN=eth0 OUT=
# 2. 搜索以特定字符串结尾的行
# grep “failed$” /var/log/messages
Apr 2 10:00:01 server01 kernel: Connection failed
# 3. 搜索包含数字的行
# grep “[0-9]” /var/log/messages
Apr 2 10:00:01 server01 kernel: error: [UFW BLOCK] IN=eth0 OUT=
# 4. 搜索IP地址
# grep -E “[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}” /var/log/messages
Apr 2 10:00:01 server01 kernel: error: from 192.168.1.100
# 5. 搜索邮箱地址
# grep -E “[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}” /var/log/app.log
2026-04-02 10:00:01 INFO User admin@fgedu.net logged in
# 6. 搜索日期格式
# grep -E “[0-9]{4}-[0-9]{2}-[0-9]{2}” /var/log/app.log
2026-04-02 10:00:01 INFO Application started
# 7. 搜索时间格式
# grep -E “[0-9]{2}:[0-9]{2}:[0-9]{2}” /var/log/app.log
2026-04-02 10:00:01 INFO Application started
# 8. 搜索空行
# grep “^$” /etc/app.conf
(显示所有空行)
# 9. 搜索非空行
# grep -v “^$” /etc/app.conf
(显示所有非空行)
# 10. 搜索注释行
# grep “^#” /etc/app.conf
# This is a comment
# Another comment
# 11. 搜索非注释行
# grep -v “^#” /etc/app.conf
key1=value1
key2=value2
# 12. 搜索多个模式(或)
# grep -E “error|warning|critical” /var/log/messages
Apr 2 10:00:01 server01 kernel: error: [UFW BLOCK] IN=eth0 OUT=
Apr 2 10:00:02 server01 kernel: warning: Low disk space
Apr 2 10:00:03 server01 kernel: critical: Out of memory
# 13. 搜索特定长度的行
# grep -E “^.{80,}$” /var/log/messages
(显示长度至少80个字符的行)
# 14. 搜索重复字符
# grep -E “a{2,}” /var/log/messages
(显示包含至少2个连续a的行)
# 15. 搜索单词边界
# grep -E “\berror\b” /var/log/messages
(只匹配单词error,不匹配errors、error_log等)
3.3 高级用法实战
grep命令的高级用法和技巧:
# 1. 递归搜索目录
# grep -r “TODO” /path/to/project/
/path/to/project/main.py: # TODO: Implement error handling
/path/to/project/utils.py: # TODO: Add documentation
# 2. 递归搜索并显示文件名和行号
# grep -rn “TODO” /path/to/project/
/path/to/project/main.py:10: # TODO: Implement error handling
/path/to/project/utils.py:25: # TODO: Add documentation
# 3. 搜索时排除特定文件
# grep -r –exclude=”*.log” “error” /var/log/
/var/log/messages:Apr 2 10:00:01 server01 kernel: error: [UFW BLOCK]
# 4. 搜索时排除特定目录
# grep -r –exclude-dir=”.git” “TODO” /path/to/project/
# 5. 搜索多个文件类型
# grep -r –include=”*.py” –include=”*.sh” “TODO” /path/to/project/
# 6. 从文件读取搜索模式
# cat > patterns.txt << EOF
error
warning
critical
EOF
# grep -f patterns.txt /var/log/messages
Apr 2 10:00:01 server01 kernel: error: [UFW BLOCK] IN=eth0 OUT=
Apr 2 10:00:02 server01 kernel: warning: Low disk space
Apr 2 10:00:03 server01 kernel: critical: Out of memory
# 7. 搜索压缩文件
# zgrep "error" /var/log/app.log.gz
2026-04-01 10:00:01 ERROR Database connection failed
# 8. 搜索二进制文件
# grep -a "error" /usr/bin/app
(将二进制文件视为文本文件搜索)
# 9. 搜索时显示匹配次数
# grep -c "error" /var/log/*.log
/var/log/messages:15
/var/log/syslog:10
/var/log/app.log:5
# 10. 搜索并统计
# grep "error" /var/log/messages | wc -l
15
# 11. 搜索并排序
# grep "error" /var/log/messages | sort
Apr 2 10:00:01 server01 kernel: error: [UFW BLOCK] IN=eth0 OUT=
Apr 2 10:00:05 server01 systemd[1]: error: Starting Daily apt download activities...
# 12. 搜索并去重
# grep "error" /var/log/messages | sort | uniq
Apr 2 10:00:01 server01 kernel: error: [UFW BLOCK] IN=eth0 OUT=
Apr 2 10:00:05 server01 systemd[1]: error: Starting Daily apt download activities...
# 13. 搜索并保存结果
# grep "error" /var/log/messages > /tmp/error_log.txt
# 14. 搜索并发送邮件
# grep “CRITICAL” /var/log/app.log | mail -s “Critical Errors” admin@fgedu.net
# 15. 搜索并执行命令
# grep -l “error” /var/log/*.log | xargs rm -f
(删除包含error的日志文件)
Part04-生产案例与实战讲解
4.1 日志分析案例
使用grep命令进行日志分析: 学习交流加群风哥微信: itpux-com
# 1. 分析Nginx访问日志
# 查看访问量最大的IP
# awk ‘{print $1}’ /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -n 10
1234 192.168.1.100
567 192.168.1.101
234 192.168.1.102
# 查看特定IP的访问记录
# grep “192.168.1.100” /var/log/nginx/access.log | head -n 10
192.168.1.100 – – [02/Apr/2026:10:00:01 +0800] “GET / HTTP/1.1″ 200 1234
# 查看HTTP状态码统计
# awk ‘{print $9}’ /var/log/nginx/access.log | sort | uniq -c | sort -rn
1234 200
567 304
234 404
89 500
# 查看404错误
# grep ” 404 ” /var/log/nginx/access.log | head -n 10
192.168.1.100 – – [02/Apr/2026:10:00:01 +0800] “GET /notfound HTTP/1.1” 404 123
# 2. 分析系统日志
# 查看SSH登录失败
# grep “Failed password” /var/log/secure
Apr 2 10:00:01 server01 sshd[12345]: Failed password for root from 192.168.1.100 port 22
# 查看SSH登录成功
# grep “Accepted” /var/log/secure
Apr 2 10:00:02 server01 sshd[12345]: Accepted publickey for root from 192.168.1.100 port 22
# 查看sudo使用记录
# grep “sudo” /var/log/secure
Apr 2 10:00:03 server01 sudo: root : TTY=pts/0 ; PWD=/root ; USER=root ; COMMAND=/bin/ls
# 3. 分析应用日志
# 查看ERROR级别日志
# grep “ERROR” /var/log/app.log | tail -n 20
2026-04-02 10:00:01 ERROR [main] Database connection failed
2026-04-02 10:00:05 ERROR [main] Retry attempt 1 failed
# 查看特定时间段的日志
# grep “2026-04-02 10:” /var/log/app.log
2026-04-02 10:00:01 INFO [main] Application starting…
2026-04-02 10:00:02 INFO [main] Loading configuration…
# 查看异常堆栈
# grep -A 20 “Exception” /var/log/app.log | head -n 30
2026-04-02 10:00:01 ERROR [main] NullPointerException
at com.example.App.main(App.java:10)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
# 4. 分析邮件日志
# 查看发送失败的邮件
# grep “status=bounced” /var/log/maillog
Apr 2 10:00:01 server01 postfix/smtp[12345]: status=bounced (mail for [192.168.1.100] loops back to myself)
# 查看发送成功的邮件
# grep “status=sent” /var/log/maillog
Apr 2 10:00:02 server01 postfix/smtp[12345]: status=sent (250 OK)
4.2 配置文件搜索
使用grep命令搜索配置文件: 更多学习教程公众号风哥教程itpux_com
# 1. 搜索配置项
# grep “ServerName” /etc/httpd/conf/httpd.conf
#ServerName www.fgedu.net.cn:80
# 2. 搜索非注释配置项
# grep -v “^#” /etc/httpd/conf/httpd.conf | grep -v “^$”
ServerRoot “/etc/httpd”
Listen 80
Include conf.modules.d/*.conf
# 3. 搜索特定参数
# grep -i “listen” /etc/httpd/conf/httpd.conf
Listen 80
#Listen 12.34.56.78:80
# 4. 搜索多个配置文件
# grep -r “DocumentRoot” /etc/httpd/
/etc/httpd/conf/httpd.conf:DocumentRoot “/var/www/html”
# 5. 搜索环境变量
# grep “JAVA_HOME” /etc/profile
export JAVA_HOME=/usr/lib/jvm/java-11
# 6. 搜索用户配置
# grep “root” /etc/passwd
root:x:0:0:root:/root:/bin/bash
# 7. 搜索组配置
# grep “docker” /etc/group
docker:x:998:user1,user2
# 8. 搜索服务配置
# grep “ExecStart” /etc/systemd/system/docker.service
ExecStart=/usr/bin/dockerd -H fd:// –containerd=/run/containerd/containerd.sock
# 9. 搜索网络配置
# grep “IPADDR” /etc/sysconfig/network-scripts/ifcfg-eth0
IPADDR=192.168.1.100
# 10. 搜索防火墙规则
# grep “22” /etc/firewalld/zones/public.xml
4.3 故障排查案例
使用grep命令进行故障排查:
# 1. 排查磁盘空间问题
# df -h | grep -v “tmpfs\|devtmpfs”
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 50G 45G 5.0G 90% /
/dev/sda2 100G 80G 20G 80% /data
# 查找大文件
# find / -type f -size +100M 2>/dev/null | xargs ls -lh | grep -v “Permission denied”
# 2. 排查内存问题
# free -h | grep -v “Swap”
total used free shared buff/cache available
Mem: 7.6G 5.0G 1.0G 500M 1.6G 2.0G
# 查找占用内存最多的进程
# ps aux –sort=-%mem | head -n 10 | grep -v “USER”
# 3. 排查CPU问题
# top -b -n 1 | head -n 20 | grep -v “top”
# 查找占用CPU最多的进程
# ps aux –sort=-%cpu | head -n 10 | grep -v “USER”
# 4. 排查网络问题
# netstat -tuln | grep -v “Active\|Proto”
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN
# 查看特定端口的连接
# netstat -an | grep “:80” | grep ESTABLISHED
tcp 0 0 192.168.1.100:80 192.168.1.101:12345 ESTABLISHED
# 5. 排查进程问题
# ps aux | grep “nginx”
root 1234 0.0 0.1 123456 7890 ? Ss 10:00 0:00 nginx: master process
nginx 1235 0.0 0.2 123456 7890 ? S 10:00 0:00 nginx: worker process
# 6. 排查服务问题
# systemctl status httpd | grep -i “active\|failed”
Active: active (running) since Thu 2026-04-02 10:00:00 CST; 1h ago
# 7. 排查SELinux问题
# grep “denied” /var/log/audit/audit.log | tail -n 10
type=AVC msg=audit(1612345678.123:123): avc: denied { read } for pid=12345 comm=”httpd”
# 8. 排查定时任务问题
# grep “backup” /var/log/cron
Apr 2 10:00:01 server01 CRON[12345]: (root) CMD (/usr/local/bin/backup.sh)
Part05-风哥经验总结与分享
5.1 grep命令使用技巧总结
根据多年的Linux运维经验,总结grep命令的使用技巧:
# 1. 常用grep别名
alias grep=’grep –color=auto’
alias fgrep=’fgrep –color=auto’
alias egrep=’egrep –color=auto’
# 2. 搜索并高亮
# grep –color=always “error” /var/log/messages | less -R
# 3. 搜索多个文件并显示文件名
# grep -H “error” /var/log/*.log
# 4. 搜索并显示上下文
# grep -C 5 “error” /var/log/messages
# 5. 搜索时排除二进制文件
# grep -I “error” /path/to/directory/
# 6. 搜索时显示匹配次数
# grep -c “error” /var/log/*.log
# 7. 搜索并统计
# grep “error” /var/log/messages | wc -l
# 8. 搜索并发送邮件
# grep “CRITICAL” /var/log/app.log | mail -s “Critical Errors” admin@fgedu.net
5.2 grep命令操作检查清单
在生产环境中使用grep命令时的检查清单:
- 确认搜索模式是否正确
- 确认是否需要忽略大小写
- 确认是否需要递归搜索
- 确认是否需要显示行号
- 确认是否需要显示上下文
- 确认是否需要排除特定文件
- 确认是否需要排除特定目录
- 确认正则表达式语法是否正确
- 确认搜索结果是否过多
- 确认是否需要保存搜索结果
5.3 相关工具推荐
与grep命令相关的工具和替代方案: 学习交流加群风哥QQ113257174
# 1. egrep – 扩展正则表达式grep
# egrep “error|warning” /var/log/messages
# 等同于 grep -E
# 2. fgrep – 固定字符串grep
# fgrep “error*” /var/log/messages
# 等同于 grep -F
# 3. zgrep – 搜索压缩文件
# zgrep “error” /var/log/app.log.gz
# 4. zcat + grep – 搜索压缩文件
# zcat /var/log/app.log.gz | grep “error”
# 5. ack – 专为程序员设计的grep
# ack “TODO” /path/to/project/
# 优点:自动排除版本控制目录,支持多种文件类型
# 6. ag (The Silver Searcher) – 更快的ack
# ag “TODO” /path/to/project/
# 优点:速度更快,支持更多特性
# 7. ripgrep (rg) – 最快的搜索工具
# rg “TODO” /path/to/project/
# 优点:速度最快,支持正则表达式,自动排除版本控制目录
# 8. awk – 文本处理工具
# awk ‘/error/ {print}’ /var/log/messages
# 优点:功能更强大,可以进行复杂的文本处理
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
