【问题标题】:Apache grep big log fileApache grep 大日志文件
【发布时间】:2011-12-31 09:15:01
【问题描述】:
我需要解析 Apache 日志文件以查找特定的可疑模式(如 SQL 注入)。
例如我正在寻找id='%20or%201=1;
我正在使用 grep 检查此模式(和其他模式)的日志文件,因为这些日志很大,所以需要很长时间
这是我的命令:
grep 'id=' Apache.log | egrep "' or|'%20"
我需要使用更好或更快的方法或命令来加快搜索速度吗?
【问题讨论】:
标签:
apache
command-line
grep
logging
【解决方案1】:
对于初学者,您无需将grep 输出通过管道传输到egrep。 egrep 提供了grep 的正则表达式解析的超集,所以你可以这样做:
egrep "id='( or|%20)'" apache.log
调用egrep 与调用grep -E 相同。
这可能会给您带来一点性能提升。如果您可以查找固定字符串而不是正则表达式,那也可能会有所帮助。您可以使用 -F 选项告诉 grep 查找固定字符串:
grep -F "id='%20or" apache.log
但是使用固定字符串会失去很多灵活性。
【解决方案2】:
我假设您的大部分时间都花在从磁盘获取数据上(CPU 使用率未达到最大值)。那么您就无法优化查询。不过,您可以尝试仅将有趣的行记录在单独的文件中....
【解决方案3】:
您在寻找grep -E "id=(' or|'%20)" apache.log 吗?