Shell 命令行统计 apache 网站日志访问IP以及IP归属地
Shell 命令行统计 apache 网站日志访问IP以及IP归属地
我的一个站点用 apache 服务跑着,积攒了很多的日志。我想用 shell 看看有哪些人访问过我的站点,并且他来自哪里。
因为日志太长了,所以我没跑完就放弃了,因为跑起来太慢了。。。
分析 apache 日志
140.205.16.220 - - [26/Jun/2017:03:49:51 +0800] "GET /content_article_3.html HTTP/1.1" 200 3
日志内容如上,这个很简单,只要以空格分割,取第一个就得到了IP了。
编写脚本
i=1
# 要分析的日志文件
log=apache.log
l=$(wc -l $log | sed 's/^[ \t]*//g' | cut -d ' ' -f1)
echo $l
while read line; do
echo -en "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b"`echo $i*100/$l | bc `'%/'$i'/'$l
((i++))
ip=`echo $line | cut -d ' ' -f1`
grep "\<$ip\>" ip.txt >/dev/null
if [ $? -ne 0 ]; then
curl -sL http://ip.cn/index.php?ip=$ip >> ip.txt
fi
done < $log
echo -e '\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\bbOK '
首先呢,当然是把我昨天写的进度拿出来整合进去啦。Shell 循环中实现展示进度百分比的脚本方法,但是因为文件是在是太长了一点,百分比已经看不到动态的表现,所以就又加上了显示行数和总行数。
然后用 cut 获取到每行的 ip 地址。
然后用 grep 在 ip.txt 这个文件中查找一下这个 ip 存在不存在,但是我不想把结果打印到终端,所以用输入到 /dev/null 实现禁止标准输出。
然后用 $? 输出结果是否为 0 判断这个 ip 是否存在过。
如果不存在,就去 ip.cn 查询一下 ip 归属地,并将结果追加到 ip.txt 文件
最后就完成了。
因为要上网查,所以效率是比较慢的。不过结果不重要,重要的是实现的过程。通过解决问题,还是学习到两个知识点。
以上脚本均在 mac 下测试通过,在 Linux 下可能会有稍许不同。
本文由 FungLeo 原创,允许转载,但转载必须保留首发链接。
Shell 命令行统计 apache 网站日志访问IP以及IP归属地的更多相关文章
- Shell 命令行,实现对若干网站状态批量查询是否正常的脚本
Shell 命令行,实现对若干网站状态批量查询是否正常的脚本 如果你有比较多的网站,这些网站的运行状态是否正常则是一件需要关心的事情.但是逐一打开检查那简直是一件太糟心的事情了.所以,我想写一个 sh ...
- python统计apache、nginx访问日志IP访问次数并且排序(显示前20条)【转】
前言:python统计apache.nginx访问日志IP访问次数并且排序(显示前20条).其实用awk+sort等命令可以实现,用awk数组也可以实现,这里只是用python尝试下. apach ...
- Shell 命令行 从日志文件中根据将符合内容的日志输出到另一个文件
Shell 命令行 从日志文件中根据将符合内容的日志输出到另一个文件 前面我写了一篇博文Shell 从日志文件中选择时间段内的日志输出到另一个文件,利用循环实现了我想要实现的内容. 但是用这个脚本的同 ...
- HDFS shell命令行常见操作
hadoop学习及实践笔记—— HDFS shell命令行常见操作 附:HDFS shell guide文档地址 http://hadoop.apache.org/docs/r2.5.2/hadoop ...
- 几种在shell命令行中过滤adb logcat输出的方法
我们在Android开发中总能看到程序的log日志内容充满了屏幕,而真正对开发者有意义的信息被淹没在洪流之中,让开发者无所适从,严重影响开发效率.本文就具体介绍几种在shell命令行中过滤adblog ...
- 自学Linux Shell2.1-进入shell命令行
点击返回 自学Linux命令行与Shell脚本之路 2.1-进入shell命令行 进入文本命令行界面(CLI)两种方法: 控制台终端 图形化终端 1. 通过Linux控制台终端访问CLI 按下Ctrl ...
- Hadoop HDFS的shell(命令行客户端)操作实例
HDFS的shell(命令行客户端)操作实例 3.2 常用命令参数介绍 -help 功能:输出这个命令参数手册 -ls 功能:显示目录信息 示例: hadoop fs ...
- Shell 命令行实现将一个站点页面全部下载到本地并替换其中链接的脚本
Shell 命令行实现将一个站点页面全部下载到本地并替换其中链接的脚本 不知道为什么,我总想用 Shell 脚本来实现把一个站点内容给下载下来.但是下载什么站点我确不知道.今天尝试了一下利用 curl ...
- Python 分页和shell命令行模式
前言 除了手动添加你的文章后外,你还可以用命令行来添加,python 自带了一种命令行 就是 shell 快速添加博文:Shell命令行模式 在你的目录下:mysite python manage.p ...
随机推荐
- mysql搜索不区分大小写
mysql搜索是不区分大小写的,这种情况下我们有两种方法解决 知识前提: BINARY binary不是函数,而是一个类型转换运算符,它用来强制字符串为一个二进制字符串,可以理解为在字符串比较的时候区 ...
- 20145303 实验一 Java开发环境的熟悉(Linux + Eclipse)
20145303 实验一 Java开发环境的熟悉(Linux + Eclipse) 实验题目(4):实现学生成绩管理功能,并进行测试 思路: 对于实现学生成绩管理(student performanc ...
- Mac上Homebrew的使用——Homebrew 使 OS X 更完整
0 Homebrew是啥? “Homebrew installs the stuff you need that Apple didn’t.——Homebrew 使 OS X 更完整”. Homebr ...
- 记jsp判断
empty:表示空字符串,null,空数组,空集合. ! empty:表示非空字符串,非null,非空数组,非空集合.
- Hive的三种Join方式
Hive的三种Join方式 hive Hive中就是把Map,Reduce的Join拿过来,通过SQL来表示. 参考链接:https://cwiki.apache.org/confluence/dis ...
- html和JavaScript,用户点击浏览器后退按钮,或者返回上一步自动刷新方式
浏览器用户返回上一步,自动刷新 方式一. <input type="hidden" id="refreshed" value="no" ...
- spring mvc: 参数方法名称解析器(用参数来解析控制器下的方法)MultiActionController/ParameterMethodNameResolver/ControllerClassNameHandlerMapping
spring mvc: 参数方法名称解析器(用参数来解析控制器下的方法)MultiActionController/ParameterMethodNameResolver/ControllerClas ...
- JSON的多样格式
//JSON – Properties 方便前台列表显示 [{"年月":2002.01,"北京分公司":2214688,"河北分公司":3 ...
- [转]RGB数据保存为BMP图片
转自:http://blog.csdn.net/yixianfeng41/article/details/52591585 一.BMP文件由文件头.位图信息头.颜色信息和图形数据四部分组成. 1.BM ...
- IOS-UIButton的文本与图片的布局
UIButton内部文本和图片的布局是我们日常代码中,不可缺少的部分,按钮默认左边图片右边文本,那要实现左边文本,右边图片,我们该怎么解决呢,上面图片,下面文本又该怎么办呢 其实很简单,今天总结下,目 ...