前言

前言

自从2004年本书第1版问世以来,Unix系统管理领域已经发生了不小的改变。当时鲜有普通的计算机用户会去碰类Unix操作系统,但随着像Ubuntu这种对新手颇为友好的Linux桌面发行版日渐流行,情况开始不一样了。接着出现了苹果公司新一代基于Unix的操作系统OS X以及大量基于iOS的技术。如今,类Unix操作系统的应用比以往任何时候都要广泛。如果把安卓智能手机也算在内的话,这可以说是世界上用户数量最为庞大的操作系统了。

尽管变化颇多,但作为流行于Unix用户之间的系统shell,Bourne-again shell(bash)至今仍旧屹立不倒。无论是系统管理员、工程师还是业余爱好者,如何充分发挥出bash脚本的威力都是当务之急。

本书可以为你带来什么

本书重点关注编写可移植的自动化脚本(例如构建软件或提供业务流程)时经常面对的那些难题,为此我们的做法是先实现一些常见任务的自动化。但如果想从本书中获得最大收益,就要将已形成的解决方案推广应用到其他类似的问题上。比如本书第1章创建了一个小型的包装器脚本,实现了echo的可移植版。尽管很多系统管理员都能受益于这个脚本,但其中真正的价值在于,创建包装器脚本这种一般性的解决方案能够确保跨平台行为的一致性。书中随后的章节将深入研究bash脚本编程中一些酷炫的特性以及Unix系统常见的实用工具,为你传授各种绝招。

目标读者

bash仍旧是类Unix服务器或工作站用户的主要工具,这些用户包括Web开发人员(很多人都是在OS X上做开发,然后部署到Linux服务器)、数据分析师、移动应用程序开发人员以及软件工程师,等等。除此之外,大量的业余爱好者也在自己的开源微型计算机(例如树莓派)上运行着Linux,实现智能家庭的自动化。shell脚本是这类用途的不二之选。

无论是对于在bash技艺上追求精益求精的老手,还是那些偶尔用一下终端或shell脚本的用户,书中所展现的脚本都大有裨益。后一阵营中的用户可能希望温习一些技巧或是学点bash的高级概念,给自己再充充电。

本书并非教程!其目标是通过(基本上)简短紧凑的脚本教会你bash脚本编程的实用技术以及常见工具的用法,但不会去逐行解释脚本。本书只讲解每个脚本的核心内容,有经验的shell脚本用户通过阅读代码就能明白其余的部分。你大可放开手脚,把脚本拆解开来,根据自己的需要修改,借此达到融会贯通的目的。书中的脚本旨在解决那些三天两头就会碰上的麻烦事,比如Web管理或是文件同步,不管用的是什么工具,每个技术专家都得应付这类问题。

内容组织

本书第2版对上一版中共计12章内容做了与时俱进的更新,另外还增添了3章全新的内容。每一章都会演示新的特性或shell脚本用例,两者相互结合,共同展示了各种可用于提高Unix日常使用效率的shell脚本用法。OS X用户请放心:书中大部分脚本在Linux或OS X下都没有问题。如有例外,我们会特别指出。

第0章 shell脚本速成

第2版中新添加的这一章为Unix新用户快速地介绍了bash脚本的语法及其用法。从“什么是shell脚本”这种最基本的问题到构建并执行简单的shell脚本,本章内容简明扼要,毫无废话,旨在帮助你尽快进入状态,为接下来的第1章奠定基础。

第1章 遗失的代码库

Unix环境中的编程语言,尤其是C、Perl和Python,都包含了各式各样的函数与实用工具库,可用于验证数字格式、计算日期偏差以及执行其他的任务。和shell打交道时,有大量的工作需要我们自己来完成,因此这一章关注的是那些能够简化shell脚本的工具以及鲜为人知的技巧。无论是对于本书中的脚本还是你自己编写的脚本,在这里所学到的知识都能够派上用场,其中包括各种输入验证函数、一个简约却不简单的脚本化bc前端、可以快速插入逗号并提高多位数可读性的工具、一种能够解决某些Unix版本不支持echo命令-n选项的技术,以及一个支持在脚本中使用ANSI颜色序列的脚本。

第2章 改进用户命令

第3章 创建实用工具

这两章介绍了一些可用于拓展Unix功能的新命令。Unix的一个出色之处在于其自身总是在不断地成长和演进。我们在此给出了多个脚本,其中包括一个易用的交互式计算器、反删除工具、两个提示/事件跟踪系统、locate命令的重制版、多时区date命令,以及增强了目录列表功能的ls新版本。

第4章 Unix调校

这么说可能显得骇人听闻,但在经历了数十年的发展之后,Unix的某些方面看起来已经支离破碎了。如果你辗转尝试过不同的Unix版本,尤其是开源的Linux发行版和商业版Unix,比如像OS X、Solaris或是Red Hat,就会注意到这些版本之间所存在的选项缺失、命令缺失、命令不一致等类似问题。为了提高Unix命令的友好性或一致性,这一章重写了一些命令并为其加上了前端,其中就包括为非GNU命令增添GNU风格的全字(full-word)命令选项。另外,这一章还给出了两个精巧的脚本,大大降低了与各式文件压缩工具打交道时的难度。

第5章 系统管理:用户管理

第6章 系统管理:系统维护

如果你翻开了这本书,那么可以推测你可能负责着不止一个Unix系统的管理任务,哪怕只是个人版的Ubuntu或BSD盒子(BSD box)。这两章中给出了大量能够提高管理工作效率的脚本,其中包括磁盘用量分析工具、自动向超额用户发送电子邮件的磁盘配额系统、killall命令的重制版、crontab验证程序、日志文件轮替(rotation)工具以及若干备份工具。

第7章 Web与Internet用户

这一章给出了一些令人拍案叫绝的shell脚本技巧,展示了Unix命令行在处理网络资源时所用到的那些既简单又神奇的方法,其中包括URL提取工具、天气预报跟踪程序、电影数据库搜索器以及能够自动发送邮件提醒的网站变更跟踪程序。

第8章 网站管理员绝招

也许你还在自家的Unix系统或网络共享服务器上运行并管理着网站,这一章提供了一些值得一试的脚本工具,可以帮助你动态创建Web页面、生成基于Web的相册,甚至是记录Web搜索日志。

第9章 Web与Internet管理

第10章 Internet服务器管理

对于搭建在Internet上的服务器,管理员总是面对着各种挑战,这两章就是来处理这些问题的,其中包括了两个Web服务器流量日志分析脚本、网站无效链接识别工具,以及一个可用于简化 .htaccess文件维护任务的Apache密码管理工具,除此之外,还研究了目录及全站镜像技术。

第11章 OS X脚本

在将Unix融入用户友好型操作系统的道路上,OS X取得的巨大进步得益于其富有吸引力并在商业上获得成功的图形用户界面。更重要的是,由于在华丽的界面背后,OS X包含了一套完整的Unix系统,因此出现了大量为其编写的实用脚本,这也正是这一章要为读者讲解的内容。除了自动化抓屏工具,我们还研究了保存iTunes音乐库的方法、如何更改Terminal的窗口标题,以及如何强化open命令。

第12章 shell脚本趣用与游戏

一本编程书里怎么能少了游戏?这一章结合书中多种复杂的技术及设计思路,创造出了6个既有趣又不失挑战性的游戏。尽管这一章旨在娱乐,但这些游戏的代码同样很值得学习。尤其值得一提的是猜词游戏(hangman game),该游戏在实现过程中运用了一些精妙的编码技术以及shell脚本技巧。

第13章 与云共舞

自本书第1版发行以来,Internet在我们的日常生活中占据了越来越重要的地位,很多时候大家都在忙于通过云服务(例如iCloud、Dropbox和Google Drive)同步设备和文件。这一章包含了一些能够充分利用云服务备份/同步文件和目录的shell脚本,另外还演示了在脚本中运用与照片或文本-语音转换相关的OS X特性。

第14章 ImageMagick及图像处理

命令行的应用并不仅限于文本处理。这一章专门讲述了如何利用开源软件ImageMagick中的图像处理工具集识别并处理图片。无论是判断图像类型,还是为图像添加边框和水印,一些常见的任务都可以使用这一章中的脚本搞定。

第15章 天数与日期

最后一章简化了与日期和预约相关的烦人细节,其中包括:计算两个日期之间的时长、某一天是星期几以及距离指定日期还有多久。这些问题全都可以利用便捷的shell脚本来解决。

附录A 在Windows 10中安装bash

第2版撰写期间,微软开始大力改善自己在开源界的形象,于2016年在Windows 10中发布了一个完整的bash环境。尽管我们并没有针对该版本的bash测试过书中的例子,但是很多概念和解决方法应该同样适用。本附录介绍了在Windows 10中安装bash的方法,这样你就可以在自己的Windows机器上尝试动手编写一些令人刮目相看的脚本了!

附录B 免费福利

每一名优秀的童子军都知道不能没有B计划!就本书而言,我们得确保在写作期间备份所有的脚本,避免可能出现的意外情况。现在本书既然已经出版,也就用不着再备份了,不过好友之间还是应该开诚布公。本附录包含了3个额外的脚本:批量文件重命名、批量运行命令以及查找月相(phase of the moon)。既然先前都已经为你准备了101个脚本,那么剩下这几个也不用再藏着掖着了。

在线资源

所有shell脚本的源文件都可以在图灵社区本书主页(http://ituring.com.cn/book/2485)下载,其中还包括了在脚本中用到那些例子的资源文件,比如脚本#84中用于猜词游戏的单词列表,脚本#27中节选自《爱丽丝梦游仙境》的摘录。

最后的话

希望你会喜欢这本shell脚本经典著作的更新版。乐趣是学习过程中不可缺少的一部分,之所以在书中挑选这些例子,正是因为它们不仅写起来好玩,而且摆弄起来也很有意思。我们很享受本书的撰写过程,希望你也能够展卷愉悦。同乐!

电子书

扫描如下二维码,即可购买本书电子版。

{%}

目录

  • 版权声明
  • 前言
  • 致谢
  • 第 0 章 shell脚本速成
  • 第 1 章 遗失的代码库
  • 第 2 章 改进用户命令
  • 第 3 章 创建实用工具
  • 第 4 章 Unix调校
  • 第 5 章 系统管理:用户管理
  • 第 6 章 系统管理:系统维护
  • 第 7 章 Web与Internet用户
  • 第 8 章 网站管理员绝招
  • 第 9 章 Web与Internet管理
  • 第 10 章 Internet服务器管理
  • 第 11 章 OS X脚本
  • 第 12 章 shell脚本趣用与游戏
  • 第 13 章 与云共舞
  • 第 14 章 ImageMagick及图像处理
  • 第 15 章 天数与日期
  • 附录 A 在Windows 10中安装bash
  • 附录 B 免费福利