工作中的shell数据提取与操作

问题一:有台正常运行的服务器,共有48个网口,并且网口号处于没有经过调整的混乱状态,怎样快速的找出eth0~eth47对应的物理网口位置?

shell命令# for i in `seq 0 47`; do ethtool -p eth$i 2; done

说明:遍历i=0~47,对每个 eth$i , 执行 ethtool -p 命令,意思是点亮该网口2秒钟。

问题二:查看linux系统所有网口的驱动版本、链接状态等信息

shell命令#ifconfig -a | grep eth | awk '{print $1}' | sed 's/eth//g' | sort -n | while read i; do echo eth$i; ethtool -i eth$i; ethtool eth$i | egrep "Link|Supported"; echo " ";done

说明:包含一些基本工具的应用,没什么技术含量。

问题三:服务器/var/log/blackbox 目录下有很多日期目录,目录名称是01,02,...28,29,30. 分别表示系统运行的当天号数(本月和下月记录会循环覆盖);每个时间号目录下,都有一个 net 文件,net文件记录了系统每分钟所有网口的状态信息(net内容格式是date;ethtool ethN,的每分钟执行打印的结果,其中N=0~47)。现在突然某天发现某一网口有异常,其ethtool ethN的Speed是Speed:Unknown!,而Link detected: yes ,问如何通过/var/log/blackbox的黑盒记录,找到网口异常发生的起始时间?

shell命令#find ./ -name net | while read file; do cat $file >> netAll; done

shell命令#awk '{b="";errorLineNum+=1}; /Speed:/{a=$2}; /Link detected:/{b=$3}; {if(a=="Unknown!" && b=="yes")print errorLineNum}' netAll > rlt

说明:首先找到所有日期下的net文件,合并为netAll,便于统一处理(这不会丢失时间信息,因为系统每分钟执行ethtool的时候,都已经附带执行了date命令,记录了时间信息)。然后,通过awk语言特性,遍历每行文件,只要匹配Speed:,则记录speed的结果到a变量;只要匹配到 Link detected:,则记录结果到b变量;因为a,b在处理每行的数据时,它的值在没匹配时都会保持上一个值,所以这里需要每次对b进行初始化为空(手动调试一下就可理解)。一旦a,b的值同时满足要求时,打印该行的行号。然后通过 vim netAll 打开,输入记录的errorLineNum行号,回车,即可直接定位到问题发生时的第一时间点。为什么这里这么费事的用awk语言?因为netAll文件有3718990行,手动寻找符合特征要求的时间点不现实。实际工作中,本人定位的问题发生的起始点是netAll的第60518行,对应的时间点是Wed Jun 27 03:53:34 CST 2018,也就是在6月27号凌晨3点多发生该网口异常。

//20181207备注:其实可以用二分法对netALL文件查找问题发生时间点的。netALL文件380 0000行,二分查找 2^20 = 100 0000;所以最多只需要找22次就可以定位时间点。

问题四:在一台接收大量UDP报文的服务器上,如何快速的根据UDP报文的目的端口做报文数量的统计 (实际是服务器监听了多个UDP端口,需要查看发往该服务器的UDP报文是在端口上散列均匀)

shell命令# timeout 5 tcpdump -iany udp -n > hei

shell命令# cat hei | awk -F. '{print $10}' | awk -F: '{print $1}' | awk '{++times[$1]}END{for(i in times)print "port: "i" ="times[i]}' | sort -n -k 2

效果如下:

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值