基本信息

编辑推荐
采用理论联系实际的方式,从系统管理出发,深入剖析Linux系统的运行原理,介绍Linux系统中的常用命令,理清Bash Shell编程的脉络。
结合作者多年的运维诊断经验,提供了大量实用性极强的脚本案例,对于广大Linux服务器运维人员来说,可谓“一书在手,运维不愁”。
内容简介
计算机书籍
《Linux系统命令及Shell脚本实践指南》由浅入深、全面、系统地介绍了Linux系统的基础命令和Shell脚本的开发。作为一本面向Linux入门用户的书籍,本书力求语言通俗易懂,用例简单明了,便于读者阅读领会。同时,全书穿插了不少要求读者动手实践的内容,不但可加深读者对内容的理解和消化,同时也可通过动手实践激发读者对Linux系统和Shell编程的兴趣,从而更好地驱动读者学习。
全书共计18章,从知识结构上分为三部分。第一部分为前8章,全面介绍了Linux的基础知识和常用命令;第二部分为第9章和第10章,主要是Linux下交互和非交互编辑器的使用;第三部分为第11~18章,主要是Shell脚本开发。这三部分内容各有偏重,读者可以根据实际需要选择阅读。
《Linux系统命令及Shell脚本实践指南》根据作者多年来Linux环境运维管理工作的经验编著而成,内容丰富,且注重实践讲解,非常适合Linux初学者和基于Linux平台的软件开发者学习或查阅。从内容结构上来看,本书摒弃了各章独立的写作风格,而是采取了各章有机结合的方式,自上而下自成一体,既加深了读者对单个知识点的理解,也有利于从全局把控Linux系统和Shell编程的精髓。
作译者
目录
推荐序1
推荐序2
前 言
第1章 Linux简介 1
1.1 Linux的发展历史 1
1.2 Linux的特点 2
1.3 系统安装 3
1.3.1 安装前的规划 3
1.3.2 安装RedHat 4
1.3.3 安装CentOS 11
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
前言
早在我还在大学校园时就对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系统已经改变了整个世界的面貌,也影响了我个人的职业乃至人生发展。
序言
认识王军是在2008年,还记得当年他说是怀着对Linux及开源软件极大的兴趣来参加我的课程。作为一个Linux从业10年并在开源软件培训业从事教学多年的我而言,说“阅人无数”毫不夸张,也因此对很多学生都没有太深刻的印象。随着课程的开展和对王军逐渐的了解,我渐渐地感受到他好学的精神和他对技术的执着,也逐渐对其心生敬佩,并坚定地认为,只需假以时日他一定能在Linux领域有所成绩。
课程结束后至今,我和他一直保持着断断续续的联系,也经常能从其他朋友的口中听到他的消息,事实证明他的努力已经逐渐得到越来越多的认可。在此期间我也在不少技术论坛上看到他的技术帖,其中很多文字表现出他对技术独到的见解。
一个偶然的机会再次见到王军,并得知他正在写一本关于Linux系统管理和Shell编程方面的书,当时就希望能在初步成稿后一览为快。拿到初稿后,我花了几个小时仔细通读了一遍,可以肯定这确实是一本凝结了他多年实际工作经验的作品。与很多Linux书籍不同,该书尽量避免使用生硬的技术词汇,对知识点的描述都尽量地做到“去技术化”、“去概念化”,同时也能看出各章节前后的衔接顺序包括各个知识点的出场他都做了精心设计,并深入浅出地加以描述,这些都是我认为该书是一本很好的Linux系统和Shell编程入门书籍的原因,初学者完全可以通过该书迅速入门,但是要想完全吃透该书还需要读者结合实际工作多次研读。
最后希望王军的书能帮助和带领更多的Linux系统爱好者进入Linux的殿堂,同时也希望王军能再接再厉,再出好书!
上海尚观科技有限公司教学总监、技术总监、首席系统架构师邹凯(Kissingwolf)
推荐序2
2010年有幸与王军共事,期间相处极为投缘。王军当时在公司主要负责推动平台虚拟化和自动化运维相关工作,在这段时间里王军给我的印象是为人热情,凡事有求必应;另一方面他非常热衷于技术研究,喜欢钻研新技术,喜欢突破创新,在那段时间里王军带着其他同事将公司原来的虚拟化平台进行了一次大规模升级,使公司系统更稳定,遗憾的是后来有了更好的发展机会他离开了51JOB。
得知王军的书稿已经完成并不日出版,为他高兴的同时也深感不易:他平时很忙且需要经常出差,能在日常繁忙工作的基础上,把一些知识要点记录下来已经是很少有人能做到的事情了,而且还能坚持整理成册,这绝对是需要毅力才能完成的工作。
借此机会分享一次与王军的聊天心得,这也是我们Linux服务器运维工程师心灵成长的点滴记录。运维工作已经不是搬搬服务器、扛扛交换机、配配网络的时代了,现在运维工作应该以“降低成本,提升用户体验”为目标。降低成本就无形要求运维技能的提升,如现在流行的“去IOE”,去掉高端、昂贵小型机服务器就必须用多台廉价的PC服务器代替,但又要保证系统稳定、高可用、可扩展性强,这样就要求运维工程师具备过硬的Linux技能。在提升用户体验的过程中,有三点极其重要:一是稳定,不能频繁宕机;二是要快,天下武功,唯快不破;三是界面友好,不能半天找不到操作按钮—这些都是与精湛的技术密不可分的。
收到王军的定稿并邀请写序,突然感觉到压力,一是自己很少写序,怕写不好;二是担心影响了王军的努力成果。在仔细阅读后,感觉本书最大特点是结构清晰、各章节前后贯穿、知识框架完整且覆盖全面,伴有大量深入浅出的案例,无疑是一本很好的Linux系统运维和Shell编程的作品,我很钦佩作者的技术功底。
本书从基础知识入手,系统讲解了Linux系统结构、主流服务器搭建及故障排除、用户权限管理、磁盘存储管理、文件系统管理、内存管理、进程管理、Shell编程等关键技术,同时,王军根据他多年的运维诊断经验,提供了大量实用性极强的脚本案例,对于广大Linux服务器运维人员来说,可谓“一书在手,运维不愁”。
51JOB系统经理兼架构师杨向勇
媒体评论
——高通中国高级测试经理 王锋
本书是作者在系统管理领域多年实践的精彩总结,没有花哨的语言,不是大而全的砖头书。从头到尾,循序渐进,让你对Linux的基本操作及其原理有全面、系统的认识。作者使用很大一部分篇幅阐述Linux下的脚本编程,相信这也是他对系统管理领域的深刻理解,只有掌握了扎实的编程技能,才能让系统管理井井有条,避免一些人为的低级错误。本书一定能给Linux初学者及系统管理员带来帮助。
——阿里巴巴技术专家 陈波
如果你正想系统学习Linux,或者需要通过学习Shell编程从平日复杂的工作中解放出来,那你一定不能错过本书。读完此书我必须说,这是一本不可多得的精品。本书结合作者多年一线Linux运维管理经验,对Linux系统和Shell编程做了详细周到的讲解,内容翔实,描述细致。与很多同类书籍不同,本书并非知识点的简单堆积,也非枯燥的机械化陈述,而是做到了各章有机结合,剥丝抽茧、娓娓道来,作者功力可见一斑。该书既是一本极佳的Linux 教材,又可作为从事Linux运维工作人员的运维指导手册,值得推荐!
——邮乐网技术总监 徐立宁
书摘
Linux简介
1.1Linux的发展历史
首先我们一起来了解一下应该怎么读Linux这个单词,根据Torvalds(Linux的发明者)在其多次公开场合中的说明,标准的读音应该是“哩呐科斯”,利用搜索引擎加关键字Linux pronunciation进行搜索,就可以看到具体的视频。
说到Linux就不得不提到UNIX,因为Linux是一种类UNIX的系统。早在1965年,贝尔实验室加入了一项由美国通用电气公司和麻省理工学院发起的合作计划,该计划要开发一个多用户、多进程、多层次的Multics操作系统。由于该计划实际进展太过缓慢,1969年便暂停了。不过该计划的参与者之一Ken Thompson已经从这项计划中获得了一些点子和收获,当时他有一个被称为“星际旅行”的程序在GE-635的机器上运行,因为该机器性能问题,运行“星际旅行”太慢,从而引发了他想将这个程序移植到一台性能更好的DPD-7上的想法,只是因为家中有小孩需要照顾而一直没有时间动手。巧合的是,在1969年8月左右,他的妻儿出门探亲了一个月,就在这一个月的时间里,Thompson编写了一个操作系统,并成功地将“星际旅行”移植到了DPD-7上,而这个操作系统就是UNIX的原型。
UNIX由于具有优秀的移植性而得到了广泛的关注和支持,1974年12月伯克利大学获得UNIX的源码,并动手将其修改为适合自己机器的版本,最终命名为BSD,这也是UNIX很重要的一个分支。由于当时还没有足够的版权意识,很多商业公司都开始了基于UNIX操作系统的开发,比如AT&T的System V、IBM的AIX等,在这段时期中也形成了UNIX的两大分支:System V和BSD。
后来AT&T公司出于商业考虑(贝尔实验室是从属于AT&T公司的),1979年在发行第七版UNIX时开始严格限制对学生提供源码。这对大学教学影响非常大,因为在无法看到源码的情况下,教学工作便很难进行。当时有个叫Tanenbaum的教授为避免版权纠纷,在完全不看UNIX源码的情况下,自己动手写了一个类UNIX的系统,并命名为Minix,这项工作从1984年持续到1986年。由于开发这个系统的出发点在于教学,所以用户对Minix的新需求往往得不到开发支持,只能基于Minix的源码自己进行修改。
1984年,Richard Stallman创立了GNU项目,由自由软件基金支持,GNU项目的目标是“开发一个完全自由的UNIX操作系统”。
“Hello everybody out there using minix, I抦 doing a free operation system”,1991年8月,网络上出现了以此开篇的帖子,这是一名芬兰的大学生为了写一个类Minix的系统而在寻找志同道合的伙伴,他就是著名的Linux之父—Linus Torvalds。同年10月5日,他在网络上发布了大约有1万行代码的Linux 0.01版本,次年已经有约1000人在使用Linux了。1993年,大约有100名程序员参与了Linux内核开发工作,其中核心人员有5名,此时Linux 0.99版本的代码大约有10万行,用户约为10万人。1994年,Linux加入了GNU,成为GNU项目中的一员,同年Linux 1.0版本发布,代码量大约有17万行,最早按照完全自由免费的协议发布,用户可以随意下载、使用、修改,而不需要通知作者。随后采用了GPL协议,很多开发人员开始将自己的代码贡献给核心小组,这也就使得当时的Linux系统对不同硬件都有着极好的支持,大大提高了不同平台间的可移植性。1995年,Linux可以在Intel、Digital等主流处理器上运行,用户量超过50万。1996年,Linux 2.0版本发布,并支持多处理器,此时的Linux进入实用阶段,用户量已经达到350万。1998年,RedHat公司宣布商业支持计划,迅猛推进了Linux的发展,至此Linux正式成为真正的服务器操作系统并继续成长。
1.2Linux的特点
从1991年问世到今天,Linux在服务器、桌面、行业定制等各级领域都获得了长足的发展,尤其在服务器领域获得了令人瞩目的成就,被业界认为是未来最有前途的操作系统之一。在嵌入式领域,由于Linux具有良好的移植性、丰富的代码资源等优点,也受到了越来越多的关注。下面我们就来看看这个操作系统有哪些主要特点。
第一,免费开源。Linux是一款完全免费的操作系统,任何人都可以从网络上下载到它的源代码,并可以根据自己的需求进行定制化的开发,而且没有版权限制。
第二,模块化程度高。Linux的内核设计分成进程管理、内存管理、进程间通信、虚拟文件系统、网络5部分,其采用的模块机制使得用户可以根据实际需要,在内核中插入或移走模块,这使得内核可以被高度的剪裁定制,以方便在不同的场景下使用。
第三,广泛的硬件支持。得益于其免费开源的特点,有大批程序员不断地向Linux社区提供代码,使得Linux有着异常丰富的设备驱动资源,对主流硬件的支持极好,而且几乎能运行在所有流行的处理器上。
第四,安全稳定。Linux采取了很多安全技术措施,包括读写权限控制、带保护的子系统、审计跟踪、核心授权等,这为网络环境中的用户提供了安全保障。实际上有很多运行Linux的服务器可以持续运行长达数年而无须重启,依然可以性能良好地提供服务,其安全稳定性已经在各个领域得到了广泛的证实。
第五,多用户,多任务。多用户是指系统资源可以同时被不同的用户使用,每个用户对自己的资源有特定的权限,互不影响。多任务是现代化计算机的主要特点,指的是计算机能同时运行多个程序,且程序之间彼此独立,Linux内核负责调度每个进程,使之平等地访问处理器。由于CPU处理速度极快,从用户的角度来看所有的进程好像在并行运行。
第六,良好的可移植性。Linux中95%以上的代码都是用C语言编写的,由于C语言是一种机器无关的高级语言,是可移植的,因此Linux系统也是可移植的。
1.3系统安装
1.3.1安装前的规划
可能会有读者正计划学习Linux而苦恼于不知道使用哪一个发行版,其实所有的发行版不管是RedHat、CentOS还是Ubuntu,其内核都是来自Linux内核官网(www.kernel.org),不同发行版之间的差别在于软件管理的不同,所以不管使用哪一个发行版,只要理解其原理之后,各类发行版的区别其实不大。当然对于初学者来说,拥有广泛的学习资源也是很重要的。由于RedHat公司进行了大力商业推广,且得益于其成熟的认证体系,因此使用RedHat的用户比较多,同时,它还有丰富的相关技术文档,以及活跃的社区,所以作为入门学习,可以使用RedHat。不过,近年来,CentOS发展也很迅猛,这个发行版和RedHat几乎完全一样,而且在某些方面还比RedHat略胜一筹,所以在本书中后面的所有内容中将主要使用版本为5.5的CentOS,小部分涉及RedHat的内容也将采用5.5版本。