热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【1分钟系列教程】Linux系统Shell脚本编写思路与过程

前段时间有小伙伴问我一些问题,涉及到shell脚本的编写问题,事后,我深入思考了下,实际生产环境的确也会经常用到,因此如何写这个脚本?它的思路在哪?带这个问题引入今天的文章,仅供参



前段时间有小伙伴问我一些问题,涉及到shell脚本的编写问题,事后,我深入思考了下,实际生产环境的确也会经常用到,因此如何写这个脚本?它的思路在哪?带这个问题引入今天的文章,仅供参考,如有不完善的地方请多指导。


问题一:


编写脚本自动统计访问网站失败的IP地址


题二:


编写脚本自动统计十分钟内访问网站的IP地址


征对这两个问题,我的解决思路如下:


第一个问题:


1)怎么才算访问网站失败?


大家都知道,我们也会经常打不开一网站,那么访问失败,网站日志肯定会有记录的,因此,可以通过查看日志中的状态码(如200、400、403)来判断用户的访问结果


2)获取IP地址


获取IP地址就很简单了,awk命令就是个不错的选择


第二个问题:


1)统计IP地址


同第一个问题一样,方法有很多,也非常简单


2)如何取得十分钟内的日志


115.59.74.25 - - [27/Feb/2017:22:54:43 +0800] "GET /Home/SaveData/index HTTP/1.0" 404 3537 "-" "-"
115.59.74.25 - - [27/Feb/2017:22:54:44 +0800] "GET /Home/SaveData/index HTTP/1.0" 404 3537 "-" "-"

通过上面的日志格式,可以看出日志中是带有时间点信息的,那么只需要将时间点信息找到即可解决


3)解决时间点的问题


可以通过awk的命令来获取某段时间内的信息


awk '$4 >="[27/Feb/2017:22:54:43" && $4 <="[27/Feb/2017:22:54:53'27/Feb/2017:22:54:53"' /wwwlogs/access.log**
115.59.74.25 - - [27/Feb/2017:22:54:43 +0800] "GET /Home/SaveData/index HTTP/1.0" 404 3537 "-" "-"
115.59.74.25 - - [27/Feb/2017:22:54:44 +0800] "GET /Home/SaveData/index HTTP/1.0" 404 3537 "-" "-"
115.59.74.25 - - [27/Feb/2017:22:54:45 +0800] "GET /Home/SaveData/index HTTP/1.0" 404 3537 "-" "-"
115.59.74.25 - - [27/Feb/2017:22:54:47 +0800] "GET /Home/SaveData/index HTTP/1.0" 404 3537 "-" "-"
115.59.74.25 - - [27/Feb/2017:22:54:48 +0800] "GET /Home/SaveData/index HTTP/1.0" 404 3537 "-" "-"
115.59.74.25 - - [27/Feb/2017:22:54:49 +0800] "GET /Home/SaveData/index HTTP/1.0" 404 3537 "-" "-"
115.59.74.25 - - [27/Feb/2017:22:54:50 +0800] "GET /Home/SaveData/index HTTP/1.0" 404 3537 "-" "-"
115.59.74.25 - - [27/Feb/2017:22:54:52 +0800] "GET /Home/SaveData/index HTTP/1.0" 404 3537 "-" "-"
115.59.74.25 - - [27/Feb/2017:22:54:53 +0800] "GET /Home/SaveData/index HTTP/1.0" 404 3537 "-" "-"

这样就可以将一段时间内的日志信息取出


4)解决十分钟的问题


这时就需要利用到系统的命令date


[root@ ~]# date +%d/%b/%Y:%k:%M:%S
01/Mar/2017: 7:32:25 #当前时间
[root@nfs-1-1 ~]# date +%d/%b/%Y:%k:%M:%S -d '-10 minutes'
01/Mar/2017: 7:22:25 #十分钟前的时间

那么十分钟内的问题也就解决了


总结:其实编写的大体思路就是如此,拆分需求解决需求,最终用命令堆砌而成,思路决定出路。


编写脚本


自动统计访问网站失败的IP地址


vi fail_connect_ip.sh
##########################################
#this scripts is for auto check client conntect to #
#webserver failed #
#create by mingongge at 2017--0-01 #
##########################################
!/bin/sh
egerp "400|403|404|500" /wwwlogs/access.log |awk '{print $1}' |sort -nr |uniq -c

最好将结果追加到一个文件,然后查看文件,因为有可能输出太多,前面的统计结果无法看到,当然实际生产环境中访问失败的状态码不止这几个


最终执行结果如下


[root@ ~]# sh fail_connect_ip.sh
1 29.20.20.3
1 2.11.22.1
8 1.1.1.1

统计十分钟内访问网站的IP地址


vi client_connect_ip.sh
##########################################
#this scripts is for auto check conntect to webserver client's ip
#create by mingongge at 2017--0-01
##########################################
!/bin/sh
TIME=`date +%d/%b/%Y:%k:%M:%S`
NTIME=`date +%d/%b/%Y:%k:%M:%S -d '-10 minutes'`
#定义时间变量
awk '$4 >= "'\[$NTIME'" && $4 <= "'\[$TIME'"' /wwwlogs/access.log >log.txt
#获取时间段内的日志信息
awk '{print $1}' log.txt |sort -nr |uniq
#将IP地址取出整理排序

如有错误或其它问题,欢迎小伙伴留言评论、指正。如有帮助,欢迎点赞+转发分享。


欢迎大家关注民工哥的公众号:民工哥技术之路





推荐阅读
  • 关键词:Golang, Cookie, 跟踪位置, net/http/cookiejar, package main, golang.org/x/net/publicsuffix, io/ioutil, log, net/http, net/http/cookiejar ... [详细]
  • 本文介绍了Linux系统中正则表达式的基础知识,包括正则表达式的简介、字符分类、普通字符和元字符的区别,以及在学习过程中需要注意的事项。同时提醒读者要注意正则表达式与通配符的区别,并给出了使用正则表达式时的一些建议。本文适合初学者了解Linux系统中的正则表达式,并提供了学习的参考资料。 ... [详细]
  • 本文介绍了在Linux下安装和配置Kafka的方法,包括安装JDK、下载和解压Kafka、配置Kafka的参数,以及配置Kafka的日志目录、服务器IP和日志存放路径等。同时还提供了单机配置部署的方法和zookeeper地址和端口的配置。通过实操成功的案例,帮助读者快速完成Kafka的安装和配置。 ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 本文介绍了在Linux下安装Perl的步骤,并提供了一个简单的Perl程序示例。同时,还展示了运行该程序的结果。 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • 在CentOS/RHEL 7/6,Fedora 27/26/25上安装JAVA 9的步骤和方法
    本文介绍了在CentOS/RHEL 7/6,Fedora 27/26/25上安装JAVA 9的详细步骤和方法。首先需要下载最新的Java SE Development Kit 9发行版,然后按照给出的Shell命令行方式进行安装。详细的步骤和方法请参考正文内容。 ... [详细]
  • 本文介绍了深入浅出Linux设备驱动编程的重要性,以及两种加载和删除Linux内核模块的方法。通过一个内核模块的例子,展示了模块的编译和加载过程,并讨论了模块对内核大小的控制。深入理解Linux设备驱动编程对于开发者来说非常重要。 ... [详细]
  • 解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法
    本文介绍了解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法,包括检查location配置是否正确、pass_proxy是否需要加“/”等。同时,还介绍了修改nginx的error.log日志级别为debug,以便查看详细日志信息。 ... [详细]
  • mac php错误日志配置方法及错误级别修改
    本文介绍了在mac环境下配置php错误日志的方法,包括修改php.ini文件和httpd.conf文件的操作步骤。同时还介绍了如何修改错误级别,以及相应的错误级别参考链接。 ... [详细]
  • CEPH LIO iSCSI Gateway及其使用参考文档
    本文介绍了CEPH LIO iSCSI Gateway以及使用该网关的参考文档,包括Ceph Block Device、CEPH ISCSI GATEWAY、USING AN ISCSI GATEWAY等。同时提供了多个参考链接,详细介绍了CEPH LIO iSCSI Gateway的配置和使用方法。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 在重复造轮子的情况下用ProxyServlet反向代理来减少工作量
    像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户 ... [详细]
author-avatar
笑竹舞
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有