用awk分析nginx日志
BEGIN {
#FS = "\t"
print("start...\n")
}
/deploy\.php(.*?)302/ {
print $1
}
END {
print("end.\n")
}
awk -f awk access.log
BEGIN {
pos = 1
isupdate = 0
title = ""
}
/Table_map: `55shantao_prod`\.`product_sku_data`/ {
title = NR":"$0
}
/UPDATE `55shantao_prod`\.`product_sku_data`/ {
print NR":"title
print NR":"$0
isupdate = 1
}
{
if (isupdate == 1 && pos < 28) {
print NR":"$0
pos = pos + 1
} else {
pos = 1
isupdate = 0
}
}
输出百度抓取的POST的ID和时间
more www.bianhua8.com.log | grep "Baiduspider" | grep "/post/" | awk 'BEGIN{FS=" "}{match($0, /\[(.+)\].+?post\/([0-9]+)/, m);print NR""m[1]"\t"m[2];}'
把找出执行时间大于多少ms的日志,注意:下面的match只支持在gawk里使用,有的linux默认是gawk,但在mac下面,需要安装gawk才支持,不然会报错。
more access.log-20210630 | awk '{match($0,/urt="([0-9\.]+)"/, m)}m[1]>0.1{print m[1]"\t"$7}' | grep -v "search"
tail -f xxxx.com.access.log | awk '{match($0,/urt="([0-9\.]+)"/, m)}m[1]>0.5{print $4"]\t" m[1]"s\t"$7}'
找出最近访问次数多的ip
tail -n 50000 /data/log/nginx/www.xxx.com.access.log | awk -F' ' '{print $1}' | sort | uniq -c | sort -n
grep取上下几行:
-B 前几行
-C 上下几行
-A 后几行
gerp用正则匹配
grep -E ‘xxxx’
但正则好像不能用\d之类的,只能用[0-9]这样
去重
cat xx.txt | sort | uniq
去重并统计行数按倒序排
cat xx.txt | sort | uniq -c | sort -r
curl显示请求时间curl -o /dev/null -s -w 'dns解析时间:%{time_namelookup}\n连接时间:%{time_connect}\n开始传输时间:%{time_starttransfer}\ntotal:%{time_total}\n速度:%{speed_download}\n' "http://localhost/404.html"
切换用户
su xxx,切换到某用户
sudo -i,切换到管理员
sudo -u nginx php xxx.php,以某个用户运行,像一些无法登录的用户可以以这种方式执行
sudo -su nginx,可以切换到该用户去,并一直在那个用户
查看运行时间久的进程
ps aux | grep " cli.php " | sort -k 10 -n
查看网络连接状态
netstat -ant|awk '/^tcp/ {++S[$NF]} END {for(a in S) print (a,S[a])}'
上面的$NF表示是最后一列的内容, NF表示最后一列的索引, END 是各个{}块之间需要的