猜你喜欢
Linux Shell核心编程指南

Linux Shell核心编程指南

书籍作者:丁明一 ISBN:9787121375712
书籍语言:简体中文 连载状态:全集
电子书格式:pdf,txt,epub,mobi,azw3 下载次数:1501
创建日期:2021-02-14 发布日期:2021-02-14
运行环境:PC/Windows/Linux/Mac/IOS/iPhone/iPad/Kindle/Android/安卓/平板
内容简介

在IT产业链中开源的理念已成为绝大多数企业的共识。随着开源技术的不断进步与创新,云计算也逐步深入到了每个互联网企业的内部。但是,随之而来的便是管理成本的提高,大量的物理或者虚拟主机需要管理与维护,如何能够更好地实现自动化运维,成为企业需要迫切解决的问题。行业中自动化运维的软件很多,Puppet、Saltstack、Ansible等让我们在云时代依然可以轻松管理和维护设备与业务,然而像Ansible这样的自动化工具,虽然已经内置了很多模块,但是在解决每个企业的个性化需求时还需要编写自动化脚本。《Linux Shell核心编程指南》将围绕Linux系统中常用的Shell脚本语言,讲解如何通过Shell编写自动化、智能化脚本。全书以案例贯穿,对每个知识点都可以找到与之对应的案例,完成本书中的每个案例对于未来在企业中的实际应用极具意义。另外,在《Linux Shell核心编程指南》中配套有很多游戏案例,通过编写游戏脚本可以极大地提升学习的乐趣。

《Linux Shell核心编程指南》中的代码可以在GitHub下载,现在的商业环境是一个充满竞争的环境,很多企业的业务量在不断地增长,对服务质量的要求也越来越高。特别是互联网企业为了满足客户更高的需求,提升用户使用体验,IT部门需要维护的设备数量从早期的几台,发展到了目前的数以万计,如此庞大的服务器维护量,通常会让IT管理人员头疼不已。《Linux Shell核心编程指南》介绍的自动化运维内容可以让我们快速掌握大规模批量处理的简单方法。

《Linux Shell核心编程指南》从基础知识讲到数据分析、数据过滤等高级应用,适合Linux运维人员、Shell编程爱好者阅读,可作为Linux运维人员的一本优秀的案头书。


作者简介

丁明一

达内集团云计算教学研发总监、开源技术推广者;
红帽认证架构师(RHCA)、红帽认证高级讲师(RHCI);
曾任职于中国电信、鹏博士等多家IT企业,并创办多个企业,有十余年IT行业经验;
精通Linux系统、Shell脚本编程、各大云计算产品、Docker容器技术、分布式存储技术,拥有丰富的虚拟化技术使用经验,对企业集群存储环境及高性能、高可用架构有深入的研究,著有畅销图书《Linux运维之道》。


编辑推荐

★ 本书作者是一个有着十多年行业经验的一线Linux专家级讲师,丁老师将多年的教学与实践经验进行了总结,融会贯通,皆为精华。

★ 作者所著畅销书《Linux运维之道》在业内广受好评,其内容通俗易懂,实用性强,让人受益匪浅,本书跟它一脉相承。

★ 本书围绕Linux系统中常用的Shell脚本语言,讲解如何通过Shell编写自动化、智能化脚本。每个知识点都有对应的案例,脚本可快速应用于生产。

★ 本书从基础知识讲到数据分析、数据过滤等高级应用,所介绍自动化运维内容可以让读者快速掌握大规模批量服务器运维的简单方法。


前言


撰写本书的起因

云计算时代的到来,为企业带来了新的机遇与挑战。有了云计算,所有的资源都可以按需购买,类似于订火车票这样的问题迎刃而解。但是,云计算也给我们带来了新的难题,那就是如何更好地实现自动化运维、智能化运维!我们可以通过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。


勘误

作者在编写本书的过程中已经花了大量的时间对内容进行审核与校验,但因为时间紧迫、精力有限,书中难免出现一些错漏,敬请广大专家和读者批评、指正。

关于本书,您有任何意见或建议,都可以发送邮件至[email protected]或使用博客平台https://blog.51cto.com/manual与我交流。


致谢

由于本书是我利用业余时间编写的,占用了大量本应该和家人在一起的欢乐时光,在此感谢家人对我的支持与勉励,感谢我的儿子(子墨)和女儿(紫悦)给家庭带来的无限欢乐。感谢我所有的同事对此项任务的全力配合与支持。感谢我的学生对本书的期待,是他们的无形支持促成了我编写本书。感谢生活中所有给予我帮助的朋友,是他们的支持让我不断地进步与创新,不管是工作中还是生活中,好朋友都是我成功的坚实后盾。感谢电子工业出版社的董英编辑为本书的出版提供的大力支持。感谢赵瑞杰为本书的修订提供的建议。



丁明一 北京





推荐序1

非常高兴得知好友丁明一老师的新书《Linux Shell核心编程指南》即将出版。同时有幸第一时间拜读了本书的电子版。本书所有内容皆源于丁老师的日常工作积累,作为一个有着十多年行业经验的一线Linux专家级讲师,丁老师将多年的教学与实践经验进行了总结,融会贯通,皆为精华。本书不单讲解Shell的各种语法及功能,还包含大量的有趣案例,都是丁老师在教学中积累的,极具参考价值。

目前市场上的IT类书籍琳琅满目,但许多是翻译国外现有书籍或赶工之作,在内容的专业性及文笔上或有欠缺,甚至让人产生更多的困惑。这也是很多专家和老师推荐直接阅读和学习外文原版书籍的原因,当然这对学员的科技英文阅读能力是小小的挑战。如今,有口皆碑的IT类书籍无不来自于作者在本专业的长期研究和思考,所幸《Linux Shell 核心编程指南》即属于此类浓缩作者经验的书籍,这也是我在此郑重推荐这本书的原因。

如今的IT领域,掌握自动化运维技能真的相当重要。无论是基础的Linux,还是云平台,运维、开发和测试人员均以DevOps思想来指导和开展工作,各种自动化运维工具如Python、Perl、Ansible、Puppet等不断涌现,但是Shell永远是一切的基础。Shell可以将Linux中的每条专注而高效的任务命令组合起来,从而完成复杂而美妙的事务。每位Linux工程师和学员皆明白脚本的重要性,尤其是在这个对自动化运维及运维开发工程师需求日益强烈的时代。Shell可以很简单,更可以很高效。类似于所有编程语言,如想掌握Shell编程的精华,一是要非常熟悉Linux中的各种命令参数,二是要勤于实践,三是要参考大师写的代码实例。初学者可在阅读本书的基础上,先模拟老师的案例代码,然后通过记忆来复现,最后举一反三,融会贯通。有经验的工程师则可以从本书中直接产生共鸣,获取灵感。

我相信,每位读者皆可以从本书中觅得惊喜。希望大家都能由此爱上Shell编程,爱上Linux,爱上开源。最后,再次衷心感谢丁明一老师对开源事业的辛勤付出!

贺正刚

红帽中国技术交付经理、高级认证考官

推荐序2

多年来,一直希望工作在IT运维或培训第一线的技术人员能不断总结经验,将其写成实用的小段子,甚至整理成书籍出版。今天很高兴看到了丁老师的书稿。

计算机技术既有高深的理论,又有非常强的实践性,很多相关操作必须自己动手做实验,甚至要经过多次失败才能够达到自己理想的目标。本书所涉及的Shell是既古老又年轻的技术。从UNIX、Linux使用的初始阶段,Shell就伴随着用户。而今在IT市场充斥着数字化转型等新名词的阶段,Shell脚本仍然在诸多方面起到至关重要的作用。

本书的特点是深入浅出,注重实用和实例。作为开源培训领域的资深讲师,丁老师在循序渐进地讲解技术方面有着多年的成功经验。与学院派的风格不同,职业教育更注重每项技术、技能在实际工作场合中的用途,相信读者在边读边做的过程中会有自己的切身体会。

淮晋阳

红帽中国培训渠道客户经理

推荐序3

很多刚开始学习Shell脚本编程的人,在学习了基本语法后,都会因为缺乏脚本案例而没有编写脚本的思路,很多人还没有开始真正的编程就已经放弃,这也是目前市面上其他类似图书的缺陷。而本书的亮点是既讲解了Shell的语法格式,又能让读者通过大量案例脚本,验证所学知识,构建编写脚本的思路,难能可贵。

周华飞

达内集团Python人工智能教学研发总监

推荐序4

以云计算、大数据、物联网和人工智能为代表的ICT技术在过去20年取得了巨大的进步,今天云化IT基础设施已经成为很多企业的选择,极大地降低了企业的创新门槛和业务成本。大数据分析技术也在科技、商业、制造领域得到广泛应用,通过对海量数据的分析,我们对这个世界的运行方式有了更深入的理解。图像识别、语音识别在很多场景下都得到了广泛应用,各种智能机器人也从工业领域走向日常生活,让我们的生活变得越来越智慧和便捷。

信息技术的发展,以及和行业的深入结合,让行业的智能化水平不断提升,生产效率快速提高,可以毫不夸张地说,ICT技术已经成为行业发展的动力引擎。

Linux是信息世界最重要的基础技术之一,也是云计算的关键技术,掌握Linux这个工具对于进一步探索智能世界有着极为重要的作用和意义。丁老师的作品《Linux Shell核心编程指南》深入浅出地介绍了Linux Shell编程技术,通过许多精心设计的小游戏把枯燥的技术变得生动有趣,大量的实战案例让读者获得真实的生产经验,相信这本书无论是对于初学者还是对于系统管理员和设计维护人员,都有极大的帮助。

信息技术和各行各业的结合仅仅是一个开始,未来几十年的发展必然会更加精彩和激动人心,未来已来,快抓紧Linux这把钥匙,踏上信息技术的高速列车,迎接未来的新时代吧!

陆海翔

华为云教育行业解决方案总经理

推荐序5

在当下的智能数据时代,无论是出于对效率的提升,还是出于对大规模系统的运维,自动化、智能化已是企业的必然选择。Shell脚本也成为每一位工程师必备的技能之一。

这本书是作者继《Linux运维之道》之后的又一力作,作者的著作我都详细阅读过,内容通俗易懂,实用性强,让人受益匪浅。《Linux Shell核心编程指南》也不例外,本书从Shell脚本的编写规范、基础理论,再到对Shell脚本执行过程的深度剖析,由浅入深、层次清晰,让读者能够知其因,晓其理;同时配备了大量适用于生产的实战案例,可见作者心思缜密,为本书费尽心血。

很多人会说,学了Shell和Linux相关技术,不知道怎么将其应用到企业中。那么我想说,这是一本可以从中获取答案的著作。初学者(新手)能从本书中系统地学习与掌握如何规范编写和使用Shell脚本,以及如何通过现有的知识点结合实战案例举一反三,应用到生产环境中,少走弯路。对于老司机们,本书系统阐述了Shell的知识点与大量实战案例,可以帮助你们获取新的启发与指导,让你们更高效、更智能化、更自动化地完成自己的工作,这是一本难得的且值得经常翻阅的工具书。书中内容读起来丰富精彩、层次有序、干货十足,值得各个层次的工程师阅读。

罗俊

亚马逊(Amazon)云架构师


目录

第1章 从这里开始,起飞了 1

1.1 脚本文件的书写格式 1

1.2 脚本文件的各种执行方式 3

1.3 如何在脚本文件中实现数据的输入与输出 6

1.4 输入与输出的重定向 17

1.5 各种引号的正确使用姿势 24

1.6 千变万化的变量 28

1.7 数据过滤与正则表达式 33

1.8 各式各样的算术运算 40


第2章 人工智能,很人工、很智能的脚本 46

2.1 智能化脚本的基础之测试 46

2.2 字符串的判断与比较 47

2.3 整数的判断与比较 49

2.4 文件属性的判断与比较 51

2.5 探究[[]]和[]的区别 55

2.6 实战案例:系统性能监控脚本 60

2.7 实战案例:单分支if语句 62

2.8 实战案例:双分支if语句 68

2.9 实战案例:如何监控HTTP服务状态 72

2.10 实战案例:多分支if语句 81

2.11 实战案例:简单、高效的case语句 87

2.12 实战案例:编写Nginx启动脚本 92

2.13 揭秘模式匹配与通配符、扩展通配符 94

2.14 Shell小游戏之石头剪刀布 100


第3章 根本停不下来的循环和中断控制 104

3.1 玩转for循环语句 104

3.2 实战案例:猴子吃香蕉的问题 114

3.3 实战案例:进化版HTTP状态监控脚本 116

3.4 神奇的循环嵌套 117

3.5 非常重要的IFS 124

3.6 实战案例:while循环 130

3.7 Shell小游戏之猜随机数字 134

3.8 实战案例:如何通过read命令读取文件中的数据 136

3.9 until和select循环 140

3.10 中断与退出控制 143

3.11 Shell小游戏之机选双色球 149


第4章 请开始你的表演,数组、Subshell与函数 152

4.1 强悍的数组 152

4.2 实战案例:斐波那契数列 157

4.3 实战案例:网站日志分析脚本 159

4.4 常犯错误的SubShell 164

4.5 启动进程的若干种方式 172

4.6 非常实用的函数功能 176

4.7 变量的作用域与return返回值 179

4.8 实战案例:多进程的ping脚本 185

4.9 控制进程数量的核心技术——文件描述符和命名管道 187

4.10 实战案例:一键源码部署LNMP的脚本 197

4.11 递归函数 204

4.12 排序算法之冒泡排序 206

4.13 排序算法之快速排序 209

4.14 排序算法之插入排序 213

4.15 排序算法之计数排序 215

4.16 Shell小游戏之单词拼接puzzle 218


第5章 一大波脚本技巧正向你走来 221

5.1 Shell八大扩展功能之花括号 221

5.2 Shell八大扩展功能之波浪号 223

5.3 Shell八大扩展功能之变量替换 224

5.4 Shell八大扩展功能之命令替换 234

5.5 Shell八大扩展功能之算术替换 234

5.6 Shell八大扩展功能之进程替换 236

5.7 Shell八大扩展功能之单词切割 238

5.8 Shell八大扩展功能之路径替换 239

5.9 实战案例:生成随机密码的若干种方式 240

5.10 Shell解释器的属性与初始化命令行终端 247

5.11 trap信号捕获 257

5.12 实战案例:电子时钟 259

5.13 Shell小游戏之抓住小老鼠算你赢 263

5.14 实战案例:脚本排错技巧 267

5.15 实战案例:Shell版本的进度条功能 270

5.16 再谈参数传递之xargs 276

5.17 使用shift移动位置参数 280

5.18 实战案例:Nginx日志切割脚本 281


第6章 上古神兵利器sed 285

6.1 sed基本指令 285

6.2 sed高级指令 305

6.3 实战案例:自动化配置vsftpd脚本 318

6.4 实战案例:自动化配置DHCP脚本 325

6.5 实战案例:自动化克隆KVM虚拟机脚本 329

6.6 实战案例:通过libguestfs管理KVM虚拟机脚本 337

6.7 实战案例:自动化配置SSH安全策略脚本 343

6.8 实战案例:基于GRUB配置文件修改内核启动参数脚本 345

6.9 实战案例:网络爬虫脚本 348

6.10 Shell小游戏之点名抽奖器 354


第7章 不可思议的编程语言awk 356

7.1 awk基础语法 356

7.2 awk条件判断 374

7.3 awk数组与循环 379

7.4 awk函数 388

7.5 实战案例:awk版网站日志分析 398

7.6 实战案例:监控网络连接状态 403

7.7 实战案例:获取SSH暴力破解攻击黑名单列表 412

7.8 实战案例:性能监控脚本 418

7.9 实战案例:数据库监控脚本 420

7.10 实战案例:awk版网络爬虫 429


产品特色