Linux系统命令及Shell脚本实践指
《Linux系统命令及Shell脚本实践指南》由浅入深、全面、系统地介绍了Linux系统的基础命令和Shell脚本的开发。作为一本面向Linux入门用户的书籍,《Linux系统命令及Shell脚本实践指南》力求语言通俗易懂,用例简单明了,便于读者阅读领会。同时,全书穿插了不少要求读者动手实践的内容,不但可加深读者对内容的理解和消化,同时也可通过动手实践激发读者对Linux系统和Shell编程的兴趣,从而更好地驱动读者学习。 全书共计18章,从知识结构上分为三部分。第一部分为前8章,全面介绍了Linux的基础知识和常用命令;第二部分为第9章和第10章,主要是Linux下交互和非交互编辑器的使用;第三部分为第11~18章,主要是Shell脚本开发。这三部分内容各有偏重,读者可以根据实际需要选择阅读。 《Linux系统命令及Shell脚本实践指南》根据作者多年来Linux环境运维管理工作的经验编著而成,内容丰富,且注重实践讲解,非常适合Linux初学者和基于Linux平台的软件开发者学习或查阅。从内容结构上来看,《Linux系统命令及Shell脚本实践指南》摒弃了各章独立的写作风格,而是采取了各章有机结合的方式,自上而下自成一体,既加深了读者对单个知识点的理解,也有利于从全局把控Linux系统和Shell编程的精髓。
基本信息
- 书名
Linux系统命令及Shell脚本实践指
- 外文名
Linux Commands and Shell Scripting
- 作者
王军
- 类型
计算机与互联网
- 出版社
机械工业出版社
基本介绍
内容简介
采用理论联系实际的方式,从系统管理出发,深入剖析Linux系统的运行原理,介绍Linux系统中的常用命令,理清Bash Shell编程的脉络。 结合作者多年的运维诊断经验,提供了大量实用性极强的脚本案例,对于广大Linux服务器运维人员来说,可谓“一书在手,运维不愁”。
作者简介
王军 拥有近8年系统工程师、网络工程师工作经验。2006年年初开始从事信息技术相关工作,先后参与过校园交换网、公司办公网以及大中型互联网公司的高可用网络架构设计,有丰富的网络实战经验。2008年进入Linux系统运维领域,并相继在国内多家著名企业(易趣、51JOB、阿里云)就职,从事网络工程师、系统工程师工作,工作内容涉及大规模商用云计算虚拟化平台运维、系统架构、企业网络设计。自行设计和部署过国内多家大型网站的高可用集群。对系统、网络、数据库都有深刻的理解,多次在国内一些技术论坛和博客中发表技术文档,颇受关注。现任国家电网某子公司资深技术顾问。
媒体推荐
本书作者王军拥有国内多家著名IT公司的服务经历,在繁忙的工作之余,他仍笔耕不辍,将多年来在Linux领域的钻研、磨练与实践凝结成文,以回馈多年来在Linux社区获得的帮助,是帮助初学者提升学习曲线的可贵尝试。全书深入浅出地讲述了Linux系统命令、Shell脚本编程,附加大量实战脚本,是学习Linux系统的有力指南。本书亦有工具书特色,本人使用Linux多年,翻阅此书仍为其内容的实用性所吸引,受益匪浅。 ——高通中国高级测试经理?王锋 本书是作者在系统管理领域多年实践的精彩总结,没有花哨的语言,不是大而全的砖头书。从头到尾,循序渐进,让你对Linux的基本操作及其原理有全面、系统的认识。作者使用很大一部分篇幅阐述Linux下的脚本编程,相信这也是他对系统管理领域的深刻理解,只有掌握了扎实的编程技能,才能让系统管理井井有条,避免一些人为的低级错误。本书一定能给Linux初学者及系统管理员带来帮助。 ——阿里巴巴技术专家?陈波 如果你正想系统学习Linux,或者需要通过学习Shell编程从平日复杂的工作中解放出来,那你一定不能错过本书。读完此书我必须说,这是一本不可多得的精品。本书结合作者多年一线Linux运维管理经验,对Linux系统和Shell编程做了详细周到的讲解,内容翔实,描述细致。与很多同类书籍不同,本书并非知识点的简单堆积,也非枯燥的机械化陈述,而是做到了各章有机结合,剥丝抽茧、娓娓道来,作者功力可见一斑。该书既是一本极佳的Linux 教材,又可作为从事Linux运维工作人员的运维指导手册,值得推荐! ——邮乐网技术总监?徐立宁
图书目录
推荐序1 推荐序2 前 言 第1章 Linux简介1 1.1 Linux的发展历史1 1.2 Linux的特点2 1.3 系统安装3 1.3.1 安装前的规划3 1.3.2 安装RedHat4 1.3.3 安装CentOS11 1.4 系统登录16 1.4.1 第一次登录系统的设置16 1.4.2 使用图形模式登录21 1.4.3 使用终端模式登录23 1.4.4 开始学习使用Linux的命令24 1.5 系统启动流程25 1.5.1 系统引导概述25 1.5.2 系统运行级别26 1.5.3 服务启动脚本27 1.5.4 Grub介绍29 1.6 获得帮助31 1.6.1 使用manpage31 1.6.2 使用infopage32 1.6.3 其他获得帮助的方式32 第2章 Linux用户管理33 2.1 Linux用户和用户组33 2.1.1 UID和GID33 2.1.2 /etc/passwd和/etc/shadow34 2.2 Linux账号管理36 2.2.1 新增和删除用户36 2.2.2 新增和删除用户组39 2.2.3 检查用户信息39 2.3 切换用户40 2.3.1 切换成其他用户40 2.3.2 用其他用户的身份执行命令:sudo41 2.4 例行任务管理43 2.4.1 单一时刻执行一次任务:at43 2.4.2 周期性执行任务:cron44 2.4.3 /etc/crontab的管理45 第3章 Linux文件管理46 3.1 文件和目录管理46 3.1.1 绝对路径和相对路径47 3.1.2 文件的相关操作48 3.1.3 目录的相关操作51 3.1.4 文件时间戳53 3.2 文件和目录的权限54 3.2.1 查看文件或目录的权限:ls—al54 3.2.2 文件隐藏属性55 3.2.3 改变文件权限:chmod56 3.2.4 改变文件的拥有者:chown56 3.2.5 改变文件的拥有组:chgrp57 3.2.6 文件特殊属性:SUID/SGID/Sticky57 3.2.7 默认权限和umask58 3.2.8 查看文件类型:file60 3.3 查找文件60 3.3.1 一般查找:find61 3.3.2 数据库查找:locate61 3.3.3 查找执行文件:which/whereis62 3.4 文件压缩和打包63 3.4.1 gzip/gunzip63 3.4.2 tar63 3.4.3 bzip263 3.4.4 cpio64 第4章 Linux文件系统65 4.1 文件系统65 4.1.1 什么是文件系统65 4.1.2 ext2文件系统简介65 4.1.3 ext3文件系统简介66 4.2 磁盘分区、创建文件系统、挂载66 4.2.1 创建文件系统:fdisk66 4.2.2 磁盘挂载:mount69 4.2.3 设置启动自动挂载:/etc/fstab70 4.2.4 磁盘检验:fsck、badblocks70 4.3 Linux逻辑卷71 4.3.1 什么是逻辑卷71 4.3.2 如何制作逻辑卷72 4.4 硬链接和软链接76 4.4.1 什么是硬链接76 4.4.2 什么是软链接77 第5章 字符处理79 5.1 管道79 5.2 使用grep搜索文本79 5.3 使用sort排序80 5.4 使用uniq删除重复内容82 5.5 使用cut截取文本82 5.6 使用tr做文本转换83 5.7 使用paste做文本合并84 5.8 使用split分割大文件84 第6章 网络管理86 6.1 网络接口配置86 6.1.1 使用ifconfig检查和配置网卡86 6.1.2 将IP配置信息写入配置文件87 6.2 路由和网关设置88 6.3 DNS客户端配置89 6.3.1 /etc/hosts89 6.3.2 /etc/resolv.conf90 6.4 网络测试工具90 6.4.1 ping90 6.4.2 host91 6.4.3 traceroute91 6.4.4 常见网络故障排查92 第7章 进程管理94 7.1 什么是进程94 7.2 进程和程序的区别95 7.3 进程的观察:ps、top95 7.4 进程的终止:kill、killall98 7.5 查询进程打开的文件:lsof99 7.6 进程优先级调整:nice、renice101 第8章 Linux下的软件安装103 8.1 源码包编译安装103 8.1.1 编译、安装、打印HelloWorld程序103 8.1.2 使用源码包编译安装Apache106 8.2 RPM安装软件108 8.2.1 什么是RPM108 8.2.2 RPM包管理命令:rpm109 8.2.3 包依赖关系110 8.2.4 使用RPM包安装gcc110 8.2.5 使用RPM包安装Apache112 8.3 yum安装软件114 8.3.1 yum命令的基本用法114 8.3.2 使用yum安装Apache115 8.3.3 RedHat使用yum的问题115 8.3.4 自建本地yum源118 8.3.5 自建网络yum源121 8.4 三种安装方法的比较123 8.5 重建RPM包124 8.5.1 创建重建环境124 8.5.2 快速重建RPM包124 8.5.3 以spec文件重建RPM包125 8.5.4 spec文件简介126 第9章 vi和vim编辑器129 9.1 vi和vim编辑器简介129 9.2 vi编辑器129 9.2.1 模式介绍129 9.2.2 案例练习130 9.3 vim编辑器134 9.3.1 多行编辑134 9.3.2 多文件编辑134 9.3.3 使用vimtutor深入学习vim136 9.4 gedit编辑器137 9.4.1 gedit编辑器简介137 9.4.2 启动gedit编辑器138 第10章 正则表达式139 10.1 正则表达式基础139 10.1.1 什么是正则表达式139 10.1.2 基础的正则表达式140 10.1.3 扩展的正则表达式143 10.1.4 通配符144 10.2 正则表达式示例146 10.3 文本处理工具sed150 10.3.1 sed介绍150 10.3.2 删除151 10.3.3 查找替换152 10.3.4 字符转换153 10.3.5 插入文本153 10.3.6 读入文本154 10.3.7 打印154 10.3.8 写文件154 10.3.9 sed脚本155 10.3.10 高级替换155 10.3.11 sed总结156 10.4 文本处理工具awk157 10.4.1 打印指定域158 10.4.2 指定打印分隔符158 10.4.3 内部变量NF159 10.4.4 打印固定域159 10.4.5 截取字符串159 10.4.6 确定字符串的长度160 10.4.7 使用awk求列和160 第11章 Shell编程概述161 11.1 Shell简介161 11.1.1 Shell是什么161 11.1.2 Shell的历史163 11.1.3 Shell的功能164 11.1.4 Shell编程的优势164 11.2 第一个Shell脚本164 11.2.1 编辑第一个Shell脚本164 11.2.2 运行脚本165 11.2.3 Shell脚本的排错166 11.3 Shell的内建命令169 第12章 BashShell的安装184 12.1 确定你的Shell版本184 12.2 安装bash184 12.3 使用新版本的BashShell186 12.4 在Windows中安装bash187 第13章 Shell编程基础191 13.1 变量191 13.1.1 局部变量191 13.1.2 环境变量191 13.1.3 变量命名197 13.1.4 变量赋值和取值198 13.1.5 取消变量199 13.1.6 特殊变量199 13.1.7 数组200 13.1.8 只读变量202 13.1.9 变量的作用域203 13.2 转义和引用205 13.2.1 转义205 13.2.2 引用206 13.2.3 命令替换207 13.3 运算符208 13.3.1 算术运算符209 13.3.2 位运算符209 13.3.3 自增自减211 13.4 其他算术运算211 13.4.1 使用$[]做运算211 13.4.2 使用expr做运算212 13.4.3 内建运算命令declare212 13.4.4 算术扩展213 13.4.5 使用bc做运算213 13.5 特殊字符215 13.5.1 通配符215 13.5.2 引号215 13.5.3 注释符215 13.5.4 大括号216 13.5.5 控制字符217 13.5.6 杂项217 第14章 测试和判断218 14.1 测试218 14.1.1 测试结构218 14.1.2 文件测试219 14.1.3 字符串测试220 14.1.4 整数比较222 14.1.5 逻辑测试符和逻辑运算符223 14.2 判断224 14.2.1 if判断结构224 14.2.2 if/else判断结构225 14.2.3 if/elif/else判断结构226 14.2.4 case判断结构227 第15章 循环229 15.1 for循环229 15.1.1 带列表的for循环229 15.1.2 不带列表的for循环231 15.1.3 类C的for循环232 15.1.4 for的无限循环233 15.2 while循环234 15.2.1 while循环的语法234 15.2.2 使用while按行读取 文件235 15.2.3 while的无限循环236 15.3 until循环237 15.3.1 until循环的语法237 15.3.2 until的无限循环238 15.4 select循环238 15.5 嵌套循环239 15.6 循环控制241 15.6.1 break语句241 15.6.2 continue语句241 第16章 函数243 16.1 函数的基本知识243 16.1.1 函数的定义和调用243 16.1.2 函数的返回值244 16.2 带参数的函数246 16.2.1 位置参数246 16.2.2 指定位置参数值247 16.2.3 移动位置参数248 16.3 函数库249 16.3.1 自定义函数库249 16.3.2 函数库/etc/init.d/functions简介249 16.4 递归函数251 第17章 重定向255 17.1 重定向简介255 17.1.1 重定向的基本概念255 17.1.2 文件标识符和标准输入输出255 17.2 I/O重定向255 17.2.1 I/O重定向符号和用法255 17.2.2 使用exec260 17.2.3 HereDocument262 第18章 脚本范例263 18.1 批量添加用户脚本263 18.2 检测服务器存活266 18.3 使用expect实现自动化输入268 18.4 自动登录ftp备份270 18.5 文件安全检测脚本272 18.6 ssh自动登录备份273 18.7 使用rsync备份275 18.8 使用netcat备份277 18.9 使用iptables建立防火墙279 18.10 自定义开机启动项的init脚本282 18.11 使用脚本操作MySQL数据库286 18.12 基于LVM快照的MySQL数据库备份288 18.13 页面自动化安装LAMP环境291
序言
前 言 为什么要写这本书 早在我还在大学校园时就对Linux产生了极大的兴趣,期间我热衷于下载、安装、体验各种不同的Linux发行版,并尝试使用Linux作为我的桌面系统。但实际情况是,由于大学中使用群体极小,学校又没有开设直接的Linux系统课程,虽然我花了不少的课余时间去研究它,但始终感觉不得其法,难以入门。至今我依然记得当时使用鼠标双击好不容易才复制桌面上的rpm包,并抱怨为什么没有出现类似于Windows的“安装向导”。所以实际上有很长一段时间,面对Linux系统我能做的少之又少。 2006年大学毕业后,我有幸进入了一直梦寐以求的IT行业,并从此正式走上了技术之路。工作中能实际接触到Linux系统运维是我在该领域发展的很重要的外部因素,工作的驱使和个人的兴趣成为我每天坚持学习Linux的源动力。但当时很尴尬的一个现实是:一方面互联网行业的高速发展促进了Linux如火如荼的发展,另一方面又很难找到真正适合“新手”的入门级教材,得到一本简单明了的入门书籍是我当时迫切的愿望。于是在走了不少弯路并感觉自己已经“迷路”之后,我报名参加了Linux系统工程师社会培训班,利用工作之余系统并完整地学习了Linux。事实证明,当时的选择是正确的,这直接影响了我至今的职业发展乃至今后的职业规划。 经历了多年的工作后,我也非常希望能有机会与大家分享自己在IT领域的体会,所以也经常在一些技术网站发表技术文章,或是与志同道合的朋友一起举办免费的网络培训班。但是总体来说,所涉及的内容大多零碎、不成体系。筹划本书的初期,我想把重点放在Linux系统管理、高性能计算、高可用集群甚至云计算这些“够时髦”的主题上,但是反复思考后觉得,“时髦”的技术永远在变,而且限制了读者范围。但是对我、对很多梦想学习Linux的读者来说这更是一个机会:用最简单、最朴素、最基础的语言讲解和描述Linux系统以及如何使用它,给更多初学者以“可以学会”的希望和“努力前行”的力量。 出于这样的考虑,我在组织本书的内容时尽量安排书的各个章节以及每章节中的每个小节,甚至是每小节中的知识点的出现顺序符合新手的认知规律,做到从易到难,从基础到提高,以循序渐进的方式将各类知识点以人物出场、层次推进的方式呈现在读者面前,尽量避免将生僻的术语突然摆在读者面前,造成读者思维上的困扰,并且尽量使用简单明了的文字和浅显易懂的比喻帮助读者理解、消化。尽管如此,我还是希望读者能在此基础上展开阅读,并根据实际需要做必要的深入理解。 总之,这是一本讲解Linux系统和Shell编程的入门级书籍,内容主要涉及Linux的基础命令、编辑器的使用和Shell脚本的开发。 读者对象 本书适合以下读者阅读: Linux爱好者 Linux初学者 希望学习Shell编程的读者 希望了解系统的网络工程师 网站前后台开发人员 如何阅读本书 本书从知识结构上分为三大部分,第一部分(第1~8章)为基础内容,详细地介绍了Linux的历史发展、安装使用、用户管理、文件管理、文件系统、字符处理、网络管理、进程管理和软件安装。第二部分(第9~10章)为编辑器部分,内容为Linux下常用编辑器vi和vim的用法和基于流处理的sed和awk工具,这是管理Linux系统的基本技能。第三部分(第11~18章)为Shell编程,内容包括Shell的安装、使用、语法,其中最后一章是本部分的重点,该章所有脚本在实际应用中有很高的使用率。 如果你是Linux的初学者,我建议从第1章开始阅读。第二部分的内容涉及vi和vim编辑器的操作细节,建议读者通读。如果读者已经有一定的基础,希望学习Shell脚本开发,可以直接跳至第三部分学习。 勘误和支持 由于作者的水平有限,编写的时间也很仓促,书中难免会出现一些错误或者不准确的地方,恳请读者批评指正。如果你有更多的宝贵意见,欢迎你发送邮件至我的邮箱johnwang.wangjun@gmail.com,或是关注我的新浪微博 weibo.com/u/1186347743,我很期待能够听到你们的真挚反馈。 致谢 首先,感谢伟大的Linux之父Linus Torvalds,他最初开发的这套Linux系统已经改变了整个世界的面貌,也影响了我个人的职业乃至人生发展。 感谢那些无数个为了解决问题而彻夜无眠的夜晚,感谢那些在寒冬凌晨的三四点接到报警电话后集体上阵的兄弟姐妹们,感谢那些年一起扛起24×7运维任务的战友们,这一切无疑是我人生中最宝贵的财富。 感谢机械工业出版社华章公司的编辑杨绣国(Lisa),感谢她在这一年多的时间里始终支持我的写作,她的鼓励和帮助引导我顺利完成全部书稿。 谨以此书,献给我最亲爱的家人,以及众多热爱Linux的朋友们。 王军 2013年10月于上海