Loading [MathJax]/jax/output/CommonHTML/jax.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >效率提升10倍,推荐这些值得收藏的Shell!

效率提升10倍,推荐这些值得收藏的Shell!

作者头像
李俊鹏
发布于 2021-03-18 04:13:16
发布于 2021-03-18 04:13:16
7910
举报
文章被收录于专栏:运维研习社运维研习社

整理了一些常用的web日志分析Linux网络连接状态等shell命令,建议收藏!!!

  • 查看有多少个IP访问:
代码语言:javascript
AI代码解释
复制
awk '{print $1}' log_file|sort|uniq|wc -l

日志以nginx默认日志格式为准

  • 查看某一个页面被访问的次数:
代码语言:javascript
AI代码解释
复制
grep "/index.php" log_file | wc -l
  • 查看每一个IP访问了多少个页面:
代码语言:javascript
AI代码解释
复制
awk '{++S[$1]} END {for (a in S) print a,S[a]}' log_file > log.txt
sort -n -t ' ' -k 2 log.txt 配合sort进一步排序
  • 将每个IP访问的页面数进行从小到大排序:
代码语言:javascript
AI代码解释
复制
awk '{++S[$1]} END {for (a in S) print S[a],a}' log_file | sort -n
  • 查看某一个IP访问了哪些页面:
代码语言:javascript
AI代码解释
复制
grep ^111.111.111.111 log_file| awk '{print $1,$7}'
  • 去掉搜索引擎统计的页面:
代码语言:javascript
AI代码解释
复制
awk '{print $12,$1}' log_file | grep ^"Baidu | awk '{print $2}' |sort | uniq | wc -l
  • 查看2021年3月1日14时这一个小时内有多少IP访问:
代码语言:javascript
AI代码解释
复制
awk '{print $4,$1}' log_file | grep 1/Mar/2021:14 | awk '{print $2}'| sort | uniq | wc -l
  • 查看访问前十个ip地址
代码语言:javascript
AI代码解释
复制
awk '{print $1}' |sort|uniq -c|sort -nr |head -10 access_log
  • uniq -c 相当于分组统计并把统计数放在最前面
代码语言:javascript
AI代码解释
复制
cat access.log|awk '{print $1}'|sort|uniq -c|sort -nr|head -10
cat access.log|awk '{counts[$(11)]+=1}; END {for(url in counts) print counts[url], url}
  • 访问次数最多的10个文件或页面
代码语言:javascript
AI代码解释
复制
cat log_file|awk '{print $11}'|sort|uniq -c|sort -nr | head -10
cat log_file|awk '{print $11}'|sort|uniq -c|sort -nr|head -20
  • 通过子域名访问次数,依据referer来计算,稍有不准
代码语言:javascript
AI代码解释
复制
cat access.log | awk '{print $11}' | sed -e ' s/http:////' -e ' s//.*//' | sort | uniq -c | sort -rn | head -20
  • 列出传输大小最大的几个文件
代码语言:javascript
AI代码解释
复制
cat www.access.log |awk '($7~/.php/){print $10 " " $1 " " $4 " " $7}'|sort -nr|head -100
  • 列出输出大于200000byte(约200kb)的页面以及对应页面发生次数
代码语言:javascript
AI代码解释
复制
cat www.access.log |awk '($10 > 200000 && $7~/.php/){print $7}'|sort -n|uniq -c|sort -nr|head -100
  • 如果日志最后一列记录的是页面文件传输时间,则有列出到客户端最耗时的页面
代码语言:javascript
AI代码解释
复制
cat www.access.log |awk '($7~/.php/){print $NF " " $1 " " $4 " " $7}'|sort -nr|head -100
  • 列出最最耗时的页面(超过60秒的)的以及对应页面发生次数
代码语言:javascript
AI代码解释
复制
cat www.access.log |awk '($NF > 60 && $7~/.php/){print $7}'|sort -n|uniq -c|sort -nr|head -100
  • 列出传输时间超过 30 秒的文件
代码语言:javascript
AI代码解释
复制
cat www.access.log |awk '($NF > 30){print $7}'|sort -n|uniq -c|sort -nr|head -20
  • 列出当前服务器每一进程运行的数量,倒序排列
代码语言:javascript
AI代码解释
复制
ps -ef | awk -F ' ' '{print $8 " " $9}' |sort | uniq -c |sort -nr |head -20
  • 查看apache当前并发访问数

对比httpd.conf中MaxClients的数字差距多少

代码语言:javascript
AI代码解释
复制
netstat -an | grep ESTABLISHED | wc -l

可以使用如下参数查看数据

代码语言:javascript
AI代码解释
复制
ps -ef|grep httpd|wc -l
1388

统计httpd进程数,连个请求会启动一个进程,使用于Apache服务器。 表示Apache能够处理1388个并发请求,这个值Apache可根据负载情况自动调整

代码语言:javascript
AI代码解释
复制
netstat -nat|grep -i "80"|wc -l
4341

netstat -an会打印系统当前网络链接状态,而grep -i "80"是用来提取与80端口有关的连接的,wc -l进行连接数统计。 最终返回的数字就是当前所有80端口的请求总数

代码语言:javascript
AI代码解释
复制
netstat -na|grep ESTABLISHED|wc -l
376

netstat -an会打印系统当前网络链接状态,而grep ESTABLISHED 提取出已建立连接的信息。然后wc -l统计最终返回的数字就是当前所有80端口的已建立连接的总数。

代码语言:javascript
AI代码解释
复制
netstat -nat||grep ESTABLISHED|wc

可查看所有建立连接的详细记录

  • 输出每个ip的连接数,以及总的各个状态的连接数
代码语言:javascript
AI代码解释
复制
netstat -n | awk '/^tcp/ {n=split($(NF-1),array,":");if(n<=2)++S[array[(1)]];else++S[array[(4)]];++s[$NF];++N} END {for(a in S){printf("%-20s %s", a, S[a]);++I}printf("%-20s %s","TOTAL_IP",I);for(a in s) printf("%-20s %s",a, s[a]);printf("%-20s %s","TOTAL_LINK",N);}'
  • 时间段查询日志时间段的情况
代码语言:javascript
AI代码解释
复制
cat log_file | egrep '1/Mar/2021|3/Mar/2021' |awk '{print $1}'|sort|uniq -c|sort -nr|head -10
  • (7里面包含.php的就输出,本句的意思是最耗时的一百个PHP页面
代码语言:javascript
AI代码解释
复制
cat log_file |awk '($7~/.php/){print $NF " " $1 " " $4 " " $7}'|sort -nr|head -100
  • 列出最最耗时的页面(超过60秒的)的以及对应页面发生次数
代码语言:javascript
AI代码解释
复制
cat access.log |awk '($NF > 60 && $7~/.php/){print $7}'|sort -n|uniq -c|sort -nr|head -100
  • 统计状态码,统计404的连接
代码语言:javascript
AI代码解释
复制
awk '($9 ~/404/)' access.log | awk '{print $9,$7}' | sort

统计http status

代码语言:javascript
AI代码解释
复制
cat access.log |awk '{counts[$(9)]+=1}; END {for(code in counts) print code, counts[code]}' 
cat access.log |awk '{print $9}'|sort|uniq -c|sort -rn
  • 每秒并发
代码语言:javascript
AI代码解释
复制
watch "awk '{if($9~/200|30|404/)COUNT[$4]++}END{for( a in COUNT) print a,COUNT[a]}' log_file|sort -k 2 -nr|head -n10"
  • 带宽统计
代码语言:javascript
AI代码解释
复制
cat apache.log |awk '{if($7~/GET/) count++}END{print "client_request="count}' 
cat apache.log |awk '{BYTE+=$11}END{print "client_kbyte_out="BYTE/1024"KB"}'
  • 当天ip连接数最高的ip都在干些什么
代码语言:javascript
AI代码解释
复制
cat access.log | grep "10.0.21.17" | awk '{print $8}' | sort | uniq -c | sort -nr | head -n 10
  • 小时单位里ip连接数最多的10个时段
代码语言:javascript
AI代码解释
复制
awk -vFS="[:]" '{gsub("-.*","",$1);num[$2" "$1]++}END{for(i in num)print i,num[i]}' log_file | sort -n -k 3 -r | head -10
  • 找出访问次数最多的几个分钟
代码语言:javascript
AI代码解释
复制
awk '{print $1}' access.log | grep "2/Mar/2021" |cut -c 14-18|sort|uniq -c|sort -nr|head
  • 取5分钟日志
代码语言:javascript
AI代码解释
复制
if [ $DATE_MINUTE != $DATE_END_MINUTE ] ;then #则判断开始时间戳与结束时间戳是否相等
START_LINE=sed -n "/$DATE_MINUTE/=" $APACHE_LOG|head -n1 #如果不相等,则取出开始时间戳的行号,与结束时间戳的行号
  • 查看tcp的链接状态
代码语言:javascript
AI代码解释
复制
netstat -nat |awk '{print $6}'|sort|uniq -c|sort -rn 

netstat -n | awk '/^tcp/ {++S[$NF]};END {for(a in S) print a, S[a]}' 

netstat -n | awk '/^tcp/ {++state[$NF]}; END {for(key in state) print key,"",state[key]}' 

netstat -n | awk '/^tcp/ {++arr[$NF]};END {for(k in arr) print k,"",arr[k]}' 

netstat -n |awk '/^tcp/ {print $NF}'|sort|uniq -c|sort -rn 

netstat -ant | awk '{print $NF}' | grep -v '[a-z]' | sort | uniq -c
netstat -ant|awk '/ip:80/{split($5,ip,":");++S[ip[1]]}END{for (a in S) print S[a],a}' |sort -n 

netstat -ant|awk '/:80/{split($5,ip,":");++S[ip[1]]}END{for (a in S) print S[a],a}' |sort -rn|head -n 10 

awk 'BEGIN{printf ("http_codecount_num")}{COUNT[$10]++}END{for (a in COUNT) printf a""COUNT[a]""}'
  • 查找请求数前20个IP(常用于查找攻来源):
代码语言:javascript
AI代码解释
复制
netstat -anlp|grep 80|grep tcp|awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -nr|head -n20 
netstat -ant |awk '/:80/{split($5,ip,":");++A[ip[1]]}END{for(i in A) print A[i],i}' |sort -rn|head -n20
  • 用tcpdump嗅探80端口的访问看看谁最高
代码语言:javascript
AI代码解释
复制
tcpdump -i eth0 -tnn dst port 80 -c 1000 | awk -F"." '{print $1"."$2"."$3"."$4}' | sort | uniq -c | sort -nr |head -20
  • 查找较多time_wait连接
代码语言:javascript
AI代码解释
复制
netstat -n|grep TIME_WAIT|awk '{print $5}'|sort|uniq -c|sort -rn|head -n20
  • 查找较多的SYN连接
代码语言:javascript
AI代码解释
复制
netstat -an | grep SYN | awk '{print $5}' | awk -F: '{print $1}' | sort | uniq -c | sort -nr | more
  • 根据端口列进程
代码语言:javascript
AI代码解释
复制
netstat -ntlp | grep 80 | awk '{print $7}' | cut -d/ -f1
  • 查看了连接数和当前的连接数
代码语言:javascript
AI代码解释
复制
netstat -ant | grep $ip:80 | wc -l 
netstat -ant | grep $ip:80 | grep EST | wc -l
  • 查看IP访问次数
代码语言:javascript
AI代码解释
复制
netstat -nat|grep ":80"|awk '{print $5}' |awk -F: '{print $1}' | sort| uniq -c|sort -n
  • 分析当前的链接状况
代码语言:javascript
AI代码解释
复制
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
watch "netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'" # 通过watch可以一直监控
代码语言:javascript
AI代码解释
复制
LAST_ACK 5 #关闭一个TCP连接需要从两个方向上分别进行关闭,双方都是通过发送FIN来表示单方向数据的关闭,当通信双方发送了最后一个FIN的时候,发送方此时处于LAST_ACK状态,当发送方收到对方的确认(Fin的Ack确认)后才真正关闭整个TCP连接;

SYN_RECV 30  # 表示正在等待处理的请求数;

ESTABLISHED 1597 # 表示正常数据传输状态; 

FIN_WAIT1 51 # 表示server端主动要求关闭tcp连接; 

FIN_WAIT2 504 # 表示客户端中断连接; 

TIME_WAIT 1057  # 表示处理完毕,等待超时结束的请求数; 
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-03-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 运维研习社 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
运维三剑客grep/sed/awk实战指南,这些技巧让你效率翻倍!
想象下,当你遇到几十G的日志文件需要快速定位问题,如果没有grep、sed、awk这三个神器,估计你得排查半天(当然有你也得排查半天!!!不嘻嘻)。如果你面对海量日志完全不知道从何下手,这篇收藏就对了!掌握这三个工具真的是运维人员的必修课。
悠悠12138
2025/09/29
2380
运维三剑客grep/sed/awk实战指南,这些技巧让你效率翻倍!
【IP相关统计】Nginx Access Log日志统计分析常用命令
阅读文本大概需要3分钟。 统计IP访问量 awk '{print $1}' access.log | sort -n | uniq | wc -l 查看某一时间段的IP访问量(4-5点) grep "07/Apr/2017:0[4-5]" access.log | awk '{print $1}' | sort | uniq -c| sort -nr | wc -l 查看访问最频繁的前100个IP awk '{print $1}' access.log | sort -n |uniq -c | sort
BUG弄潮儿
2020/06/12
3.5K0
Linux 常用 netstat 命令
这是一个十分常用的命令,可以让你实时了解到云主机当前的状态,例如:常见的80连接数量,以及按一些排序,来检查是否被攻击?查看time_wait和syn连接数量等等。 1.查看所有80端口的连接数 netstat -nat|grep -i "80"|wc -l 2.对连接的IP按连接数量进行排序 netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n 3.查看TCP连接状态 netstat -nat |awk '{pri
用户1700948
2018/05/16
2.2K0
2015百度一道面试题引发的思考(shell脚本和网络)
原文    http://blog.csdn.net/chhuach2005/article/details/40044863
bear_fish
2018/09/14
7680
2015百度一道面试题引发的思考(shell脚本和网络)
Nginx状态监控及日志分析
【转载请注明出处】:https://cloud.tencent.com/developer/article/1636526
后端老鸟
2020/06/01
3.1K0
Nginx状态监控及日志分析
网站排障分析命令
系统连接状态篇: 1.查看TCP连接状态 netstat -nat|awk'{print$6}'|sort|uniq-c|sort-rnnetstat-n|awk'/^tcp/{print$NF}'|sort|uniq-c|sort-rnnetstat-ant|awk'{print$NF}'|grep-v'[a-z]'|sort|uniq-c 2.查找请求数请20个IP(常用于查找攻来源): netstat -anlp|grep80|greptcp|awk'{print$5}'|awk-F:'{print$1}'|sort|uniq-c|sort-nr|head-n20 netstat -ant|awk'/:80/{split($5,ip,":");++A[ip[1]]}END{for(iinA)printA[i],i}'|sort-rn|head-n20 3.用tcpdump嗅探80端口的访问看看谁最高 tcpdump -ieth0-tnndstport80-c1000|awk-F"."'{print$1"."$2"."$3"."$4}'|sort|uniq-c|sort-nr|head-20 6.根据端口列进程 netstat -ntlp|grep 80|awk'{print$7}'|cut-d/-f1 网站日志分析篇1(Apache): 1.获得访问前10位的ip地址 cat access.log|awk'{print$1}'|sort|uniq-c|sort-nr|head-10 cat access.log|awk'{counts[$(11)]+=1};END{for(urlincounts)printcounts[url],url}' 2.访问次数最多的文件或页面,取前20 cat access.log|awk'{print$11}'|sort|uniq-c|sort-nr|head-20 3.列出传输最大的几个exe文件(分析下载站的时候常用) cat access.log|awk'($7~/\.exe/){print$10""$1""$4""$7}'|sort-nr|head-20 4.列出输出大于200000byte(约200kb)的exe文件以及对应文件发生次数 cat access.log|awk'($10>200000&&$7~/\.exe/){print$7}'|sort-n|uniq-c|sort-nr|head-100 7.列出传输时间超过30秒的文件 cat access.log|awk'($NF>30){print$7}'|sort-n|uniq-c|sort-nr|head-20 8.统计网站流量(G) cat access.log|awk'{sum+=$10}END{printsum/1024/1024/1024}' 9.统计404的连接 awk'($9~/404/)'access.log|awk'{print$9,$7}'|sort 网站日分析2(Squid篇) 2.按域统计流量 zcat squid_access.log.tar.gz|awk'{print$10,$7}'|awk'BEGIN{FS="[/]"}{trfc[$4]+=$1}END{for(domainintrfc){printf"%s\t%d\n",domain,trfc[domain]}}' 数据库篇 1.查看数据库执行的sql /usr/sbin/tcpdump-ieth0-s0-l-w-dstport3306|strings|egrep-i'SELECT|UPDATE|DELETE|INSERT|SET|COMMIT|ROLLBACK|CREATE|DROP|ALTER|CALL'
DevinGeng
2019/04/09
4260
Linux 面试常考题总结大全【建议收藏】
stat命令一般用于查看文件的状态信息。stat命令的输出信息比ls命令的输出信息要更详 细。
码农编程进阶笔记
2022/04/08
6290
利用shell命令分析服务器日志
在没有专业日志分析系统的情况下,我们有时需要对日志进行简单的分析,下面列出一些常用的shell命令分析日志的方法,一定要收藏
仙人技术
2020/04/29
1.2K0
awk在生产环境中高端应用
转自张sir的博客:http://freeze.blog.51cto.com/1846439/829728
保持热爱奔赴山海
2019/09/18
5700
30个高效的Linux命令技巧
# tar tf data.tar.gz #t是列出存档文件目录,f是指定存档文件
菲宇
2019/06/12
1.2K0
Web日志安全分析技巧
Web访问日志记录了Web服务器接收处理请求及运行时错误等各种原始信息。通过对WEB日志进行的安全分析,不仅可以帮助我们定位攻击者,还可以帮助我们还原攻击路径,找到网站存在的安全漏洞并进行修复。
Bypass
2019/07/08
1.3K0
Web日志安全分析技巧
shell分析日志常用指令合集
  数据分析对于网站运营人员是个非常重要的技能,日志分析是其中的一个。日志分析可以用专门的工具进行分析,也可以用原生的shell脚本执行,下面就随ytkah看看shell分析日志常用指令有哪些吧。(log_file表示所在路径,完整的路径像这样:/www/var/***.log)
ytkah
2018/12/24
6850
Nginx日志配置及日志分析脚本案例
其中access log 记录了哪些用户,哪些页面以及用户浏览器、ip和其他的访问信息
菲宇
2019/06/12
3.2K0
Nginx 分析access日志文件
Nginx Access Log日志统计分析常用命令 IP相关统计 统计IP访问量 awk '{print $1}' access.log | sort -n | uniq | wc -l 查看某一时间段的IP访问量(4-5点) grep "07/Apr/2017:0[4-5]" access.log | awk '{print $1}' | sort | uniq -c| sort -nr | wc -l 查看访问最频繁的前100个IP awk '{print $1}' access.log | s
超蛋lhy
2018/08/31
1.2K0
apache日志分析脚本
统计出日志里一个或多个页面总共访问的次数,比如aa.jsp, bb.jsp这样页面分别多少次。
用户1168904
2021/05/25
1K0
查看服务器性能及快速故障定位
查看服务器性能及快速故障定位 适应环境 - Linux 连通性
以谁为师
2019/05/28
1.8K0
Linux awk统计日志中出现过的IP(或出现次数最多的N个IP)
awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。
全栈程序员站长
2022/07/18
1.9K0
Linux awk统计日志中出现过的IP(或出现次数最多的N个IP)
17 个实用 shell 脚本,建议收藏!
1、服务器系统配置初始化 #/bin/bash # 安装系统性能分析工具及其他 yum install gcc make autoconf vim sysstat net-tools iostat iftop iotp wget lrzsz lsof unzip openssh-clients net-tool vim ntpdate -y # 设置时区并同步时间 ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime if ! crontab -l
用户6792968
2022/08/30
5960
《拉钩课程 - 重学操作系统 - Linux 指令入门》
1、进程是什么?进程是应用的执行副本。应用的可执行文件是放在文件系统里,把可执行文件启动,就会在操作系统里(具体来说是内存中)形成一个应用的副本,这个副本就是进程。
JMCui
2022/03/10
1.1K0
运维必备技能 WEB 日志分析
文章节选自《Netkiller Monitoring 手札》 20.2. Web 20.2.1. Apache Log 1、查看当天有多少个IP访问: awk '{print $1}' log_file|sort|uniq|wc -l 2、查看某一个页面被访问的次数: grep "/index.php" log_file | wc -l 3、查看每一个IP访问了多少个页面: awk '{++S[$1]} END {for (a in S) print a,S[a]}' log_file 4、将每个IP
netkiller old
2018/03/05
2.5K0
相关推荐
运维三剑客grep/sed/awk实战指南,这些技巧让你效率翻倍!
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档