大家好,我是阿铭,从13年我开始做Linux运维培训,直接或间接学过我教程或课程的朋友应该有数十万人。大部分同学给我的反馈是,Linux shell是很难啃的一个知识板块。虽然,大家学的很仔细,shell相关的语法也全部掌握,但当拿到一个需求时,就是写不出或写不好一个完美的shell脚本。

这个现象很正常,举个例子,在金庸的武侠小说里,武功盖世秘籍有很多(如,降龙十八掌),对于一个普通人来讲,就算各个招式都能打的滚瓜烂熟,然而并没有什么卵用,因为他没有任何的内力。而我们这个shell脚本其实就是一门“盖世绝学”,但你在没有修炼“内功”的情况下,shell知识点无论你学的多么好,依然不能写出好的代码来。

这里所谓的“内功”就是经验。我们经常听做开发的朋友讲,没写够10万行代码就不合格,有的企业招开发人员,也比较在意他写过多少行代码,一个开发人员写过的代码越多,说明他的经验越丰富。我们写shell脚本不也是写代码吗?记得,我刚做运维那年,几乎每天都在写shell脚本,简单的两三行,复杂的上百行,各种各样的小需求,感觉仅仅一两个月,我的shell脚本能力有了明显的提升。

因此,我准备出一个专栏《20天精通Linux Shell脚本》(拖到底部有彩蛋!),以20个实际工作场景的shell脚本案例展开讲解,它们不仅涵盖了shell脚本常见的语法、思路以及技巧,而且还会扩展一些Linux相关的知识。希望订阅本专栏的朋友能够耐心读完每一个案例,并且一定要动手写一写,这样你才会真正学到其精髓。

20个案例的核心内容是什么?

下面是对这20个案例的简单介绍。

案例1,用shell脚本实现备份MySQL数据库,数据库的重要性不言而喻,所以做好数据备份是一个合格运维工程师的必备。

案例2,监控一台Nginx服务器的状态码是否有502状态码,502在Nginx服务器上普遍存在,它极大影响了用户体验,一旦出现502问题就需要第一时间发现并找到问题所在。

案例3,批量添加100个用户,并给用户设置随机密码,密码设定后还需要给它存放到一个日志文件里,方便查询。

案例4,用shell脚本自动封访问量异常的IP,并每隔一段时间把不再发起请求的IP给解封,这个功能似乎在web服务器上很实用。

案例5,用脚本监控本机的磁盘使用情况,包括使用空间以及inode使用量,磁盘空间一旦写满,会影响系统正常运行,有必要实时检查磁盘使用情况,一旦达到设定阈值要第一时间通知到我们。

案例6,检测两台机器同一个目录下的文件是否有差异,在负载均衡集群中通常是多台服务器上跑了同样的网站,所以需要保证文件内容是一致的。

案例7,用shell脚本监控MySQL主从架构,看主从的状态是否是正常的,主从不正常就会导致数据不同步,数据不一致将严重影响业务可用性。

案例8,用shell脚本编写一个运维工具,当运行它的时候,会列出一个命令列表,用户只需要按对应数字就可以运行列表中的命令。

案例9,用shell脚本监控本机的网卡流量,当网卡流量为0时,需要重启网卡。

案例10,用shell脚本检测指定域名是否快到期,以免域名到期没有续费被回收。

案例11,给定一个人员列表,用shell脚本把这些人员分组,比如指定小组的个数,然后脚本可以自动地将这些人员随机地分成若干个小组。

案例12,当备份的数据库量很大时,如果使用传统的循环遍历方法会花费很长的时间,这是因为shell脚本默认是单线程的,而本脚本需要实现多线程,这样就可以提升备份数据库的速度。

案例13,在使用CDN的情况下,各地用户访问到的节点是不同的,但如果某个节点有问题时,会影响到部分用户访问,所以需要写一个shell脚本来监测所有节点是否正常。

案例14,一台服务器上运行着Apache+PHP+MySQL服务,上面跑着很多网站,每增加一个网站都需要修改httpd.conf增加一个虚拟主机,并且需要在MySQL数据库里增加一个库,并增加一个MySQL的用户。如果是手动操作这些步骤还是比较繁琐的,该shell脚本可以批量实现这些操作。

案例15,在工作中会遇到各种各样xml格式的文件,有时的需求是,需要把xml文件里面的内容进行格式化输出。

案例16,生产环境中,往往有多台Tomcat服务器在运行,有时需要重启Tomcat服务,如果手动执行则需要登录每一台机器,非常麻烦,那么编写一个shell脚本自动登录远程机器并重启Tomcat服务就很有必要。

案例17,在我们的服务器上跑着各种各样的服务,所以就有了很多日志,日志切割可以用shell脚本实现,但是切割完的老日志,随着时间的推移会越来越多,那么如何把这些老日志归档就需要写一个脚本来按照预设规则来完成。

案例18,一台阿里云的ECS里运行着Nginx+PHP-FPM+MySQL服务,近期收到IO使用率很高的告警,但是这个问题是一瞬间,时间很短,每次登录这台机器的时候发现IO并没有什么问题,所以写一个脚本监控磁盘IO的使用率,当有问题时需要近一步排查具体的问题。

案例19,一台Tomcat服务器上运行着多个实例,而每一个实例都有记录日志,当遇到问题或者有什么特殊需求时,就需要挨个查看这些实例的日志,为了提升效率所以需要编写一个定制化的shell脚本。

案例20,虽然目前已经有了各种各样的工具可以实现代码部署,但在早期并没有这样方便好用的工具,当然一些小公司也用不着这样的工具,而是用shell脚本来实现的。

学完这20个案例你将收获什么?

不管你是0基础的Linux初学者,还是入行几年的老鸟,阅读完这20个案例,都会让你从中获得撰写shell脚本的技巧、思想以及Linux相关的技能。对于想要快速提升自己shell脚本能力的朋友来说,这20个案例就像一剂良药,它们会助你在运维工作中越战越猛!

另外这个专栏对于java程序员以及php程序员也是有极大的帮助,我相信当你学完这20个实战案例并认真吸收其精华后,你就可以拥有至少两年的Linux shell实战经验!

专栏地址:《20天精通Linux Shell脚本》

彩蛋

安卓小程序端“51CTO订阅专栏”,专栏订阅优惠¥12