在IT产业链中开源的理念已成为绝大多数企业的共识。随着开源技术的不断进步与创新,云计算也逐步深入到了每个互联网企业的内部。但是,随之而来的便是管理成本的提高,大量的物理或者虚拟主机需要管理与维护,如何能够更好地实现自动化运维,成为企业需要迫切解决的问题。行业中自动化运维的软件很多,Puppet、Saltstack、Ansible等让我们在云时代依然可以轻松管理和维护设备与业务,然而像Ansible这样的自动化工具,虽然已经内置了很多模块,但是在解决每个企业的个性化需求时还需要编写自动化脚本。本书将围绕Linux系统中最常用的Shell脚本语言,讲解如何通过Shell编写自动化、智能化脚本。全书以案例贯穿,对每个知识点都可以找到与之对应的案例,完成本书中的每个案例对于未来在企业中的实际应用极具意义。另外,在本书中配套有很多游戏案例,通过编写游戏脚本可以极大地提升学习的乐趣。
本书中的代码可以在https://github.com/jacobproject/shell_scripts下载,现在的商业环境是一个充满竞争的环境,很多企业的业务量在不断地增长,对服务质量的要求也越来越高。特别是互联网企业为了满足客户更高的需求,提升用户使用体验,IT部门需要维护的设备数量从早期的几台,发展到了目前的数以万计,如此庞大的服务器维护量,通常会让IT管理人员头疼不已。本书介绍的自动化运维内容可以让我们快速掌握大规模批量处理的简单方法。
本书从基础知识讲到数据分析、数据过滤等高级应用,适合Linux运维人员、Shell编程爱好者阅读,可作为Linux运维人员的一本优秀的案头书。
资深Linux专家呕心力作,拒绝定义、精心设计、重在实践,摆脱固化的命令和语法堆积,通过生动有趣的案例学Shell编程,大量案例脚本可快速应用于生产实践
★ 本书作者是一个有着十多年行业经验的一线Linux专家级讲师,丁老师将多年的教学与实践经验进行了总结,融会贯通,皆为精华。
★ 作者所著畅销书《Linux运维之道》在业内广受好评,其内容通俗易懂,实用性强,让人受益匪浅,本书跟它一脉相承。
★ 本书围绕Linux系统中最常用的Shell脚本语言,讲解如何通过Shell编写自动化、智能化脚本。每个知识点都有对应的案例,脚本可快速应用于生产。
★ 本书从基础知识讲到数据分析、数据过滤等高级应用,所介绍自动化运维内容可以让读者快速掌握大规模批量服务器运维的简单方法。
丁明一
达内集团云计算教学研发总监、开源技术推广者;
红帽认证架构师(RHCA)、红帽认证高级讲师(RHCI);
曾任职于中国电信、鹏博士等多家IT企业,并创办多个企业,有十余年IT行业经验;
精通Linux系统、Shell脚本编程、各大云计算产品、Docker容器技术、分布式存储技术,拥有丰富的虚拟化技术使用经验,对企业集群存储环境及高性能、高可用架构有深入的研究,著有畅销图书《Linux运维之道》。
撰写本书的起因
云计算时代的到来,为企业带来了新的机遇与挑战。有了云计算,所有的资源都可以按需购买,类似于订火车票这样的问题迎刃而解。但是,云计算也给我们带来了新的难题,那就是如何更好地实现自动化运维、智能化运维!我们可以通过Shell、Python、Perl等脚本语言编写自动化脚本实现这样的目标。虽然Python在一些大的自动化项目中已经得到了充分的历练,但是作为Linux自动化运维的主流编程语言,Shell脚本依然不可替代,大量的自动化运维脚本依然需要使用Shell编写。而目前市面上常见的Shell脚本书籍,绝大多数还停留在讲解语法格式、知识点这个层面,很多读者读完类似Shell脚本的图书,发现语法格式学会了,但是在实际编写脚本时却又无从下手。编写本书的出发点就是希望在简单、直观地展现语法格式的同时,通过大量、深入的应用案例,帮助读者朋友们锻炼实际编写脚本的能力,培养思考问题、解决问题的能力。
Shell是一门非常容易上手且功能强大的编程语言,很多Linux系统维护者在工作中都会经常使用Shell脚本,但并不是每个人都擅长编写Shell脚本,一旦掌握了编写Shell脚本的规则与技巧,未来你的工作会更加轻松、更加高效!从1991年起至今,Linux已经快速成长为企业服务器产品的首选操作系统,越来越多的IT企业采用Linux作为其服务器端平台操作系统,为客户提供高性能、高可用的业务服务。本书在选择操作系统发行版本时,综合了各个发行版本的特点,最终选择了CentOS作为本书的基础系统平台。CentOS是众多Linux发行版本之一,但因为其源自RedHat框架,同时该版本完全开源,包括开放的软件YUM源,可以为用户带来更加方便的升级方法。另外,目前国内很多企业对于CentOS发行版也非常热衷,这也增加了本书的实用性。
本书结构
本书分为7章。
第1章主要讲述编写Shell脚本的基本格式及执行脚本的各种方式,如何通过脚本处理变量、使用正则过滤数据、在脚本中进行算术运算。
主要内容包括:
脚本的书写格式、执行脚本的各种方式。
数据的输入与输出、如何正确使用变量。
数据过滤与正则表达式。
算术运算。
第2章主要讨论如何让脚本变得更加智能,通过判断语句对各种业务可能出现的状况做出分析与判断,并根据判断结果进行相应的处理。本章会通过大量的案例展示如何编写一个更加健全、智能的自动化脚本。
主要内容包括:
如何在脚本中实现各种测试和判断。
if语句与case语句的基本语法格式。
模式匹配、通配符与扩展通配符。
编写行业项目案例。
第3章主要讲解如何使用循环避免人为执行工作中大量重复性的任务,大量且重复的机械式任务更适合让机器来完成。当人们找到解决问题的思路和方法后,机器可以更加高效地按照人类的思路和方法处理数据,最终获得我们需要的结果。
主要内容包括:
for与while循环的基本语法格式。
解决猴子吃香蕉的问题。
神奇的循环嵌套。
猜随机数字的游戏。
until和select的基本语法格式。
循环的中断与退出。
机选双色球。
第4章主要讲解数组、子Shell与函数。讲解数组在实际业务中的应用案例,分析子Shell对脚本的影响,讲解函数式编程思想,使用Shell脚本分析目前主流的排序算法。
主要内容包括:
斐波那契数列。
网站日志分析脚本。
启动进程的若干种方式。
函数与变量的作用域。
多进程脚本。
文件描述符与命名管道。
排序算法。
第5章主要讲解日常工作中编写脚本的一些技巧与方法,利用Shell的众多功能特性,可以让我们更加轻松地编写功能完善的脚本。本章还通过案例介绍了Shell脚本排错的方法与技巧。
主要内容包括:
Shell的扩展功能。
Shell解释器的属性与初始化命令行终端。
trap信号捕获。
脚本排错技巧。
xargs与shift。
编写行业项目案例。
第6章主要讲解文本编辑器sed,脚本借助于sed可以实现非交互编辑文件。在云计算运维工作中,我们经常需要修改或查看配置文件,本章通过大量案例演示如何通过脚本非交互地修改各种服务的配置文件。我们通过sed还可以在海量的数据中过滤需要的数据,可以编写网络爬虫脚本。
主要内容包括:
sed语法格式。
自动配置FTP、DHCP、SSH等网络服务。
自动化克隆与修改KVM虚拟机。
网络爬虫。
抽奖器。
第7章主要讲解awk编程语言,我们可以通过awk在脚本中实现更加灵活的数据过滤功能,可以通过awk进行数据统计工作,使用awk编写网络爬虫脚本。
主要内容包括:
awk基本语法格式。
监控主机网络连接状态。
性能监控脚本。
数据库监控脚本。
网络爬虫。
排版说明
关于本书中的排版,对于需要读者输入的命令,书中将使用等比例黑体加粗显示;对于计算机命令的返回结果,书中将使用等比例斜体字显示。当需要在文件中编写脚本时,对于打开及修改文本文件中的内容,书中会把文件中的内容放置于方框中排版和书写;对于需要读者注意的地方,书中会给出明确的注意提示。
本书读者
本书可以作为学习Shell编程的一本指南,主要针对具有Linux相关经验的从业人员,本书可以指导我们编写工作中需要的自动化运维脚本。另外,本书可以作为计算机培训参考教材。
关于配置文件及代码
本书部分主要的配置文件及代码可以在GitHub下载,地址为:https://github.com/ jacobproject/shell_scripts。
勘误
作者在编写本书的过程中已经花了大量的时间对内容进行审核与校验,但因为时间紧迫、精力有限,书中难免出现一些错漏,敬请广大专家和读者批评、指正。
关于本书,您有任何意见或建议,都可以发送邮件至ydh0011@163.com或使用博客平台https://blog.51cto.com/manual与我交流。
致谢
由于本书是我利用业余时间编写的,占用了大量本应该和家人在一起的欢乐时光,在此感谢家人对我的支持与勉励,感谢我的儿子(子墨)和女儿(紫悦)给家庭带来的无限欢乐。感谢我所有的同事对此项任务的全力配合与支持。感谢我的学生对本书的期待,是他们的无形支持促成了我编写本书。感谢生活中所有给予我帮助的朋友,是他们的支持让我不断地进步与创新,不管是工作中还是生活中,好朋友都是我成功的坚实后盾。感谢电子工业出版社的董英编辑为本书的出版提供的大力支持。感谢赵瑞杰为本书的修订提供的建议。
丁明一 • 北京