下面这3个命令是很是好用的日志分析命令,以apache的日志文件access_log为例 apache
当网络流量忽然持续异常时,颇有多是有恶意访问,最快的解决方式就是找出访问量最多的几个ip,暂时禁止其访问,而后再仔细观察 网络
# cat access_log | cut -f1 -d " " | sort | uniq -c | sort -k 1 -n -r | head -10 优化
了解哪些Url资源的访问量最大,能够帮助咱们有针对性的进行优化 ui
# cat access_log | cut -f7 -d " " | sort | uniq -c | sort -k 1 -n -r | head -10 spa
文件大小太大的话会严重影响访问速度,有必要找出大文件进行分析 日志
# cat access_log | sort -k 10 -n -r | head -10 排序
命令解释 ip
这几个命令都是使用了管道“|”把多个命令进行链接,上一个命令的结果交给下一个命令来处理
cat
显示文件内容
cut
是一个选取命令,就是将数据以行为单位进行分析,取出咱们想要的
-d : 自定义分隔符,默认为制表符
-f : 与-d一块儿使用,指定显示哪列
第一个命令中的:cut -f1 -d " "
含义:以空格进行分割,显示结果中的第一列
sort
将文件的每一行做为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出
没有参数时就是整行排序
-t : 分隔符,默认是用 [tab] 键来分隔
-k : 选择以哪列进行排序
-n : 使用数字格式进行排序,默认是以文字型态来排序的
-r : 反向排序
uniq
首先比较相邻的行,而后除去第二行和该行的后续副本,重复的行必定要相邻,因此一般与 sort 联合使用,先用 sort 进行排序,而后使用 uniq 去重
-c : 在输出行前面加上每行出现的次数
head
显示结果中头部区域
-10 : 显示头部的10行资源
综合解释 class
日志文件的内容示例184.195.232.39 - - [28/Dec/2015:22:31:48 +0800] "GET /ui-nav.js HTTP/1.1" 304 -184.195.232.39 - - [28/Dec/2015:22:31:48 +0800] "GET /ui-toggle.js HTTP/1.1" 304 -184.195.232.38 - - [28/Dec/2015:22:31:48 +0800] "GET /ui-toggle.js HTTP/1.1" 304 -以第一个命令(查看访问量最大的前10个IP)为例# cat access_log | cut -f1 -d " " | sort | uniq -c | sort -k 1 -n -r | head -10cat access_log先读取 access_log 的内容cut -f1 -d " "而后对每行以空格进行分割,只显示第一列(日志的第一列为IP)输出的结果为:184.195.232.39184.195.232.39184.195.232.38sort接下来对IP进行升序排序输出的结果为:184.195.232.38184.195.232.39184.195.232.39uniq -c删除重复的IP,删除的同时记录下相同的IP数量,显示到IP的前面输出的结果为:1 184.195.232.382 184.195.232.39sort -k 1 -n -r对第一列以数字格式倒序排序输出的结果为:2 184.195.232.391 184.195.232.38head -10只显示头10条