Linux就该这么学

978-7-115-47031-7
作者: 刘遄
译者:
编辑: 傅道坤

图书目录:

详情

本书旨在打造最简单易学且最具实用性的Linux入门教程,其内容涵盖了最基础的Linux系统安装到各种高级服务的部署(如iptables和firewalld、SSH、Apache、vsftpd、Samba、BIND、DHCP、Postfix、Dovecot、Squid等)。本书还覆盖了红帽RHCSA+RHCE认证的考试内容。通过本书,读者可以迅速入门Linux,为Linux的进阶打好坚实的基础。

图书摘要

版权信息

书名:Linux就该这么学

ISBN:978-7-115-47031-7

本书由人民邮电出版社发行数字版。版权所有,侵权必究。

您购买的人民邮电出版社电子书仅供您个人使用,未经授权,不得以任何方式复制和传播本书内容。

我们愿意相信读者具有这样的良知和觉悟,与我们共同保护知识产权。

如果购买者有侵权行为,我们可能对该用户实施包括但不限于关闭该帐号等维权措施,并可能追究法律责任。

• 著    刘 遄

  责任编辑 傅道坤

• 人民邮电出版社出版发行  北京市丰台区成寿寺路11号

  邮编 100164  电子邮件 315@ptpress.com.cn

  网址 http://www.ptpress.com.cn

• 读者服务热线:(010)81055410

  反盗版热线:(010)81055315


本书源自日均阅读量近万次火爆的线上同名课程,口碑与影响力俱佳,旨在打造简单易学且实用性强的轻量级Linux入门教程。

本书基于最新的红帽RHEL系统编写,且内容通用于CentOS、Fedora等系统。本书共分为20章,内容涵盖了部署虚拟环境、安装Linux系统;常用的Linux命令;与文件读写操作有关的技术;使用Vim编辑器编写和修改配置文件;用户身份与文件权限的设置;硬盘设备分区、格式化以及挂载等操作;部署RAID磁盘阵列和LVM;firewalld防火墙与iptables防火墙的区别和配置;使用ssh服务管理远程主机;使用Apache服务部署静态网站;使用vsftpd服务传输文件;使用Samba或NFS实现文件共享;使用BIND提供域名解析服务;使用DHCP动态管理主机地址;使用Postfix与Dovecot部署邮件系统;使用Squid部署代理缓存服务;使用iSCSI服务部署网络存储;使用MariaDB数据库管理系统;使用PXE+Kickstart无人值守安装服务;使用LNMP架构部署动态网站环境等。此外,本书还深度点评了红帽RHCSA、RHCE、RHCA认证,方便读者备考。

本书适合打算系统、全面学习Linux技术的初学人员阅读,具有一定Linux使用经验的用户也可以通过本书来温习自己的Linux知识。


本书作者刘遄(Liu Chuán)从事于Linux运维技术行业,高中时期便因兴趣的驱使而较早地接触到了Linux系统并开始学习运维技术,并且在2012年获得红帽工程师RHCE 6版本证书,在2015年初又分别获得红帽工程师RHCE 7版本证书与红帽架构师认证RHCA顶级证书。

尽管如此,但依然深知水平有限且技术一般,若不是得益于良师益友的无私帮助,肯定不能如此顺利地取得上述成绩。并且,作为一名普通的技术人,我亲身经历过半夜还在培训班的心酸,体验过拥堵6小时车程的无奈,也翻看过市面上十几本如同嚼蜡般的Linux技术书籍,这让我更加坚定了写作本书的信念。此刻,我正是怀揣着一颗忐忑的心,尽自己最大的努力把有用的知识分享给读者,希望你们能够少走一些弯路,更快地入门Linux系统。

窃以为,一名技术高超的导师不应该仅仅是技术的搬运工,而应该是优质知识的提炼者,所以在写作本书的过程中,我不希望也不会将自己了解掌握的所有技术知识都写到书里,借此来炫技,而是从真正贴近于新人学习特点的角度出发,主动摒弃了不实用的部分,并把重点、难点反复实践,以加深读者对理论基础的理解,并彻底掌握生产环境中用到的技术内容。

本书基于最新的Linux系统RHEL 7编写而成,而且配套软件及资料完全免费,课程面向Linux新手。本书会从零基础带领读者入门Linux系统,然后渐进式地提高内容难度,使其匹配生产环境对运维人员的要求。而且,本书每章都配套有大量的图、表、命令示例以及课后习题,以达到增强读者学习兴趣与加深记忆的效果。最后,本书以及配套资源相较于当前的RHCE培训,至少要多出40%的内容,只要您能每天坚持学习,相信这绝对是您体验最佳、进步最快的一次学习经历。

最后想说的是,我的写作初心其实并不高雅,只是在还债,还十几年来中国有如此多的培训机构赚了那么多钱,但却没有培训机构真正给学员提供一本好教材的债,而这应该是我们的学员早就应该享受的服务,不能再选择性失明了。而到了2017年,我的写作初衷也融入了一点小私心,除了运营好《Linux就该这么学》图书的在线学习网站http://www.linuxprobe. com/,服务更多的学员和读者之外,还要把我们的免费开源图书做到远超其他培训机构收费教材的水平,并坚持做中国开源站点的道德典范,不欺骗,不作恶,保持最纯净的技术交流环境,而我们想要得到的也很简单——如果您认可了刘遄老师的付出并满意我们的服务,还请把本书告诉身边的朋友,让更多的人知道我们在做的这件很酷的事。

我不想回避这个问题——学习是件痛苦的事情。如果说学习Linux真的很简单,那必是骗子的谎言,起码这不能给您带来高薪。在每次起床后的几分钟时间里,大脑都会陷入斗争状态——是该聊会天呢,还是要追个美剧呢,还是打一局英雄联盟呢,还是看一下那该死的刘遄写的那本可怕的Linux教材呢?这个时候,请不要忘记自己最初的梦想。十年后的你,一定会感激现在拼命努力学习的自己。身为作者,我的使命就是让本书对得起你为此花费的时间、精力和金钱,让你每学完一个章节都是一次进步。

稻盛和夫先生在《活法》中有段一直激励着我的话,现在转送给正在阅读本书的你:

“工作马马虎虎,只想在兴趣和游戏中寻觅快活,充其量只能获得一时的快感,绝不能尝到从心底涌出的惊喜和快乐,但来自工作的喜悦并不像糖果那样——放进嘴里就甜味十足,而是需要从苦劳与艰辛中渗出,因此当我们聚精会神,孜孜不倦,克服艰辛后的成就感,世上没有哪种喜悦可以类比”。

“更何况人类生活中工作占据了较大的比重,如果不能从劳动中、工作中获得充实感,那么即使从别的地方找到快乐,最终我们仍然会感到空虚和缺憾”。

简单来说,开源软件的特点就是把软件程序与源代码文件一起打包提供给用户,让用户在不受限制地使用某个软件功能的基础上还可以按需进行修改,或编制成衍生产品再发布出去。用户具有使用自由、修改自由、重新发布自由以及创建衍生品的自由。这也正好符合了黑客和极客对自由的追求,因此国内外开源社区的根基都很庞大,人气也相当高。

坦白来讲,每位投身于Linux行业的技术人或者程序员只要听到开源项目就会由衷地感到自豪,这是一种从骨子里带有的独特情怀。开源的企业不单纯是为了利益,而是互相扶持,努力服务好更多的用户。开源软件最重要的特性有下面这些。

但是,如果开源软件为了单纯追求“自由”而牺牲程序员的利益,这将会影响程序员的创造激情,因此世界上现在有60多种被开源促进组织(Open Source Initiative)认可的开源许可协议来保证开源工作者的权益。对于那些只知道一味抄袭、篡改、破解或者盗版他人作品的不法之徒,终归会在某一天收到法院的传票。对于准备编写一款开源软件的开发人员,也非常建议先了解一下当前最热门的开源许可协议,选择一个合适的开源许可协议来最大限度保护自己的软件权益。

早在20世纪70年代,UNIX系统是开源而且免费的。但是在1979年时,AT&T公司宣布了对UNIX系统的商业化计划,随之开源软件业转变成了版权式软件产业,源代码被当作商业机密,成为专利产品,人们再也不能自由地享受科技成果。

于是在1984年,Richard Stallman面对于如此封闭的软件创作环境,发起了GNU源代码开放计划并制定了著名的GPL许可协议。1987年时,GNU计划获得了一项重大突破——gcc编译器发布,这使得程序员可以基于该编译器编写出属于自己的开源软件。随之,在1991年10月,芬兰赫尔辛基大学的在校生Linus Torvalds编写了一款名为Linux的操作系统。该系统因其较高的代码质量且基于GNU GPL许可协议的开放源代码特性,迅速得到了GNU计划和一大批黑客程序员的支持。随后Linux系统便进入了如火如荼的发展阶段。

1994年1月,Bob Young在Linux系统内核的基础之上,集成了众多的源代码和程序软件,发布了红帽系统并开始出售技术服务,这进一步推动了Linux系统的普及。1998年以后,随着GNU源代码开放计划和Linux系统的继续火热,以IBM和Intel为首的多家IT企业巨头开始大力推动开放源代码软件的发展。到了2017年年底,Linux内核已经发展到了4.13版本,并且Linux系统版本也有数百个之多,但它们依然都使用Linus Torvalds开发、维护的Linux系统内核。RedHat公司也成为了开源行业及Linux系统的带头公司。

在讲课时,我经常会问同学们一个问题:“为什么学习Linux系统?”很多学生为了让我高兴,直接就说“因为Linux系统是开源的,所以要去学习”。其实这个想法是完全错误的!开源的操作系统少说有100个,开源的软件至少也有十万个,为什么不去逐个学习?所以上面谈到的开源特性只是一部分优势,并不足以成为您付出精力去努力学习的理由。

对于用户来讲,开源精神仅具备锦上添花的效果,因此正确的学习动力应该源自于:Linux系统是一款优秀的软件产品,具有类似UNIX的程序界面,而且继承了UNIX的稳定性,能够较好地满足工作需求。

大多数读者应该都是从微软的Windows系统开始了解计算机和网络的,因此肯定会有这样的想法“Windows系统很好用啊,而且也可足以满足日常工作需求呀”。客观来讲,Windows系统确实很优秀,但是在安全性、高可用性与高性能方面却难以让人满意。您应该见过下面这张图片。

想必读者现在已经能猜到,为什么要在需要长期稳定运行的网站服务器上、在处理大数据的集群系统中以及需要协同工作的环境中采用Linux系统了。通过下图也可以看出Linux系统相较于Windows系统的具体优势。

在介绍常见的Linux系统版本之前,首先需要区分Linux系统内核与Linux发行套件系统的不同。

全球大约有数百款的Linux系统版本,每个系统版本都有自己的特性和目标人群,下面将可以从用户的角度选出最热门的几款进行介绍。

注:

 

本书全篇将以“Linux系统”来替代“Linux发行套件系统”这个词。

现在国内大多数Linux相关的图书都是围绕CentOS系统编写的,作者大多也会给出围绕CentOS进行写作的一系列理由,但是很多理由都站不住脚,根本没有剖析到CentOS系统与RHEL系统的本质关系。CentOS系统是通过把RHEL系统释放出的程序源代码经过二次编译之后生成的一种Linux系统,其命令操作和服务配置方法与RHEL完全相同,但是去掉了很多收费的服务套件功能,而且还不提供任何形式的技术支持,出现问题后只能由运维人员自己解决。经过这般分析基本上可以判断出,选择CentOS的理由只剩下——免费!当人们大举免费、开源、正义的旗帜来宣扬CentOS系统的时候,殊不知CentOS系统其实早在2014年年初就已经被红帽公司“收编”,当前只是战略性的免费而已。再者说,根据GNU GPL许可协议,我们同样也可以免费使用RHEL系统,甚至是修改其代码创建衍生产品。开源系统在自由程度上没有任何差异,更无关道德问题。

本书是基于最新的RHEL 7系统编写的,书中内容及实验完全通用于CentOS、Fedora等系统。也就是说,当您学完本书后,即便公司内的生产环境部署的是CentOS系统,也照样可以搞得定。更重要的是,本书配套资料中的ISO镜像与红帽RHCSA及RHCE考试基本保持一致,因此更适合备考红帽认证的考生使用。

注:

 

本小节的内容是我在2015年写给学员的一篇文章,现在RHEL 7系统已经经过近三年的迭代更新,此时再回看这篇文章,发现我的预测还是很准确吧。当前,国内大多数机房都已经部署了RHEL 7系统,国内外多家银行机构、保险公司系统也纷纷上线CentOS 7或RHEL 7系统,但我依然想引用这篇文章来帮助读者了解RHEL 7系统,而且我也深信这篇文章同样也会适用于未来的RHEL 8系统。

2014年年末,RedHat公司推出了当前最新的企业版Linux系统——RHEL 7,彼时国内外各大媒体都给了不少特写镜头,行业也给予了硕大的期待。但是,时至今日RHEL 7系统的市场占有率却一直不温不火,于是有人开始对RHEL 7系统的未来表示担心,甚至有人还拿出各种论调来唱衰Linux系统,觉得开源厂商已经过了事业最高点,要在服务器领域让步于Windows系统了。这些话其实并没必要去反驳,任何一个产品都会有其拥趸和黑粉,时间会向所有人证明一切。我们现在只是来单纯地聊一聊这个RHEL 7系统。

在正式开聊之前,希望读者对Linux系统特性和运维领域有基本的了解,知道Linux系统在服务器领域中占据着不可小觑的市场份额,认识到RedHat厂商对Linux系统及整个开源行业的重要影响,更知道CentOS系统其实是RHEL系统的衍生品。如果以前使用过一段时间的RHEL 7系统,我们就更能顺畅地讨论“红帽Linux系统是否是一个失败的产品”这个问题。

我们先来看一个烫手的热议问题:“为什么半年过去了,RHEL 7系统的市场份额依然不温不火?要不要返回去学习老版本的Linux系统?”甚至有阴谋论说美国在使用新版本的Linux系统来搜集全球信息,告诫我们千万不要去碰。这个问题必须要回应,否则更多的阴谋论会层出不穷,甚至会让国内某些认知能力欠缺的媒体对开源行业产生误解甚至曲解。

基于前面提到的与读者共有的经验共识和篇幅限制,下面的论证速度会比较快,也会很有意思。首先,RHEL是企业版的服务器系统而不是用来玩耍折腾的桌面机系统,更何况作为桌面操作系统的Windows 7在2009年7月14日发布之后,整整用了3年才开始真正普及,难道在2009年到2013年间,Windows 7就是失败的产品吗?再者,RHEL 7系统创新式地集成了Docker虚拟化技术,支持XFS文件系统,兼容微软的身份管理,并采用systemd作为系统初始化进程,其性能和兼容性相较于之前版本都有了很大的改善,很明显是一款非常优秀的操作系统。最后,其实单从纳入OpenStack和Docker的决策上来讲,就应该相信红帽的开发团队不是在闭门造车。因此应该重新考虑到底是哪里出了问题。

运维人员在心里经常会想:“现在的环境跑得好好的,为什么要换呢?”重新部署生产环境不是说装上操作系统万事大吉,也不是把软件随便安装上就能拍屁股走人的,还要考虑升级带来的风险。

……

客观来讲,这次RHEL 7系统的改变实在太大,最重要的是它采用了systemd作为初始化进程。这样一来,几乎之前所有的运维自动化脚本都需要修改。那么,到底还要不要升级到RHEL 7?当然,也不是说服务器机房中的生产环境从不更新换代,当工作需求超过了当前版本的能力范围时,就必须要进行升级。比如,rsyslogd日志记录服务在RHEL 6系统中的版本是5.8,而现在最新的版本已经是8.1。这两个版本之间差了3个大的主版本号,其功能就有了很大的差距,您觉得会一直用旧的版本吗?

早在2014年年初,Fedora系统首次采用了systemd系统初始化进程,当时我就断言RHEL 7系统也会使用systemd,所以当即更新了自己的培训课程。这也让身在其他培训机构还在学习init参数的用户新生艳羡。所以,不论是学习Linux还是编程语言,都应该选择当前稳定且最新的版本作为学习环境。

我每次在公开场合讲座时都会表达这样一个观点:“我们并不是因为开源而喜欢Linux,而是因为Linux系统真的非常优秀,开源精神仅仅是锦上添花而已。”我们在前文中已经狠狠地肯定了Linux系统对运维行业甚至是对世界的影响。大家要做的就是去相信我对运维行业未来发展的判断,然后放手来学习吧。

红帽公司成立于1993年,是全球首家收入超10亿美元的开源公司,总部位于美国,分支机构遍布全球。红帽公司作为全球领先的开源和Linux系统提供商,其产品已被业界广泛认可并使用,尤其是RHEL系统在业内拥有超高的Linux系统市场占有率。红帽公司除了提供操作系统之外,还提供了虚拟化、中间件、应用程序、管理和面向服务架构的解决方案。

红帽认证是由红帽公司推出的Linux认证,该认证被认为是Linux行业乃至整个IT领域价值最高的认证之一。红帽认证考试全部采用上机形式,在考察学生基础理论能力的同时还考察了实践动手操作以及排错能力。红帽公司针对红帽认证制定了完善的专业评估与认证标准,其认证主要包括红帽认证系统管理员(RHCSA)、红帽认证工程师(RHCE)与红帽认证架构师(RHCA)。

2014年6月10日,红帽公司在发布新版红帽企业版系统(RHEL 7)的当天即在红帽英文官网更新了其对RHCSA与RHCE培训政策的调整,考生只有先通过红帽RHCSA认证后才能考取红帽RHCE认证。

红帽认证进阶等级图

红帽认证系统管理员(Red Hat Certified System Administrator,RHCSA)属于Linux系统的初级认证,比较适合Linux爱好者。该认证要求考生对Linux系统有一定的了解,并且能够熟练使用Linux命令来完成以下任务:

红帽认证管理员(RHCSA)证书示例

红帽认证工程师(Red Hat Certified Engineer,RHCE)属于Linux系统的中级水平认证,难度相对RHCSA认证来讲更大,而且要求考生必须已获得RHCSA认证。该认证适合有基础的Linux运维管理员,主要考察对下列服务的管理与配置能力:

红帽认证工程师(RHCE)证书示例

红帽认证架构师(Red Hat Certified Architect,RHCA)属于Linux系统的最高级别认证,是公认的Linux操作系统顶级认证,目前中国仅有不到1000人(2017年更新数据)持有该认证。考生需要在获得RHCSA与RHCE认证后再完成5门课程的考试才能获得RHCA认证,因此难度最大,备考时间最长,费用也最高(考试费约在1.8万元~2.1万元人民币)。该认证考察的是考生对红帽卫星服务、红帽系统集群、红帽虚拟化、系统性能调优以及红帽云系统的安装搭建与维护能力。

红帽认证架构师(RHCA)证书示例

红帽RHEL 7版本的RHCA认证需要完成至少5门考试。这5门考试的时间不同,但均为210分合格(70%)。而且红帽公司非常注重RHCA架构师认证的实用性,所以课程总是在随行业趋势而不断调整。

下表为2017年最新版的考试课程。欲取得红帽RHCA认证,您必须通过以下任意5门认证考试。

考试代码

认证名称

EX210

红帽 OpenStack 认证系统管理员考试

EX220

红帽混合云管理专业技能证书考试

EX236

红帽混合云存储专业技能证书考试

EX248

红帽认证 JBoss 管理员考试

EX280

红帽平台即服务专业技能证书考试

EX318

红帽认证虚拟化管理员考试

EX401

红帽部署和系统管理专业技能证书考试

EX413

红帽服务器固化专业技能证书考试

EX436

红帽集群和存储管理专业技能证书考试

EX442

红帽性能调优专业技能证书考试

首先,感谢广大读者从众多Linux图书中最终选择了本书,感谢你们的厚爱与信任。相信本书不会让你们失望的。

其次,感谢跟随刘遄老师一起努力打拼的各位成员,他们是(以加入团队时间排序):逄增宝、岳永、张宏宇、冯琪、黄烨婧、冯振华、张振宇、唐资富、刘峰、王辉、苏西云、李帅、陶武杰、王浩、郭建鹏、周晓雪、郝大发、倪家兴、郑帅、姜显赫、高军、王毅、任维国、张雄、周阳、程伟、任倩倩、吴向平、华世发。感谢你们相信我,为了我们共同的事业而奋勇向前,如果没有你们的帮助和支持,就不会有现在的成绩。在过去两年中,我们从一个每天只有十几人次访问的小博客,发展到了每天将近一万人次访问的公众站点;在两年内更是接连开通了近30个QQ技术交流群,群内读者已超过5万人;微信公众号也从0做到了10万粉丝,这些都是此前中国任何一本技术类电子图书没有达到的高度和成就。尤其在最近一年,我们的发展速度远远领先于同行业所有的资讯网站和教育机构,优质图书内容与读者口碑让我们走的每一步都如此扎实。现在我们可以很自豪地讲:“我们用努力留住了用户,用户看到了我们的付出。”

再次,感谢人民邮电出版社的傅道坤编辑。我们在2015年末初次接触后傅老师便主动提起出版本书的想法,随后一起用了近2年的时间共同打磨本书。感谢傅老师一直以来给予的信任和中肯实用的建议。感谢北京联合大学应用科技学院王廷梅院长在我研究生进修教育学期间的照顾和悉心培育,是您引导我步入了教育学和计算机科学与技术专业。不忘母校,不忘联大。

最后也是最重要的,感谢我的父母和妻子。当我在2015年说想要写一本Linux技术图书的时候,感谢你们相信了我。感谢我的妻子能够理解我的压力,一起来协助管理在线培训班及招生工作,让我有了更多的时间来写作。如果没有你们的信任和陪伴,我不敢想象自己现在会是什么样子。

本书是一本注重实用性的Linux技术自学图书,自电子版公布后日均阅读量近万次。本书以及后续的进阶篇图书将继续一如既往地免费、完整地提供给各位读者。当前,我们正在世界各地部署图书配套站点的镜像服务器,旨在用最快的网站响应速度满足您心中那个求知的小宇宙。此外,我们的团队成员在完善、更新本书内容以及配套软件的同时,还将为您收集、整理值得每天一看的“新闻资讯”和“技术干货”。当然,也欢迎您到我们的QQ技术群(http://www.linuxprobe.com/club)中寻找技术大牛!

而这一切的便利与服务,只差您现在的一个选择,赶紧拿起手机扫描下面的微信二维码吧。


与刘遄老师初次相识是在2016年。当时因为自身的工作性质使然,每天都在网络上四处瞎逛,寻求一些可以拿来进行纸质出版的资源,并时刻幻想着哪一天也能捡到个宝,让我有机会打造一本有爆款潜力的高质量精品图书。

直到有一天,偶然闯入刘遄老师运营的www.linuxprobe.com网站,看到他精心编写的本书同名线上教程以及真实用户的全五星好评,不由地心中暗喜“天不负我”!于是,马不停蹄地给刘遄老师发邮件、加QQ,商讨合作事宜。终于,在不亚于“求职面试”难度的多轮沟通之后,我们在与兄弟出版社的竞争中脱颖而出,赢得了刘老师的“芳心”。然后才有了大家现在看到的这本打着“异步社区”LOGO的《Linux就该这么学》。

在本书写作出版期间,我经常会与刘遄老师进行交流,讨论稿件本身的问题、封面设计事宜,以及后期的营销计划,刘老师所具备的专业、严谨、细心和执行力让我深感折服。

沟通多了之后,话题也慢慢地从图书本身向外扩展,工作、生活、家庭、课业都是我们谈论的话题。慢慢地,我也得知,刘遄老师早在高中时期便因为兴趣驱使而接触到Linux系统并开始学习运维技术,还先后获得了红帽认证管理员、红帽认证工程师以及最顶级的红帽认证架构师等证书。刘遄老师对Linux技术发自肺腑的热爱和痴迷,是他多年以来一直从事Linux系统运维培训以及红帽认证课程培训的源动力。在这个行业的长期浸淫,也让他成长为国内开源行业颇具影响力的技术大V。

刘遄老师针对Linux系统培训的教学思想相当具有前瞻性和独特性。他始终认为,一名优秀的IT技术培训讲师应该将技术知识进行提炼总结之后再传授给学生,而不能仅仅是一名技术知识的搬运工。这也是《Linux就该这么学》的写作原则。在本书写作过程中,刘遄老师真正做到了断舍离,他从真正贴近于新人学习特点的角度出发,抛弃了不重要、不实用的内容,着重将笔墨用在了“重点、难点知识的讲解,以及与理论基础的结合、实践”方面,由此写就了一本最适合Linux新手入门的教程。

刘遄老师花费了近3年时间写作的这本《Linux就该这么学》,前后修订1500余次,在出版之前又拿出半年时间再次修正、校对,这也从源头保障了图书的品质。当前,本书电子版的日均访问量近10000次,累计在线阅读人数已达到百万级别,是国内当之无愧的高质量Linux系统自学图书。

本书基于最新的红帽系统RHEL 7编写,但是其内容也通用于CentOS、Fedora等常见的Linux衍生版本。难能可贵的是,刘遄老师还在书中讲解了红帽认证考试体系以及考试要求,如果您有志于考取红帽认证,也可以与刘老师进一步交流。

为了降低各位读者的学习门槛,保持学习热情,提高学习效率,刘老师对本书的内容编排也是煞费苦心。书中的章节内容会保持适度的关联性,读者在按照章节顺序学习之时,可以通过“学新”而起到“温故”的效果。

无论读者学习Linux系统的目的是出于兴趣,还是为了谋求一份高薪工作,这本高品质、高颜值的《Linux就该这么学》都是您入门Linux系统的首选教程。

Choose it! Buy it! Read it!

傅道坤

本书责任编辑


本章讲解了如下内容:

 

  • 准备您的工具;

  • 安装配置VM虚拟机;

  • 安装您的Linux系统;

  • 重置root管理员密码;

  • RPM(红帽软件包管理器);

  • Yum软件仓库;

  • systemd初始化进程。

本章从零基础详细讲解了虚拟机软件与红帽Linux系统,完整演示了VM虚拟机的安装与配置过程,以及红帽RHEL 7系统的安装、配置过程和初始化方法。此外,本章还涵盖了在Linux系统中找回root管理员密码、RPM与Yum软件仓库的知识,以及RHEL 7系统中systemd初始化进程的特色与使用方法。

所谓“工欲善其事,必先利其器”,在本章学习过程中,读者需要搭建出为今后练习而使用的红帽RHEL 7系统环境。您不需要为了练习实验而特意再购买一台新电脑,下文会讲解如何通过虚拟机软件来模拟出仿真系统。虚拟机是能够让用户在一台真机上模拟出多个操作系统的软件。一般来讲当前主流的硬件配置足以胜任安装虚拟机的任务,并且依据刘遄老师近10年的运维技术学习及多年的在线培训经验来看,建议您无论经济条件是否允许,都不应该在学习期间把Linux系统安装到真机上面,因为在学习过程中都免不了要“折腾”您的Linux操作系统。通过虚拟机软件安装的系统不仅可以模拟出硬件资源,把实验环境与真机文件分离保证数据安全,更酷的是当操作失误或配置有误导致系统异常的时候,可以快速把操作系统还原至出错前的环境状态,进而减少重装系统的等待时间(在真机上安装Linux操作系统每次至少需要30分钟)。

最近几年在讲课时,总会发现同学们使用的实验环境五花八门,有CentOS,有RHEL 6,还有Debian系统等,结果每次给他们排错时都费心劳力,苦不堪言,而且特别无语。就像您报名去学习日料,老师用柳刃,您非要用长刀,结果寿司肯定会被切的稀巴烂。聪明的学生在学习时一定会采用跟老师一样的工具和环境,这样出现问题后可以首先排除环境问题并迅速定位错误,等技术学的足够扎实了,到了生产环境中自然也就具备了随心选择工具和环境的能力。所以尤其建议没有报名参加刘遄老师开设的付费培训班的同学,一定要充分发挥自己的自学能力,否则长期的实验出错一定会影响您的学习兴趣。

另外,说来也很郁闷,其实我在初中时就有学习Linux系统的打算,但那时候上网还不便捷,想要安装Linux系统就必须去买光盘才行,而那个时候安装Linux系统至少需要6张光盘(CD-ROM容量大约为700MB),狠下心买回家后尝试安装了几次却一直报错,因为搞不懂报错原因而只能放弃了。2015年春节前打扫屋子时又翻出了这些光盘,这次终于找到了当年出错误的原因,原来是第五张光盘被“刮花”了,系统相关的依赖关系包被损坏,最终导致Linux系统安装失败。原本可以早几年就可以接触到Linux系统,结果因为这个原因而耽搁,真的是既郁闷又尴尬,所以这里必须狠狠地提醒各位同学:“工具准备齐全后一定要校验完整性,不要重蹈我的覆辙”。

VMware WorkStation虚拟机软件是一款桌面计算机虚拟软件,让用户能够在单一主机上同时运行多个不同的操作系统。每个虚拟操作系统的硬盘分区、数据配置都是独立的,而且多台虚拟机可以构建为一个局域网。Linux系统对硬件设备的要求很低,我们没有必要再买一台电脑,课程实验用虚拟机完全可以搞定,而且VM还支持实时快照、虚拟网络、拖曳文件以及PXE(Preboot Execute Environment,预启动执行环境)网络安装等方便实用的功能。

可能会有读者有疑问“为什么要用收费的虚拟机产品来搭建实验环境,而不是用一些免费的开源虚拟机软件呢?”本书前言中讲到,我们学习Linux系统的原因不是因为它免费,也不是因为它开源,而是因为Linux系统真的很好用,这个结论同样也适用于VMware Workstation这款产品。

运行下载完成的Vmware Workstation虚拟机软件包,将会看到如图1-1所示的虚拟机程序安装向导初始界面。

图1-1 虚拟机软件的安装向导初始界面

在虚拟机软件的安装向导界面单击“下一步”按钮,如图1-2所示。

图1-2 虚拟机的安装向导

在最终用户许可协议界面选中“我接受许可协议中的条款”复选框,然后单击“下一步”按钮,如图1-3所示。

图1-3 接受许可条款

选择虚拟机软件的安装位置(可选择默认位置),选中“增强型键盘驱动程序”复选框后单击“下一步”按钮,如图1-4所示。

根据自身情况适当选择“启动时检查产品更新”与“帮助完善VMware Workstation Pro”复选框,然后单击“下一步”按钮,如图1-5所示。

选中“桌面”和“开始菜单程序文件夹”复选框,然后单击“下一步”按钮,如图1-6所示。

图1-4 选择虚拟机软件的安装路径

图1-5 虚拟机的用户体验设置

图1-6 虚拟机图标的快捷方式生成位置

一切准备就绪后,单击“安装”按钮,如图1-7所示。

图1-7 准备开始安装虚拟机

进入安装过程,此时要做的就是耐心等待虚拟机软件的安装过程结束,如图1-8所示。

图1-8 等待虚拟机软件安装完成

大约5~10分钟后,虚拟机软件便会安装完成,然后再次单击“完成”按钮,如图1-9所示。

双击桌面上生成的虚拟机快捷图标,在弹出的如图1-10所示的界面中,输入许可证密钥,或者选择试用之后,单击“继续”按钮(这里选择的是“我希望试用VMware Worksatation 12 30天”复选框)。

在出现“欢迎使用VMware Workstation 12”界面后,单击“完成”按钮,如图1-11所示。

在桌面上再次双击快捷方式,此时便看到了虚拟机软件的管理界面,如图1-12所示。

图1-9 虚拟机软件安装向导完成界面

图1-10 虚拟机软件许可验证界面

图1-11 虚拟机软件的感谢界面

图1-12 虚拟机软件的管理界面

注意,在安装完虚拟机之后,不能立即安装Linux系统,因为还要在虚拟机内设置操作系统的硬件标准。只有把虚拟机内系统的硬件资源模拟出来后才可以正式步入Linux系统安装之旅。VM虚拟机的强大之处在于不仅可以调取真实的物理设备资源,还可以模拟出多网卡或硬盘等资源,因此完全可以满足大家对学习环境的需求,再次强调,真的不用特意购买新电脑。

在图1-12中,单击“创建新的虚拟机”选项,并在弹出的“新建虚拟机向导”界面中选择“典型”单选按钮,然后单击“下一步”按钮,如图1-13所示。

图1-13 新建虚拟机向导

选中“稍后安装操作系统”单选按钮,然后单击“下一步”按钮,如图1-14所示。

图1-14 选择虚拟机的安装来源

注:

 

在近几年的讲课过程中真是遇到了很多不听话的学生,明明要求选择“稍后安装操作系统”单选按钮,结果非要选择“安装程序光盘镜像文件”单选按钮,并把下载好的RHEL 7系统的镜像选中。这样一来,虚拟机会通过默认的安装策略为您部署最精简的Linux系统,而不会再向您询问安装设置的选项。

如果您是购买图书自行学习的话,请一定不要低估后续实验的难度和Linux知识体系的难度,更不要高估自己的自学和排错能力,否则可能会因为系统长期报错而丧失学习兴趣,得不偿失。对于经济条件允许、有意愿深入了解Linux系统并考取红帽RHCE的同学,可以看一下刘遄老师主讲的培训介绍:http://www.linuxprobe.com/training。

在图1-15中,将客户机操作系统的类型选择为“Linux”,版本为“Red Hat Enterprise Linux 7 64位”,然后单击“下一步”按钮。

图1-15 选择操作系统的版本

填写“虚拟机名称”字段,并在选择安装位置之后单击“下一步”按钮,如图1-16所示。

将虚拟机系统的“最大磁盘大小”设置为20.0GB(默认即可),然后单击“下一步”按钮,如图1-17所示。

单击“自定义硬件”按钮,如图1-18所示。

图1-16 命名虚拟机及设置安装路径

图1-17 虚拟机最大磁盘大小

图1-18 虚拟机的配置界面

在出现的图1-19所示的界面中,建议将虚拟机系统内存的可用量设置为2GB,最低不应低于1GB。如果自己的真机设备具有很强的性能,那么也建议将内容量设置为2GB,因为将虚拟机系统的内存设置得太大没有必要。

根据您真机的性能设置CPU处理器的数量以及每个处理器的核心数量,并开启虚拟化功能,如图1-20所示。

图1-19 设置虚拟机的内存量

图1-20 设置虚拟机的处理器参数

光驱设备此时应在“使用ISO镜像文件”中选中了下载好的RHEL系统镜像文件,如图1-21所示。

图1-21 设置虚拟机的光驱设备

VM虚拟机软件为用户提供了3种可选的网络模式,分别为桥接模式、NAT模式与仅主机模式。这里选择“仅主机模式”,如图1-22所示。

图1-22 设置虚拟机的网络适配器

把USB控制器、声卡、打印机设备等不需要的设备统统移除掉。移掉声卡后可以避免在输入错误后发出提示声音,确保自己在今后实验中思绪不被打扰。然后单击“关闭”按钮,如图1-23所示。

图1-23 最终的虚拟机配置情况

返回到虚拟机配置向导界面后单击“完成”按钮,如图1-24所示。虚拟机的安装和配置顺利完成。

当看到如图1-25所示的界面时,就说明您的虚拟机已经被配置成功了。接下来准备步入属于您的Linux系统之旅吧。

图1-24 结束虚拟机配置向导

图1-25 虚拟机配置成功的界面

安装RHEL 7或CentOS 7系统时,您的电脑的CPU需要支持VT(Virtualization Technology,虚拟化技术)。所谓VT,指的是让单台计算机能够分割出多个独立资源区,并让每个资源区按照需要模拟出系统的一项技术,其本质就是通过中间层实现计算机资源的管理和再分配,让系统资源的利用率最大化。其实只要您的电脑不是五六年前买的,价格不低于三千元,它的CPU就肯定会支持VT的。如果开启虚拟机后依然提示“CPU不支持VT技术”等报错信息,请重启电脑并进入到BIOS中把VT虚拟化功能开启即可。

在虚拟机管理界面中单击“开启此虚拟机”按钮后数秒就看到RHEL 7系统安装界面,如图1-26所示。在界面中,Test this media & install Red Hat Enterprise Linux 7.0和Troubleshooting的作用分别是校验光盘完整性后再安装以及启动救援模式。此时通过键盘的方向键选择Install Red Hat Enterprise Linux 7.0选项来直接安装Linux系统。

图1-26 RHEL 7系统安装界面

接下来按回车键后开始加载安装镜像,所需时间大约在30~60秒,请耐心等待,如图1-27所示。

选择系统的安装语言后单击Continue按钮,如图1-28所示。

注:

 

请读者不用担心英语基础的问题,因为Linux系统中用的Linux命令具有特定的功能和意义,而非英语单词本身的意思。比如free的意思是“自由”、“免费”,而free命令在Linux系统中的作用是查看内存使用量。因此即便是英语水平很高,只要没有任何Linux基础知识,在看到这些Linux命令后也需要重新学习。再者,把系统设置成英文后还可以锻炼一下英语阅读能力,不知不觉地就把Linux系统和英文一起学了,岂不是更好?!如果您执意选择中文安装语言,也可以在图1-28中进行选择。

图1-27 安装向导的初始化界面

图1-28 选择系统的安装语言

在安装界面中单击SOFTWARE SELECTION选项,如图1-29所示。

RHEL 7系统的软件定制界面可以根据用户的需求来调整系统的基本环境,例如把Linux系统用作基础服务器、文件服务器、Web服务器或工作站等。此时您只需在界面中单击选中Server with GUI单选按钮,然后单击左上角的Done按钮即可,如图1-30所示。

注:

 

之前看过一个新闻,说是苹果公司某员工在iOS系统的用户说明书末尾加了一句“反正你们也不会去看”。其实这件事情有时候也可以用来调侃部分读者的学习状态,刘遄老师绝不会把没用的知识写到本书中,但就是这样一张如此醒目的截图也总是有同学视而不见,结果采用了默认的Minimal Install单选按钮安装RHEL 7系统,最终导致很多命令不能执行,服务搭建不成功。请一定留意!

图1-29 安装系统界面

图1-30 选择系统软件类型

返回到RHEL 7系统安装主界面,单击NETWORK & HOSTNAME选项后,将Hostname字段设置为linuxprobe.com,然后单击左上角的Done按钮,如图1-31所示。

返回到安装主界面,单击INSTALLATION DESTINATION选项来选择安装媒介并设置分区。此时不需要进行任何修改,单击左上角的Done按钮即可,如图1-32所示。

注:

 

读者可能会有这样的疑问“为什么我们不像其他Linux图书那样,讲一下手动分区的方法呢”?原因很简单,因为Linux系统根据FHS(Filesystem Hierarchy Standard,文件系统层次结构标准)把不同的目录定义了相应的不同功能,这部分内容会在第6章中详细介绍。并且通过刘遄老师最近这几年的教学经验来看,即便现在写出了操作步骤,读者们大多也只是点点鼠标,并不能真正理解其中的知识,效果不一定好,更何况在接下来的实验中,手动分区相对于自动分区来说也没有明显的好处。所以读者大可不必担心学不到,我们书籍的规划课程章节是非常科学的。

图1-31 配置网络和主机名

图1-32 系统安装媒介的选择

返回到安装主界面,单击Begin Installation按钮后即可看到安装进度,在此处选择ROOT PASSWORD,如图1-33所示。

图1-33 RHEL 7系统的安装界面

然后设置root管理员的密码。若坚持用弱口令的密码则需要单击2次左上角的Done按钮才可以确认,如图1-34所示。这里需要多说一句,当您在虚拟机中做实验的时候,密码无所谓强弱,但在生产环境中一定要让root管理员的密码足够复杂,否则系统将面临严重的安全问题。

图1-34 设置root管理员的密码

Linux系统安装过程一般在30~60分钟,在安装过程期间耐心等待即可。安装完成后单击Reboot按钮,如图1-35所示。

图1-35 系统安装完成

重启系统后将看到系统的初始化界面,单击LICENSE INFORMATION选项,如图1-36所示。

图1-36 系统初始化界面

选中I accept the license agreement复选框,然后单击左上角的Done按钮,如图1-37所示。

图1-37 同意许可说明书

返回到初始化界面后单击FINISH CONFIGURATION选项,即可看到Kdump服务的设置界面。如果暂时不打算调试系统内核,也可以取消选中Enable kdump复选框,然后单击Forward按钮,如图1-38所示。

图1-38 禁用Kdump服务

在如图1-39所示的系统订阅界面中,选中No, I prefer to register at a later time单选按钮,然后单击Finish按钮。此处设置为不注册系统对后续的实验操作和生产工作均无影响。

虚拟机软件中的RHEL 7系统经过又一次的重启后,我们终于可以看到系统的欢迎界面,如图1-40所示。在界面中选择默认的语言English (United States),然后单击Next按钮。

图1-39 暂时不对系统进行注册

图1-40 系统的语言设置

将系统的输入来源类型选择为English (US),然后单击Next按钮,如图1-41所示。

图1-41 设置系统的输入来源类型

为RHEL 7系统创建一个本地的普通用户,该账户的用户名为linuxprobe,密码为redhat,然后单击Next按钮,如图1-42所示。

图1-42 创建本地的普通用户

按照图1-43所示的设置来设置系统的时区,然后单击Next按钮。

图1-43 设置系统的时区

在图1-44所示的界面中单击Start using Red Hat Enterprise Linux Server按钮,出现如图1-45所示的界面。至此,RHEL 7系统完成了全部的安装和部署工作。准备开始学习Linux系统吧。

图1-44 系统初始化结束界面

图1-45 系统的欢迎界面

平日里让运维人员头疼的事情已经很多了,因此偶尔把Linux系统的密码忘记了并不用慌,只需简单几步就可以完成密码的重置工作。但是,如果您是第一次阅读本书,或者之前没有Linux系统的使用经验,请一定先跳过本节,等学习完Linux系统的命令后再来学习本节内容。如果您刚刚接手了一台Linux系统,要先确定是否为RHEL 7系统。如果是,然后再进行下面的操作。

    [root@linuxprobe ~]# cat /etc/redhat-release
    Red Hat Enterprise Linux Server release 7.0 (Maipo)

重启Linux系统主机并出现引导界面时,按下键盘上的e键进入内核编辑界面,如图1-46所示。

图1-46 Linux系统的引导界面

在linux16参数这行的最后面追加“rd.break”参数,然后按下Ctrl + X组合键来运行修改过的内核程序,如图1-47所示。

图1-47 内核信息的编辑界面

大约30秒过后,进入到系统的紧急求援模式,如图1-48所示。

图1-48 Linux系统的紧急救援模式

依次输入以下命令,等待系统重启操作完毕,然后就可以使用新密码linuxprobe来登录Linux系统了。命令行执行效果如图1-49所示。

图1-49 重置Linux系统的root管理员密码

mount -o remount,rw /sysroot
chroot /sysroot
passwd
touch /.autorelabel
exit
reboot

在RPM(红帽软件包管理器)公布之前,要想在Linux系统中安装软件只能采取源码包的方式安装。早期在Linux系统中安装程序是一件非常困难、耗费耐心的事情,而且大多数的服务程序仅仅提供源代码,需要运维人员自行编译代码并解决许多的软件依赖关系,因此要安装好一个服务程序,运维人员需要具备丰富知识、高超的技能,甚至良好的耐心。而且在安装、升级、卸载服务程序时还要考虑到其他程序、库的依赖关系,所以在进行校验、安装、卸载、查询、升级等管理软件操作时难度都非常大。

RPM机制则为解决这些问题而设计的。RPM有点像Windows系统中的控制面板,会建立统一的数据库文件,详细记录软件信息并能够自动分析依赖关系。目前RPM的优势已经被公众所认可,使用范围也已不局限在红帽系统中了。表1-1是一些常用的RPM软件包命令,当前不需要记住它们,大致混个“脸熟”就足够了。

表1-1  常用的RPM软件包命令

安装软件的命令格式

rpm -ivh filename.rpm

升级软件的命令格式

rpm -Uvh filename.rpm

卸载软件的命令格式

rpm -e filename.rpm

查询软件描述信息的命令格式

rpm -qpi filename.rpm

列出软件文件信息的命令格式

rpm -qpl filename.rpm

查询文件属于哪个RPM的命令格式

rpm -qf filename

尽管RPM能够帮助用户查询软件相关的依赖关系,但问题还是要运维人员自己来解决,而有些大型软件可能与数十个程序都有依赖关系,在这种情况下安装软件会是非常痛苦的。Yum软件仓库便是为了进一步降低软件安装难度和复杂度而设计的技术。Yum软件仓库可以根据用户的要求分析出所需软件包及其相关的依赖关系,然后自动从服务器下载软件包并安装到系统。Yum软件仓库的技术拓扑如图1-50所示。

Yum软件仓库中的RPM软件包可以是由红帽官方发布的,也可以是第三方发布的,当然也可以是自己编写的。《Linux就该这么学》随书提供的镜像光盘内已经包含了大量可用的RPM红帽软件包,后文中详细讲解这些软件包。表1-2所示为一些常见的Yum命令,当前只需对它们有一个简单印象即可。

图1-50 Yum软件仓库的技术拓扑图

表1-2  常见的Yum命令

命令

作用

yum repolist all

列出所有仓库

yum list all

列出仓库中所有软件包

yum info软件包名称

查看软件包信息

yum install软件包名称

安装软件包

yum reinstall软件包名称

重新安装软件包

yum update软件包名称

升级软件包

yum remove软件包

移除软件包

yum clean all

清除所有仓库缓存

yum check-update

检查可更新的软件包

yum grouplist

查看系统中已经安装的软件包组

yum groupinstall软件包组

安装指定的软件包组

yum groupremove软件包组

移除指定的软件包组

yum groupinfo软件包组

查询指定的软件包组信息

Linux操作系统的开机过程是这样的,即从BIOS开始,然后进入Boot Loader,再加载系统内核,然后内核进行初始化,最后启动初始化进程。初始化进程作为Linux系统的第一个进程,它需要完成Linux系统中相关的初始化工作,为用户提供合适的工作环境。红帽RHEL 7系统已经替换掉了熟悉的初始化进程服务System V init,正式采用全新的systemd初始化进程服务。如果您之前学习的是RHEL 5或RHEL 6系统,可能会不习惯。systemd初始化进程服务采用了并发启动机制,开机速度得到了不小的提升。虽然systemd初始化进程服务具有很多新特性和优势,但目前还是下面4个槽点。

无论怎样,RHEL 7系统选择systemd初始化进程服务已经是一个既定事实,因此也没有了“运行级别”这个概念,Linux系统在启动时要进行大量的初始化工作,比如挂载文件系统和交换分区、启动各类进程服务等,这些都可以看作是一个一个的单元(Unit),systemd用目标(target)代替了System V init中运行级别的概念,这两者的区别如表1-3所示。

表1-3  systemd与System V init的区别以及作用

System V init运行级别

systemd目标名称

作用

0

runlevel0.target, poweroff.target

关机

1

runlevel1.target, rescue.target

单用户模式

2

runlevel2.target, multi-user.target

等同于级别3

3

runlevel3.target, multi-user.target

多用户的文本界面

4

runlevel4.target, multi-user.target

等同于级别3

5

runlevel5.target, graphical.target

多用户的图形界面

6

runlevel6.target, reboot.target

重启

emergency

emergency.target

紧急Shell

如果想要将系统默认的运行目标修改为“多用户,无图形”模式,可直接用ln命令把多用户模式目标文件连接到/etc/systemd/system/目录:

 [root@linuxprobe ~]# ln -sf /lib/systemd/system/multi-user.target /etc/systemd/
 system/default.target

如果有读者之前学习过RHEL 6系统,或者已经习惯使用service、chkconfig等命令来管理系统服务,那么现在就比较郁闷了,因为在RHEL 7系统中是使用systemctl命令来管理服务的。表1-4和表1-5所示RHEL 6系统中System V init命令与RHEL 7系统中systemctl命令的对比,您可以先大致了解一下,后续章节中会经常用到它们。

表1-4  systemctl管理服务的启动、重启、停止、重载、查看状态等常用命令

System V init命令(RHEL 6系统)

systemctl命令(RHEL 7系统)

作用

service foo start

systemctl start foo.service

启动服务

service foo restart

systemctl restart foo.service

重启服务

service foo stop

systemctl stop foo.service

停止服务

service foo reload

systemctl reload foo.service

重新加载配置文件(不终止服务)

service foo status

systemctl status foo.service

查看服务状态

表1-5   systemctl设置服务开机启动、不启动、查看各级别下服务启动状态等常用命令

System V init命令(RHEL 6系统)

systemctl命令(RHEL 7系统)

作用

chkconfig foo on

systemctl enable foo.service

开机自动启动

chkconfig foo off

systemctl disable foo.service

开机不自动启动

chkconfig foo

systemctl is-enabled foo.service

查看特定服务是否为开机自动启动

chkconfig --list

systemctl list-unit-files --type=service

查看各个级别下服务的启动与禁用情况

1.为什么建议读者校验下载的系统镜像或工具?

答:为了保证软件包的安全与完整性。

2.使用虚拟机安装Linux系统时,为什么要先选择稍后安装操作系统,而不是去选择RHEL 7系统镜像光盘?

答:在配置界面中若直接选择了RHEL 7系统镜像,则VMware Workstation虚拟机会使用内置的安装向导自动进行安装,最终安装出来的系统跟我们后续进行实验所需的系统环境会不一样。

3.RPM(红帽软件包管理器)只有红帽企业系统在使用,对吗?

答:RPM已经被CentOS、Fedora、openSUSE等众多Linux系统采用,它真的很好用!

4.简述RPM与Yum软件仓库的作用。

答:RPM是为了简化安装的复杂度,而Yum软件仓库是为了解决软件包之间的依赖关系。

5.RHEL 7系统采用了systemd作为初始化进程,那么如何查看某个服务的运行状态?

答:执行命令“systemctl status 服务名.service”可查看服务的运行状态,其中服务名后的.service可以省略。


本章讲解了如下内容:

 

  • 强大好用的Shell;

  • 执行帮助文档命令;

  • 常用系统工作命令;

  • 系统状态检测命令;

  • 工作目录切换命令;

  • 文本文件编辑命令;

  • 文件目录管理命令;

  • 打包压缩与搜索命令。

本章首先介绍系统内核和Shell终端的关系与作用,然后介绍Bash解释器的4大优势并学习Linux命令的执行方法。经验丰富的运维人员可以通过合理地组合适当的命令与参数,来更精准地满足工作需求,迅速得到自己想要的结果,还可以尽可能地降低系统资源消耗。

本书精挑细选出读者有必要首先学习的数十个Linux命令,它们与系统工作、系统状态、工作目录、文件、目录、打包压缩与搜索等主题相关。通过把上述命令归纳到本章中的各个小节,让您可以分门别类地逐个学习这些最基础的Linux命令,为今后学习更复杂的命令和服务做好必备知识铺垫。

通常来讲,计算机硬件是由运算器、控制器、存储器、输入/输出设备等共同组成的,而让各种硬件设备各司其职且又能协同运行的东西就是系统内核。Linux系统的内核负责完成对硬件资源的分配、调度等管理任务。由此可见,系统内核对计算机的正常运行来讲是太重要了,因此一般不建议直接去编辑内核中的参数,而是让用户通过基于系统调用接口开发出的程序或服务来管理计算机,以满足日常工作的需要,如图2-1所示。

必须肯定的是,Linux系统中有些图形化工具(比如逻辑卷管理器[Logical Volume Manager,LVM])确实非常好用,极大地降低了运维人员操作出错的概率,值得称赞。但是,很多图形化工具其实是调用了脚本来完成相应的工作,往往只是为了完成某种工作而设计的,缺乏Linux命令 原有的灵活性及可控性。再者,图形化工具相较于Linux命令行界面会更加消耗系统资源,因此经验丰富的运维人员甚至都不会给Linux系统安装图形界面,需要开始运维工作时直接通过命令行模式远程连接过去,不得不说这样做确实挺高效的。

图2-1 用户与Linux系统的交互

Shell就是这样的一个命令行工具。Shell(也称为终端或壳)充当的是人与内核(硬件)之间的翻译官,用户把一些命令“告诉”终端,它就会调用相应的程序服务去完成某些工作。现在包括红帽 系统在内的许多主流Linux系统默认使用的终端是Bash(Bourne-Again SHell)解释器。主流Linux系统选择Bash解释器作为命令行终端主要有以下4项优势,读者可以在今后的学习和生产工作中细细体会Linux系统命令行的美妙之处,真正从心里爱上它们。

既然Linux系统中已经有了Bash这么好用的“翻译官”,那么接下来就有必要好好学习下怎么跟它沟通了。要想准确、高效地完成各种任务,仅依赖于命令本身是不够的,还应该根据实际情况来灵活调整各种命令的参数。比如,我们切寿司时尽管可以用菜刀,但米粒一定会撒得满地都是,因此寿司刀上设计的用于透气的圆孔就是为了更好地适应场景而额外增加的参数。当您学完本书并具备一定的工作经验之后,一定能够领悟Linux命令的奥秘。常见执行Linux命令的格式是这样的:

命令名称 [命令参数] [命令对象]

注意,命令名称、命令参数、命令对象之间请用空格键分隔。

命令对象一般是指要处理的文件、目录、用户等资源,而命令参数可以用长格式(完整的选项名称),也可以用短格式(单个字母的缩写),两者分别用--与-作为前缀(示例请见表2-1)。Linux新手不会执行命令大多是因为参数比较复杂,参数值需要随不同的命令和需求情况而发生改变。因此,要想灵活搭配各种参数,执行自己想要的功能,则需要长时间的经验积累了。

表2-1  命令参数的长格式与短格式示例

长格式

man --help

短格式

man -h

有读者现在可能会想:“Linux系统中有那么多命令,我怎么知道某个命令是干嘛用的?在日常工作中遇到了一个不熟悉的Linux命令,我又怎样才能知道它有哪些可用参数呢?”接下来,我们就拿man这个命令作为本书中第一个教给读者去学习的Linux命令了。对于真正的零基础读者,您可以通过图2-2、图2-3和图2-4来学习如何在RHEL 7系统中执行Linux命令。

在RHEL 7系统的桌面上单击鼠标右键,在弹出的菜单中选择Open in Terminal命令,这将打开一个Linux系统命令行终端,如图2-2所示。

图2-2 在Linux系统上打开命令行终端

在命令行终端中输入man man命令来查看man命令自身的帮助信息,如图2-3所示。

图2-3 查看man命令的帮助信息

敲击回车键后即可看到如图2-4所示的帮助信息。

图2-4 man命令的帮助信息

在man命令帮助信息的界面中,所包含的常用操作按键及其用途如表2-2所示。

表2-2  man命令中常用按键以及用途

按键

用途

空格键

向下翻一页

PaGe down

向下翻一页

PaGe up

向上翻一页

home

直接前往首页

end

直接前往尾页

/

从上至下搜索某个关键词,如“/linux”

?

从下至上搜索某个关键词,如“?linux”

n

定位到下一个搜索到的关键词

N

定位到上一个搜索到的关键词

q

退出帮助文档

一般来讲,使用man命令查看到的帮助内容信息都会很长很多,如果读者不了解帮助文档信息的目录结构和操作方法,乍一看到这么多信息可能会感到相当困惑。man命令的帮助信息的结构如表2-3所示。

表2-3  man命令帮助信息的结构以及意义

结构名称

代表意义

NAME

命令的名称

SYNOPSIS

参数的大致使用方法

DESCRIPTION

介绍说明

EXAMPLES

演示(附带简单说明)

OVERVIEW

概述

DEFAULTS

默认的功能

OPTIONS

具体的可用选项(带介绍)

ENVIRONMENT

环境变量

FILES

用到的文件

SEE ALSO

相关的资料

HISTORY

维护历史与联系方式

您现在阅读的这本书是刘遄老师在经历了十多年的运维学习以及数十期的培训授课后总结而成的,您可能无法在本节中找到某些之前见过的命令。但不用担心,之所以这样安排,原因是刘遄老师努力地将Linux命令与实战相结合,真正让读者在实操中理解技术,而不是单纯地把命令堆砌到书中让读者去硬背。

刘遄老师用了近一年的时间把最常用的Linux命令进行汇总、归纳、整理、分类后,把这些常用的命令合理安排到了后续章节中,然后采用以练代学的方式来加深读者的理解和掌握。从数年的培训成果反馈来看,这种方式相当有效,因此也相信这种方式肯定适合您的学习。

1.echo命令

echo命令用于在终端输出字符串或变量提取后的值,格式为“echo [字符串 | $变量]”。

例如,把指定字符串“Linuxprobe.com”输出到终端屏幕的命令为:

[root@linuxprobe ~]# echo Linuxprobe.Com

该命令会在终端屏幕上显示如下信息:

Linuxprobe.Com

下面,我们使用$变量的方式提取变量SHELL的值,并将其输出到屏幕上:

[root@linuxprobe ~]# echo $SHELL
/bin/bash

2.date命令

date命令用于显示及设置系统的时间或日期,格式为“date [选项] [+指定的格式]”。

只需在强大的date命令中输入以“+”号开头的参数,即可按照指定格式来输出系统的时间或日期,这样在日常工作时便可以把备份数据的命令与指定格式输出的时间信息结合到一起。例如,把打包后的文件自动按照“年-月-日”的格式打包成“backup-2017-9-1.tar.gz”,用户只需要看一眼文件名称就能大概了解到每个文件的备份时间了。date命令中常见的参数格式及作用如表2-4所示。

表2-4  date命令中的参数以及作用

参数

作用

%t

跳格[Tab键]

%H

小时(00~23)

%I

小时(00~12)

%M

分钟(00~59)

%S

秒(00~59)

%j

今年中的第几天

按照默认格式查看当前系统时间的date命令如下所示:

[root@linuxprobe ~]# date
Mon Aug 24 16:11:23 CST 2017

按照“年-月-日 小时:分钟:秒”的格式查看当前系统时间的date命令如下所示:

[root@linuxprobe ~]# date "+%Y-%m-%d %H:%M:%S"
2017-08-24 16:29:12

将系统的当前时间设置为2017年9月1日8点30分的date命令如下所示:

[root@linuxprobe ~]# date -s "20170901 8:30:00"
Fri Sep 1 08:30:00 CST 2017

再次使用date命令并按照默认的格式查看当前的系统时间,如下所示:

[root@linuxprobe ~]# date
Fri Sep 1 08:30:01 CST 2017

date命令中的参数%j可用来查看今天是当年中的第几天。这个参数能够很好地区分备份时间的新旧,即数字越大,越靠近当前时间。该参数的使用方式以及显示结果如下所示。

[root@linuxprobe ~]# date "+%j"
244

3.reboot命令

reboot命令用于重启系统,其格式为reboot。

由于重启计算机这种操作会涉及硬件资源的管理权限,因此默认只能使用root管理员来重启,其命令如下:

[root@linuxprobe ~]# reboot

4.poweroff命令

poweroff命令用于关闭系统,其格式为poweroff。

该命令与reboot命令相同,都会涉及硬件资源的管理权限,因此默认只有root管理员才可以关闭电脑,其命令如下:

[root@linuxprobe ~]# poweroff

5.wget命令

wget命令用于在终端中下载网络文件,格式为“wget [参数] 下载地址”。

如果您没有Linux系统的管理经验,当前只需了解一下wget命令的参数以及作用,然后看一下下面的演示实验即可,切记不要急于求成。后面章节将逐步讲解Linux系统的配置管理方法,可以等您掌握了网卡的配置方法后再来进行这个实验操作。表2-5所示为wget命令的参数以及参数的作用。

表2-5  wget命令的参数以及作用

参数

作用

-b

后台下载模式

-P

下载到指定目录

-t

最大尝试次数

-c

断点续传

-p

下载页面内所有资源,包括图片、视频等

-r

递归下载

尝试使用wget命令从本书的配套站点中下载本书的最新pdf格式电子文档,这个文件的完整路径为http://www.linuxprobe.com/docs/LinuxProbe.pdf ,执行该命令后的下载效果如下:

[root@linuxprobe ~]# wget http://www.linuxprobe.com/docs/LinuxProbe.pdf
--2017-08-24 19:30:12 -- http://www.linuxprobe.com/docs/LinuxProbe.pdf
Resolving www.linuxprobe.com (www.linuxprobe.com)... 220.181.105.185
Connecting to www.linuxprobe.com (www.linuxprobe.com)|220.181.105.185|:80...
connected.
HTTP request sent, awaiting response... 200 OK
Length: 45948568 (44M) [application/pdf]
Saving to: ‘LinuxProbe.pdf’

100%[===========================================>] 45,948,568 32.9MB/s in 1.3s

2017-08-24 19:30:14 (32.9 MB/s) - ‘LinuxProbe.pdf’ saved [45948568/45948568]

接下来,我们使用wget命令递归下载www.linuxprobe.com 网站内的所有页面数据以及文件,下载完后会自动保存到当前路径下一个名为www.linuxprobe.com的目录中。执行该操作的命令为wget -r -p http://www.linuxprobe.com ,该命令的执行结果如下。

[root@linuxprobe ~]# wget -r -p http://www.linuxprobe.com
--2017-08-24 19:31:41-- http://www.linuxprobe.com/
Resolving www.linuxprobe.com... 106.185.25.197
Connecting to www.linuxprobe.com|106.185.25.197|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [text/html]
Saving to: 'www.linuxprobe.com/index.html'
………………省略下载过程………………

6.ps命令

ps命令用于查看系统中的进程状态,格式为“ps [参数]”。

估计读者在第一次执行这个命令时都要惊呆一下——怎么会有这么多输出值,这可怎么看得过来?其实,刘遄老师通常会将ps命令与第3章的管道符技术搭配使用,用来抓取与某个指定服务进程相对应的PID号码。ps命令的常见参数以及作用如表2-6所示。

表2-6  ps命令的参数以及作用

参数

作用

-a

显示所有进程(包括其他用户的进程)

-u

用户以及其他详细信息

-x

显示没有控制终端的进程

Linux系统中时刻运行着许多进程,如果能够合理地管理它们,则可以优化系统的性能。在Linux系统中,有5种常见的进程状态,分别为运行、中断、不可中断、僵死与停止,其各自含义如下所示。

当执行ps aux命令后通常会看到如表2-7所示的进程状态,表2-7中只是列举了部分输出值,而且正常的输出值中不包括中文注释。

表2-7  进程状态

USER

PID

%CPU

%MEM

VSZ

RSS

TTY

STAT

START

TIME

COMMAND

进程的所有者

进程ID号

运算器占用率

内存占用率

虚拟内存使用量(单位是KB)

占用的固定内存量(单位是KB)

所在终端

进程
状态

被启动
的时间

实际使用CPU的时间

命令名称与参数

root

1

0.0

0.4

53684

7628

?

Ss

07 :22

0:02

/usr/lib/systemd/systemd

root

2

0.0

0.0

0

0

?

S

07:22

0:00

[kthreadd]

root

3

0.0

0.0

0

0

?

S

07:22

0:00

[ksoftirqd/0]

root

5

0.0

0.0

0

0

?

S<

07:22

0:00

[kworker/0:0H]

root

7

0.0

0.0

0

0

?

S

07:22

0:00

[migration/0]

………………省略部分输出信息………………

 

注:

 

如前面所提到的,在Linux系统中的命令参数有长短格式之分,长格式和长格式之间不能合并,长格式和短格式之间也不能合并,但短格式和短格式之间是可以合并的,合并后仅保留一个-(减号)即可。另外ps命令可允许参数不加减号(-),因此可直接写成ps aux的样子。

7.top命令

top命令用于动态地监视进程活动与系统负载等信息,其格式为top。

top命令相当强大,能够动态地查看系统运维状态,完全将它看作Linux中的“强化版的Windows任务管理器”。top命令的运行界面如图2-5所示。

图2-5 top命令的运行界面

在图2-5中,top命令执行结果的前5行为系统整体的统计信息,其所代表的含义如下。

注:

 

第3行中的数据均为CPU数据并以百分比格式显示,例如“97.1 id”意味着有97.1%的CPU处理器资源处于空闲。

8.pidof命令

pidof命令用于查询某个指定服务进程的PID值,格式为“pidof [参数] [服务名称]”。

每个进程的进程号码值(PID)是唯一的,因此可以通过PID来区分不同的进程。例如,可以使用如下命令来查询本机上sshd服务程序的PID:

[root@linuxprobe ~]# pidof sshd
2156

9.kill命令

kill命令用于终止某个指定PID的服务进程,格式为“kill [参数] [进程PID]”。

接下来,我们使用kill命令把上面用pidof命令查询到的PID所代表的进程终止掉,其命令如下所示。这种操作的效果等同于强制停止sshd服务。

[root@linuxprobe ~]# kill 2156

10.killall命令

killall命令用于终止某个指定名称的服务所对应的全部进程,格式为:“killall [参数] [进程名称]”。

通常来讲,复杂软件的服务程序会有多个进程协同为用户提供服务,如果逐个去结束这些进程会比较麻烦,此时可以使用killall命令来批量结束某个服务程序带有的全部进程。下面以httpd服务程序为例,来结束其全部进程。由于RHEL7系统默认没有安装httpd服务程序,因此大家此时只需看操作过程和输出结果即可,等学习了相关内容之后再来实践。

[root@linuxprobe ~]# pidof httpd
13581 13580 13579 13578 13577 13576
[root@linuxprobe ~]# killall httpd
[root@linuxprobe ~]# pidof httpd
[root@linuxprobe ~]#

注:

 

如果我们在系统终端中执行一个命令后想立即停止它,可以同时按下Ctrl + C组合键(生产环境中比较常用的一个快捷键),这样将立即终止该命令的进程。或者,如果有些命令在执行时不断地在屏幕上输出信息,影响到后续命令的输入,则可以在执行命令时在末尾添加上一个&符号,这样命令将进入系统后台来执行。

作为一名合格的运维人员,想要更快、更好地了解Linux服务器,必须具备快速查看Linux系统运行状态的能力,因此接下来会逐个讲解与网卡网络、系统内核、系统负载、内存使用情况、当前启用终端数量、历史登录记录、命令执行记录以及救援诊断等相关命令的使用方法。这些命令都超级实用,还请读者用心学习,加以掌握。

1.ifconfig命令

ifconfig命令用于获取网卡配置与网络状态等信息,格式为“ifconfig [网络设备] [参数]”。

使用ifconfig命令来查看本机当前的网卡配置与网络状态等信息时,其实主要查看的就是网卡名称、inet参数后面的IP地址、ether参数后面的网卡物理地址(又称为MAC地址),以及RX、TX的接收数据包与发送数据包的个数及累计流量(即下面加粗的信息内容):

[root@linuxprobe ~]# ifconfig
eno16777728: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.10.10  netmask 255.255.255.0  broadcast 192.168.10.255
        inet6 fe80::20c:29ff:fec4:a409  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:c4:a4:09  txqueuelen 1000  (Ethernet)
        RX packets 36 bytes 3176 (3.1 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 38 bytes 4757 (4.6 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 0  (Local Loopback)
        RX packets 386  bytes 32780 (32.0 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 386  bytes 32780 (32.0 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

2.uname命令

uname命令用于查看系统内核与系统版本等信息,格式为“uname [-a]”。

在使用uname命令时,一般会固定搭配上-a参数来完整地查看当前系统的内核名称、主机名、内核发行版本、节点名、系统时间、硬件名称、硬件平台、处理器类型以及操作系统名称等信息。

[root@linuxprobe ~]# uname -a
Linux linuxprobe.com 3.10.0-123.el7.x86_64 #1 SMP Mon May 5 11:16:57 EDT 2017 
x86_64 x86_64 x86_64 GNU/Linux

顺带一提,如果要查看当前系统版本的详细信息,则需要查看redhat-release文件,其命令以及相应的结果如下:

[root@linuxprobe ~]# cat /etc/redhat-release
Red Hat Enterprise Linux Server release 7.0 (Maipo)

3.uptime命令

uptime用于查看系统的负载信息,格式为uptime。

uptime命令真的很棒,它可以显示当前系统时间、系统已运行时间、启用终端数量以及平均负载值等信息。平均负载值指的是系统在最近1分钟、5分钟、15分钟内的压力情况(下面加粗的信息部分);负载值越低越好,尽量不要长期超过1,在生产环境中不要超过5。

[root@linuxprobe ~]# uptime
22:49:55 up 10 min, 2 users, load average: 0.01, 0.19, 0.18

4.free命令

free用于显示当前系统中内存的使用量信息,格式为“free [-h]”。

为了保证Linux系统不会因资源耗尽而突然宕机,运维人员需要时刻关注内存的使用量。在使用free命令时,可以结合使用-h参数以更人性化的方式输出当前内存的实时使用量信息。表2-8所示为在刘遄老师的电脑上执行free -h命令之后的输出信息。需要注意的是,输出信息中的中文注释是作者自行添加的内容,实际输出时没有相应的参数解释。

[root@linuxprobe ~]# free -h

表2-8  执行free -h命令后的输出信息

内存总量

已用量

可用量

进程共享的内存量

磁盘缓存的内存量

缓存的内存量

total

used

free

shared

buffers

cached

Mem

1.8GB

1.3GB

542MB

9.8MB

1.6MB

413MB

-/+ buffers/cache

869MB

957MB

Swap

2.0GB

0

2.0GB

5.who命令

who用于查看当前登入主机的用户终端信息,格式为“who [参数]”。

这三个简单的字母可以快速显示出所有正在登录本机的用户的名称以及他们正在开启的终端信息。表2-9所示为执行who命令后的结果。

[root@linuxprobe ~]# who

表2-9  执行who命令的结果

登录的用户名

终端设备

登录到系统的时间

root

:0

2017-08-24 17:52 (:0)

root

pts/0

2017-08-24 17:52 (:0)

6.last命令

last命令用于查看所有系统的登录记录,格式为“last [参数]”。

使用last命令可以查看本机的登录记录。但是,由于这些信息都是以日志文件的形式保存在系统中,因此黑客可以很容易地对内容进行篡改。千万不要单纯以该命令的输出信息而判断系统有无被恶意入侵!

[root@linuxprobe ~]# last
root       pts/0       :0               Mon Aug  24 17:52   still  logged in
root       :0          :0               Mon Aug  24 17:52   still  logged in
(unknown   :0          :0               Mon Aug  24 17:50 - 17:52   (00:02)
reboot     system boot 3.10.0-123.el7.x Tue Aug  25 01:49 - 18:17   (-7:-32)
root       pts/0       :0               Mon Aug  24 15:40 - 08:54   (7+17:14)
root       pts/0       :0               Fri Jul  10 10:49 - 15:37   (45+04:47)
………………省略部分登录信息………………

7.history命令

history命令用于显示历史执行过的命令,格式为“history [-c]”。

history命令应该是作者最喜欢的命令。执行history命令能显示出当前用户在本地计算机中执行过的最近1000条命令记录。如果觉得1000不够用,还可以自定义/etc/profile文件中的HISTSIZE变量值。在使用history命令时,如果使用-c参数则会清空所有的命令历史记录。还可以使用“!编码数字”的方式来重复执行某一次的命令。总之,history命令有很多有趣的玩法等待您去开发。

[root@linuxprobe ~]# history
1 tar xzvf VMwareTools-9.9.0-2304977.tar.gz
2 cd vmware-tools-distrib/
3 ls
4 ./vmware-install.pl -d
5 reboot
6 df -h
7 cd /run/media/
8 ls
9 cd root/
10 ls
11 cd VMware\ Tools/
12 ls
13 cp VMwareTools-9.9.0-2304977.tar.gz /home
14 cd /home
15 ls
16 tar xzvf VMwareTools-9.9.0-2304977.tar.gz
17 cd vmware-tools-distrib/
18 ls
19 ./vmware-install.pl -d
20 reboot
21 history
[root@linuxprobe ~]# !15
anaconda-ks.cfg  Documents  initial-setup-ks.cfg  Pictures  Templates
Desktop          Downloads  Music                 Public    Videos

历史命令会被保存到用户家目录中的.bash_history文件中。Linux系统中以点(.)开头的文件均代表隐藏文件,这些文件大多数为系统服务文件,可以用cat命令查看其文件内容。

[root@linuxprobe ~]# cat ~/.bash_history

要清空当前用户在本机上执行的Linux命令历史记录信息,可执行如下命令:

[root@linuxprobe ~]# history -c

8.sosreport命令

sosreport命令用于收集系统配置及架构信息并输出诊断文档,格式为sosreport。

当Linux系统出现故障需要联系技术支持人员时,大多数时候都要先使用这个命令来简单收集系统的运行状态和服务配置信息,以便让技术支持人员能够远程解决一些小问题,亦或让他们能提前了解某些复杂问题。在下面的输出信息中,加粗的部分是收集好的资料压缩文件以及校验码,将其发送给技术支持人员即可:

[root@linuxprobe ~]# sosreport
sosreport (version 3.0)
This command will collect diagnostic and configuration information from
this Red Hat Enterprise Linux system and installed applications.

An archive containing the collected information will be generated in
/var/tmp and may be provided to a Red Hat support representative.
Any information provided to Red Hat will be treated in accordance with
the published support policies at:
https://access.redhat.com/support/
The generated archive may contain data considered sensitive and its
content should be reviewed by the originating organization before being
passed to any third party.

No changes will be made to system configuration.
Press ENTER to continue, or CTRL-C to quit. 此处敲击回车来确认收集信息
```
```
Please enter your first initial and last name [linuxprobe.com]:此处敲击回车来确认主机编号
Please enter the case number that you are generating this report for:此处敲击回车来确认主机编号
```
```
Running plugins. Please wait ...
Running 70/70: yum...
Creating compressed archive...
Your sosreport has been generated and saved in:

/var/tmp/sosreport-linuxprobe.com-20170905230631.tar.xz
The checksum is: 79436cdf791327040efde48c452c6322
Please send this file to your support representative.

工作目录指的是用户当前在系统中所处的位置。由于工作目录会牵涉系统存储结构相关的知识,因此第6章将详细讲解这部分内容。读者只需简单了解一下这里的操作实验即可,如果不能完全掌握也没有关系,毕竟Linux系统的知识体系太过庞大,每一位初学人员都需要经历这么一段时期。

1.pwd命令

pwd命令用于显示用户当前所处的工作目录,格式为“pwd [选项]”。

[root@linuxprobe etc]# pwd
/etc

2.cd命令

cd命令用于切换工作路径,格式为“cd [目录名称]”。

这个命令应该是最常用的一个Linux命令了。可以通过cd命令迅速、灵活地切换到不同的工作目录。除了常见的切换目录方式,还可以使用“cd -”命令返回到上一次所处的目录,使用“cd..”命令进入上级目录,以及使用“cd ~”命令切换到当前用户的家目录,亦或使用“cd ~username”切换到其他用户的家目录。例如,可以使用“cd 路径”的方式切换进/etc目录中:

[root@linuxprobe ~]# cd /etc

同样的道理,可使用下述命令切换到/bin目录中:

[root@linuxprobe etc]# cd /bin

此时,要返回到上一次的目录(即/etc目录),可执行如下命令:

[root@linuxprobe bin]# cd -
/etc
[root@linuxprobe etc]#

还可以通过下面的命令快速切换到用户的家目录:

[root@linuxprobe etc]# cd ~
[root@linuxprobe ~]#

3.ls命令

ls命令用于显示目录中的文件信息,格式为“ls [选项] [文件] ”。

所处的工作目录不同,当前工作目录下的文件肯定也不同。使用ls命令的“-a”参数看到全部文件(包括隐藏文件),使用“-l”参数可以查看文件的属性、大小等详细信息。将这两个参数整合之后,再执行ls命令即可查看当前目录中的所有文件并输出这些文件的属性信息:

[root@linuxprobe ~]# ls -al
total 60
dr-xr-x---. 14 root root 4096 May  4 07:56 .
drwxr-xr-x. 17 root root 4096 May  4 15:55 ..
-rw-------.  1 root root 1213 May  4 15:44 anaconda-ks.cfg
-rw-------.  1 root root  957 May  4 07:54 .bash_history
-rw-r--r--.  1 root root   18 Dec 28  2013 .bash_logout
-rw-r--r--.  1 root root  176 Dec 28  2013 .bash_profile
-rw-r--r--.  1 root root  176 Dec 28  2013 .bashrc
drwx------. 10 root root 4096 May  4 07:56 .cache
drwx------. 15 root root 4096 May  4 07:49 .config
-rw-r--r--.  1 root root  100 Dec 28  2013 .cshrc
drwx------.  3 root root   24 May  4 07:46 .dbus
drwxr-xr-x.  2 root root    6 May  4 07:49 Desktop
drwxr-xr-x.  2 root root    6 May  4 07:49 Documents
drwxr-xr-x.  2 root root    6 May  4 07:49 Downloads
-rw-------.  1 root root   16 May  4 07:49 .esd_auth
-rw-------.  1 root root  628 May  4 07:56 .ICEauthority
-rw-r--r--.  1 root root 1264 May  4 07:48 initial-setup-ks.cfg
drwx------.  3 root root   18 May  4 07:49 .local
drwxr-xr-x.  2 root root    6 May  4 07:49 Music
drwxr-xr-x.  2 root root    6 May  4 07:49 Pictures
drwxr-xr-x.  2 root root    6 May  4 07:49 Public
-rw-r--r--.  1 root root  129 Dec 28  2013 .tcshrc
drwxr-xr-x.  2 root root    6 May  4 07:49 Templates
drwxr-xr-x.  2 root root    6 May  4 07:49 Videos
-rw-------.  1 root root 1962 May  4 07:54 .viminfo

如果想要查看目录属性信息,则需要额外添加一个-d参数。例如,可使用如下命令查看/etc目录的权限与属性信息:

[root@linuxprobe ~]# ls -ld /etc
drwxr-xr-x. 132 root root 8192 Jul 10 10:48 /etc

通过前面几个小节的学习,读者应该基本掌握了切换工作目录及对文件的管理方法。Linux系统中“一切都是文件”,而对服务程序进行配置自然也就是编辑程序的配置文件。如果不能熟练地查阅系统或服务的配置文件,那以后工作时可就真的要尴尬了。本节将讲解几条用于查看文本文件内容的命令。至于编辑器使用起来比较复杂,因此将放到第4章与Shell脚本内容一起讲解。

1.cat命令

cat命令用于查看纯文本文件(内容较少的),格式为“cat [选项] [文件]”。

Linux系统中有多个用于查看文本内容的命令,每个命令都有自己的特点,比如这个cat命令就是用于查看内容较少的纯文本文件的。cat这个命令也很好记,因为cat在英语中是“猫”的意思,小猫咪是不是给您一种娇小、可爱的感觉呢?

如果在查看文本内容时还想顺便显示行号的话,不妨在cat命令后面追加一个-n参数:

[root@linuxprobe ~]# cat -n initial-setup-ks.cfg 
     1    #version=RHEL7
     2    # X Window System configuration information
     3    xconfig  --startxonboot
     4    
     5    # License agreement
     6    eula --agreed
     7    # System authorization information
     8    auth --enableshadow --passalgo=sha512
     9    # Use CDROM installation media
    10    cdrom
    11    # Run the Setup Agent on first boot
    12    firstboot --enable
    13    # Keyboard layouts
    14    keyboard --vckeymap=us --xlayouts='us'
    15    # System language
    16    lang en_US.UTF-8
………………省略部分输出信息………………

2.more命令

more命令用于查看纯文本文件(内容较多的),格式为“more [选项]文件”。

如果需要阅读长篇小说或者非常长的配置文件,那么“小猫咪”可就真的不适合了。因为一旦使用cat命令阅读长篇的文本内容,信息就会在屏幕上快速翻滚,导致自己还没有来得及看到,内容就已经翻篇了。因此对于长篇的文本内容,推荐使用more命令来查看。more命令会在最下面使用百分比的形式来提示您已经阅读了多少内容。您还可以使用空格键或回车键向下翻页:

[root@linuxprobe ~]# more initial-setup-ks.cfg 
#version=RHEL7
# X Window System configuration information
xconfig  --startxonboot

# License agreement
eula --agreed
# System authorization information
auth --enableshadow --passalgo=sha512
# Use CDROM installation media
cdrom
# Run the Setup Agent on first boot
firstboot --enable
# Keyboard layouts
keyboard --vckeymap=us --xlayouts='us'
# System language
lang en_US.UTF-8

ignoredisk --only-use=sda
# Network information
network  --bootproto=dhcp --device=eno16777728 --onboot=off --ipv6=auto
network  --bootproto=dhcp --hostname=linuxprobe.com
--More--(43%)

3.head命令

head命令用于查看纯文本文档的前N行,格式为“head [选项] [文件]”。

在阅读文本内容时,谁也难以保证会按照从头到尾的顺序往下看完整个文件。如果只想查看文本中前20行的内容,该怎么办呢?head命令可以派上用场了:

[root@linuxprobe ~]# head -n 20 initial-setup-ks.cfg 
#version=RHEL7
# X Window System configuration information
xconfig  --startxonboot

# License agreement
eula --agreed
# System authorization information
auth --enableshadow --passalgo=sha512
# Use CDROM installation media
cdrom
# Run the Setup Agent on first boot
firstboot --enable
# Keyboard layouts
keyboard --vckeymap=us --xlayouts='us'
# System language
lang en_US.UTF-8

ignoredisk --only-use=sda
# Network information
network  --bootproto=dhcp --device=eno16777728 --onboot=off --ipv6=auto
[root@linuxprobe ~]#

4.tail命令

tail命令用于查看纯文本文档的后N行或持续刷新内容,格式为“tail [选项] [文件]”。

我们可能还会遇到另外一种情况,比如需要查看文本内容的最后20行,这时就需要用到tail命令了。tail命令的操作方法与head命令非常相似,只需要执行“tail -n 20 文件名”命令就可以达到这样的效果。tail命令最强悍的功能是可以持续刷新一个文件的内容,当想要实时查看最新日志文件时,这特别有用,此时的命令格式为“tail -f 文件名”:

[root@linuxprobe ~]# tail -f /var/log/messages
May  4 07:56:38 localhost gnome-session: Window manager warning: Log level 16: 
STACK_OP_ADD: window 0x1e00001 already in stack
May  4 07:56:38 localhost gnome-session: Window manager warning: Log level 16: 
STACK_OP_ADD: window 0x1e00001 already in stack
May  4 07:56:38  localhost  vmusr[12982]: [ warning] [Gtk] gtk_disable_setlocale()
must be called before gtk_init()
May  4 07:56:50 localhost systemd-logind: Removed session c1.
Aug  1 01:05:31 localhost systemd: Time has been changed
Aug  1 01:05:31 localhost systemd: Started LSB: Bring up/down networking.
Aug  1 01:08:56 localhost dbus-daemon: dbus[1124]: [system] Activating service 
name='com.redhat.SubscriptionManager' (using servicehelper)
Aug  1 01:08:56 localhost dbus[1124]: [system] Activating service name='com.
redhat.SubscriptionManager' (using servicehelper)
Aug  1 01:08:57 localhost dbus-daemon: dbus[1124]: [system] Successfully activated
service 'com.redhat.SubscriptionManager'
Aug  1 01:08:57 localhost dbus[1124]: [system] Successfully activated service '
com.redhat.SubscriptionManager'

5.tr命令

tr命令用于替换文本文件中的字符,格式为“tr [原始字符] [目标字符]”。

在很多时候,我们想要快速地替换文本中的一些词汇,又或者把整个文本内容都进行替换,如果进行手工替换,难免工作量太大,尤其是需要处理大批量的内容时,进行手工替换更是不现实。这时,就可以先使用cat命令读取待处理的文本,然后通过管道符(详见第3章)把这些文本内容传递给tr命令进行替换操作即可。例如,把某个文本内容中的英文全部替换为大写:

[root@linuxprobe ~]# cat anaconda-ks.cfg | tr [a-z] [A-Z]
#VERSION=RHEL7
# SYSTEM AUTHORIZATION INFORMATION
AUTH --ENABLESHADOW --PASSALGO=SHA512

# USE CDROM INSTALLATION MEDIA
CDROM
# RUN THE SETUP AGENT ON FIRST BOOT
FIRSTBOOT --ENABLE
IGNOREDISK --ONLY-USE=SDA
# KEYBOARD LAYOUTS
KEYBOARD --VCKEYMAP=US --XLAYOUTS='US'
# SYSTEM LANGUAGE
LANG EN_US.UTF-8

# NETWORK INFORMATION
NETWORK --BOOTPROTO=DHCP --DEVICE=ENO16777728 --ONBOOT=OFF --IPV6=AUTO
NETWORK --HOSTNAME=LOCALHOST.LOCALDOMAIN
# ROOT PASSWORD
ROOTPW --ISCRYPTED $6$PDJJF42G8C6PL069$II.PX/YFAQPO0ENW2PA7MOMKJLYOAE2ZJMZ2UZJ7
BH3UO4OWTR1.WK/HXZ3XIGMZGJPCS/MGPYSSOI8HPCT8B/
# SYSTEM TIMEZONE
TIMEZONE AMERICA/NEW_YORK --ISUTC
USER --NAME=LINUXPROBE --PASSWORD=$6$A9V3INSTNBWEIR7D$JEGFYWBCDOOOKJ9SODECCDO.
ZLF4OSH2AZ2SS2R05B6LZ2A0V2K.RJWSBALL2FEKQVGF640OA/TOK6J.7GUTO/ --ISCRYPTED --
GECOS="LINUXPROBE"
# X WINDOW SYSTEM CONFIGURATION INFORMATION
XCONFIG --STARTXONBOOT
# SYSTEM BOOTLOADER CONFIGURATION
BOOTLOADER --LOCATION=MBR --BOOT-DRIVE=SDA
AUTOPART --TYPE=LVM
# PARTITION CLEARING INFORMATION
CLEARPART --NONE --INITLABEL 

%PACKAGES
@BASE
@CORE
@DESKTOP-DEBUGGING
@DIAL-UP
@FONTS
@GNOME-DESKTOP
@GUEST-AGENTS
@GUEST-DESKTOP-AGENTS
@INPUT-METHODS
@INTERNET-BROWSER
@MULTIMEDIA
@PRINT-CLIENT
@X11

%END

6.wc命令

wc命令用于统计指定文本的行数、字数、字节数,格式为“wc [参数] 文本”。

每次我在课堂上讲到这个命令时,总有同学会联想到一种公共设施,其实这两者毫无关联。Linux系统中的wc命令用于统计文本的行数、字数、字节数等。如果为了方便自己记住这个命令的作用,也可以联想到上厕所时好无聊,无聊到数完了手中的如厕读物上有多少行字。

wc的参数以及相应的作用如表2-10所示。

表2-10  wc的参数以及作用

参数

作用

-l

只显示行数

-w

只显示单词数

-c

只显示字节数

在Linux系统中,passwd是用于保存系统账户信息的文件,要统计当前系统中有多少个用户,可以使用下面的命令来进行查询,是不是很神奇:

[root@linuxprobe ~]# wc -l /etc/passwd
38 /etc/passwd

7.stat命令

stat命令用于查看文件的具体存储信息和时间等信息,格式为“stat 文件名称”。

stat命令可以用于查看文件的存储信息和时间等信息,命令stat anaconda-ks.cfg会显示出文件的三种时间状态(已加粗):Access、Modify、Change。这三种时间的区别将在下面的touch命令中详细详解:

[root@linuxprobe ~]# stat anaconda-ks.cfg
File: ‘anaconda-ks.cfg’
Size: 1213 Blocks: 8 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 68912908 Links: 1
Access: (0600/-rw-------) Uid: ( 0/ root) Gid: ( 0/ root)
Context: system_u:object_r:admin_home_t:s0
Access: 2017-07-14 01:46:18.721255659 -0400
Modify: 2017-05-04 15:44:36.916027026 -0400
Change: 2017-05-04 15:44:36.916027026 -0400
Birth: -

8.cut命令

cut命令用于按“列”提取文本字符,格式为“cut [参数] 文本”。

在Linux系统中,如何准确地提取出最想要的数据,这也是我们应该重点学习的内容。一般而言,按基于“行”的方式来提取数据是比较简单的,只需要设置好要搜索的关键词即可。但是如果按列搜索,不仅要使用-f参数来设置需要看的列数,还需要使用-d参数来设置间隔符号。passwd在保存用户数据信息时,用户信息的每一项值之间是采用冒号来间隔的,接下来我们使用下述命令尝试提取出passwd文件中的用户名信息,即提取以冒号(:)为间隔符号的第一列内容:

[root@linuxprobe ~]# head -n 2 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
[root@linuxprobe ~]# cut -d: -f1 /etc/passwd
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
operator
games
ftp
nobody
dbus
polkitd
unbound
colord
usbmuxd
avahi
avahi-autoipd
libstoragemgmt
saslauth
qemu
rpc
rpcuser
nfsnobody
rtkit
radvd
ntp
chrony
abrt
pulse
gdm
gnome-initial-setup
postfix
sshd
tcpdump
linuxprobe

9.diff命令

diff命令用于比较多个文本文件的差异,格式为“diff [参数] 文件”。

在使用diff命令时,不仅可以使用--brief参数来确认两个文件是否不同,还可以使用-c参数来详细比较出多个文件的差异之处,这绝对是判断文件是否被篡改的有力神器。例如,先使用cat命令分别查看diff_A.txt和diff_B.txt文件的内容,然后进行比较:

[root@linuxprobe ~]# cat diff_A.txt
Welcome to linuxprobe.com
Red Hat certified
Free Linux Lessons
Professional guidance
Linux Course
[root@linuxprobe ~]# cat diff_B.txt
Welcome tooo linuxprobe.com

Red Hat certified
Free Linux LeSSonS
////////.....////////
Professional guidance
Linux Course

接下来使用diff --brief命令显示比较后的结果,判断文件是否相同:

[root@linuxprobe ~]# diff --brief diff_A.txt diff_B.txt
Files diff_A.txt and diff_B.txt differ

最后使用带有-c参数的diff命令来描述文件内容具体的不同:

[root@linuxprobe ~]# diff -c diff_A.txt diff_B.txt
*** diff_A.txt 2017-08-30 18:07:45.230864626 +0800
--- diff_B.txt 2017-08-30 18:08:52.203860389 +0800
***************
*** 1,5 ****
! Welcome to linuxprobe.com
Red Hat certified
! Free Linux Lessons
Professional guidance
Linux Course
--- 1,7 ----
! Welcome tooo linuxprobe.com
!
Red Hat certified
! Free Linux LeSSonS
! ////////.....////////
Professional guidance
Linux Course

目前为止,我们学习Linux命令就像是在夯实地基,虽然表面上暂时还看不到成果,但其实大家的内功已经相当雄厚了。在Linux系统的日常运维工作中,还需要掌握对文件的创建、修改、复制、剪切、更名与删除等操作。

1.touch命令

touch命令用于创建空白文件或设置文件的时间,格式为“touch [选项] [文件]”。

在创建空白的文本文件方面,这个touch命令相当简捷,简捷到没有必要铺开去讲。比如,touch linuxprobe命令可以创建出一个名为linuxprobe的空白文本文件。对touch命令来讲,有难度的操作主要是体现在设置文件内容的修改时间(mtime)、文件权限或属性的更改时间(ctime)与文件的读取时间(atime)上面。touch命令的参数及其作用如表2-11所示。

表2-11  touch命令的参数及其作用

参数

作用

-a

仅修改“读取时间”(atime)

-m

仅修改“修改时间”(mtime)

-d

同时修改atime与mtime

接下来,我们先使用ls命令查看一个文件的修改时间,然后修改这个文件,最后再通过touch命令把修改后的文件时间设置成修改之间的时间(很多黑客就是这样做的呢):

[root@linuxprobe ~]# ls -l anaconda-ks.cfg 
-rw-------. 1 root root 1213 May 4 15:44 anaconda-ks.cfg
[root@linuxprobe ~]# echo "Visit the LinuxProbe.com to learn linux skills" >> 
anaconda-ks.cfg
[root@linuxprobe ~]# ls -l anaconda-ks.cfg
-rw-------. 1 root root 1260 Aug 2 01:26 anaconda-ks.cfg
[root@linuxprobe ~]# touch -d "2017-05-04 15:44" anaconda-ks.cfg 
[root@linuxprobe ~]# ls -l anaconda-ks.cfg 
-rw-------. 1 root root 1260 May 4 15:44 anaconda-ks.cfg

2.mkdir命令

mkdir命令用于创建空白的目录,格式为“mkdir [选项] 目录”。

在Linux系统中,文件夹是最常见的文件类型之一。除了能创建单个空白目录外,mkdir命令还可以结合-p参数来递归创建出具有嵌套叠层关系的文件目录。

[root@linuxprobe ~]# mkdir linuxprobe
[root@linuxprobe ~]# cd linuxprobe
[root@linuxprobe linuxprobe]# mkdir -p a/b/c/d/e
[root@linuxprobe linuxprobe]# cd a
[root@linuxprobe a]# cd b
[root@linuxprobe b]#

3.cp命令

cp命令用于复制文件或目录,格式为“cp [选项] 源文件 目标文件”。

大家对文件复制操作应该不陌生,在Linux系统中,复制操作具体分为3种情况:

cp命令的参数及其作用如表2-12所示。

表2-12  cp命令的参数及其作用

参数

作用

-p

保留原始文件的属性

-d

若对象为“链接文件”,则保留该“链接文件”的属性

-r

递归持续复制(用于目录)

-i

若目标文件存在则询问是否覆盖

-a

相当于-pdr(p、d、r为上述参数)

接下来,使用touch创建一个名为install.log的普通空白文件,然后将其复制为一份名为x.log的备份文件,最后再使用ls命令查看目录中的文件:

[root@linuxprobe ~]# touch install.log
[root@linuxprobe ~]# cp install.log x.log
[root@linuxprobe ~]# ls
install.log x.log

4.mv命令

mv命令用于剪切文件或将文件重命名,格式为“mv [选项] 源文件 [目标路径|目标文件名]”。

剪切操作不同于复制操作,因为它会默认把源文件删除掉,只保留剪切后的文件。如果在同一个目录中对一个文件进行剪切操作,其实也就是对其进行重命名:

[root@linuxprobe ~]# mv x.log linux.log
[root@linuxprobe ~]# ls
install.log linux.log

5.rm命令

rm命令用于删除文件或目录,格式为“rm [选项] 文件”。

在Linux系统中删除文件时,系统会默认向您询问是否要执行删除操作,如果不想总是看到这种反复的确认信息,可在rm命令后跟上-f参数来强制删除。另外,想要删除一个目录,需要在rm命令后面一个-r参数才可以,否则删除不掉。我们来尝试删除前面创建的install.log和linux.log文件:

[root@linuxprobe ~]# rm install.log
rm: remove regular empty file ‘install.log’? y
[root@linuxprobe ~]# rm -f linux.log
[root@linuxprobe ~]# ls
[root@linuxprobe ~]#

6.dd命令

dd命令用于按照指定大小和个数的数据块来复制文件或转换文件,格式为“dd [参数]”。

dd命令是一个比较重要而且比较有特色的一个命令,它能够让用户按照指定大小和个数的数据块来复制文件的内容。当然如果愿意的话,还可以在复制过程中转换其中的数据。Linux系统中有一个名为/dev/zero的设备文件,每次在课堂上解释它时都充满哲学理论的色彩。因为这个文件不会占用系统存储空间,但却可以提供无穷无尽的数据,因此可以使用它作为dd命令的输入文件,来生成一个指定大小的文件。dd命令的参数及其作用如表2-13所示。

表2-13  dd命令的参数及其作用

参数

作用

if

输入的文件名称

of

输出的文件名称

bs

设置每个“块”的大小

count

设置要复制“块”的个数

例如我们可以用dd命令从/dev/zero设备文件中取出一个大小为560MB的数据块,然后保存成名为560_file的文件。在理解了这个命令后,以后就能随意创建任意大小的文件了:

[root@linuxprobe ~]# dd if=/dev/zero of=560_file count=1 bs=560M
1+0 records in
1+0 records out
587202560 bytes (587 MB) copied, 27.1755 s, 21.6 MB/s

dd命令的功能也绝不仅限于复制文件这么简单。如果您想把光驱设备中的光盘制作成iso格式的镜像文件,在Windows系统中需要借助于第三方软件才能做到,但在Linux系统中可以直接使用dd命令来压制出光盘镜像文件,将它编程一个可立即使用的iso镜像:

[root@linuxprobe ~]# dd if=/dev/cdrom of=RHEL-server-7.0-x86_64-LinuxProbe.Com.iso
7311360+0 records in
7311360+0 records out
3743416320 bytes (3.7 GB) copied, 370.758 s, 10.1 MB/s

考虑到有些读者会纠结bs块大小与count块个数的关系,下面举一个吃货的例子进行解释。假设小明的饭量(即需求)是一个固定的值,用来盛饭的勺子的大小即bs块大小,而用勺子盛饭的次数即count块个数。小明要想吃饱(满足需求),则需要在勺子大小(bs块大小)与用勺子盛饭的次数(count块个数)之间进行平衡。勺子越大,用勺子盛饭的次数就越少。有上可见,bs与count都是用来指定容量的大小,只要能满足需求,可随意组合搭配方式。

7.file命令

file命令用于查看文件的类型,格式为“file 文件名”。

在Linux系统中,由于文本、目录、设备等所有这些一切都统称为文件,而我们又不能单凭后缀就知道具体的文件类型,这时就需要使用file命令来查看文件类型了。

[root@linuxprobe ~]# file anaconda-ks.cfg 
anaconda-ks.cfg: ASCII text
[root@linuxprobe ~]# file /dev/sda
/dev/sda: block special

在网络上,人们越来越倾向于传输压缩格式的文件,原因是压缩文件体积小,在网速相同的情况下,传输时间短。下面将学习如何在Linux系统中对文件进行打包压缩与解压,以及让用户基于关键词在文本文件中搜索相匹配的信息、在整个文件系统中基于指定的名称或属性搜索特定文件。本节虽然只有3条命令,但是其功能都比较复杂而且参数很多,因此放到了本章最后讲解。

1.tar命令

tar命令用于对文件进行打包压缩或解压,格式为“tar [选项] [文件]”。

在Linux系统中,常见的文件格式比较多,其中主要使用的是.tar或.tar.gz或.tar.bz2格式,我们不用担心格式太多而记不住,其实这些格式大部分都是由tar命令来生成的。刘遄老师将讲解最重要的几个参数,以方便大家理解。tar命令的参数及其作用如表2-14所示。

表2-14  tar命令的参数及其作用

参数

作用

-c

创建压缩文件

-x

解开压缩文件

-t

查看压缩包内有哪些文件

-z

用Gzip压缩或解压

-j

用bzip2压缩或解压

-v

显示压缩或解压的过程

-f

目标文件名

-p

保留原始的权限与属性

-P

使用绝对路径来压缩

-C

指定解压到的目录

首先,-c参数用于创建压缩文件,-x参数用于解压文件,因此这两个参数不能同时使用。其次,-z参数指定使用Gzip格式来压缩或解压文件,-j参数指定使用bzip2格式来压缩或解压文件。用户使用时则是根据文件的后缀来决定应使用何种格式参数进行解压。在执行某些压缩或解压操作时,可能需要花费数个小时,如果屏幕一直没有输出,您一方面不好判断打包的进度情况,另一方面也会怀疑电脑死机了,因此非常推荐使用-v参数向用户不断显示压缩或解压的过程。-C参数用于指定要解压到哪个指定的目录。-f参数特别重要,它必须放到参数的最后一位,代表要压缩或解压的软件包名称。刘遄老师一般使用“tar -czvf 压缩包名称.tar.gz 要打包的目录”命令把指定的文件进行打包压缩;相应的解压命令为“tar -xzvf 压缩包名称.tar.gz”。下面我们来逐个演示下打包压缩与解压的操作。先使用tar命令把/etc目录通过gzip格式进行打包压缩,并把文件命名为etc.tar.gz:

[root@linuxprobe ~]# tar -czvf etc.tar.gz /etc
tar: Removing leading '/' from member names
/etc/
/etc/fstab
/etc/crypttab
/etc/mtab
/etc/fonts/
/etc/fonts/conf.d/
/etc/fonts/conf.d/65-0-madan.conf
/etc/fonts/conf.d/59-liberation-sans.conf
/etc/fonts/conf.d/90-ttf-arphic-uming-embolden.conf
/etc/fonts/conf.d/59-liberation-mono.conf
/etc/fonts/conf.d/66-sil-nuosu.conf
………………省略部分压缩过程信息………………

接下来将打包后的压缩包文件指定解压到/root/etc目录中(先使用mkdir命令来创建/root/etc目录):

[root@linuxprobe ~]# mkdir /root/etc
[root@linuxprobe ~]# tar xzvf etc.tar.gz -C /root/etc
etc/
etc/fstab
etc/crypttab
etc/mtab
etc/fonts/
etc/fonts/conf.d/
etc/fonts/conf.d/65-0-madan.conf
etc/fonts/conf.d/59-liberation-sans.conf
etc/fonts/conf.d/90-ttf-arphic-uming-embolden.conf
etc/fonts/conf.d/59-liberation-mono.conf
etc/fonts/conf.d/66-sil-nuosu.conf
etc/fonts/conf.d/65-1-vlgothic-gothic.conf
etc/fonts/conf.d/65-0-lohit-bengali.conf
etc/fonts/conf.d/20-unhint-small-dejavu-sans.conf
………………省略部分解压过程信息………………

2.grep命令

grep命令用于在文本中执行关键词搜索,并显示匹配的结果,格式为“grep [选项] [文件]”。grep命令的参数及其作用如表2-15所示。

表2-15  grep命令的参数及其作用

参数

作用

-b

将可执行文件(binary)当作文本文件(text)来搜索

-c

仅显示找到的行数

-i

忽略大小写

-n

显示行号

-v

反向选择——仅列出没有“关键词”的行

grep命令是用途最广泛的文本搜索匹配工具,虽然有很多参数,但是大多数基本上都用不到。刘遄老师在总结了近10年的运维工作和培训教学的经验后,提出的本书的写作理念“去掉不实用”绝对不是信口开河。如果一名IT培训讲师的水平只能停留在“技术的搬运工”层面,而不能对优质技术知识进行提炼总结,那对他的学生来讲绝非好事。我们在这里只讲两个最最常用的参数:-n参数用来显示搜索到信息的行号;-v参数用于反选信息(即没有包含关键词的所有信息行)。这两个参数几乎能完成您日后80%的工作需要,至于其他上百个参数,即使以后在工作期间遇到了,再使用man grep命令查询也来得及。

在Linux系统中,/etc/passwd文件是保存着所有的用户信息,而一旦用户的登录终端被设置成/sbin/nologin,则不再允许登录系统,因此可以使用grep命令来查找出当前系统中不允许登录系统的所有用户信息:

[root@linuxprobe ~]# grep /sbin/nologin /etc/passwd
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
………………省略部分输出过程信息………………

3.find命令

find命令用于按照指定条件来查找文件,格式为“find [查找路径] 寻找条件 操作”。

本书中曾经多次提到“Linux系统中的一切都是文件”,接下来就要见证这句话的分量了。在Linux系统中,搜索工作一般都是通过find命令来完成的,它可以使用不同的文件特性作为寻找条件(如文件名、大小、修改时间、权限等信息),一旦匹配成功则默认将信息显示到屏幕上。find命令的参数以及作用如表2-16所示。

表2-16  find命令中的参数以及作用

参数

作用

-name

匹配名称

-perm

匹配权限(mode为完全匹配,-mode为包含即可)

-user

匹配所有者

-group

匹配所有组

-mtime -n +n

匹配修改内容的时间(-n指n天以内,+n指n天以前)

-atime -n +n

匹配访问文件的时间(-n指n天以内,+n指n天以前)

-ctime -n +n

匹配修改文件权限的时间(-n指n天以内,+n指n天以前)

-nouser

匹配无所有者的文件

-nogroup

匹配无所有组的文件

-newer f1 !f2

匹配比文件f1新但比f2旧的文件

--type b/d/c/p/l/f

匹配文件类型(后面的字幕参数依次表示块设备、目录、字符设备、管道、链接文件、文本文件)

-size

匹配文件的大小(+50KB为查找超过50KB的文件,而-50KB为查找小于50KB的文件)

-prune

忽略某个目录

-exec …… {}\;

后面可跟用于进一步处理搜索结果的命令(下文会有演示)

这里需要重点讲解一下-exec参数重要的作用。这个参数用于把find命令搜索到的结果交由紧随其后的命令作进一步处理,它十分类似于第3章将要讲解的管道符技术,并且由于find命令对参数的特殊要求,因此虽然exec是长格式形式,但依然只需要一个减号(-)。

根据文件系统层次标准(Filesystem Hierarchy Standard)协议,Linux系统中的配置文件会保存到/etc目录中(详见第6章)。如果要想获取到该目录中所有以host开头的文件列表,可以执行如下命令:

[root@linuxprobe ~]# find /etc -name "host*" -print
/etc/avahi/hosts
/etc/host.conf
/etc/hosts
/etc/hosts.allow
/etc/hosts.deny
/etc/selinux/targeted/modules/active/modules/hostname.pp
/etc/hostname

如果要在整个系统中搜索权限中包括SUID权限的所有文件(详见第5章),只需使用-4000即可:

[root@linuxprobe ~]# find / -perm -4000 -print
/usr/bin/fusermount
/usr/bin/su
/usr/bin/umount
/usr/bin/passwd
/usr/sbin/userhelper
/usr/sbin/usernetctl
………………省略部分输出信息………………

注:

 

进阶实验:在整个文件系统中找出所有归属于linuxprobe用户的文件并复制到/root/findresults目录。

该实验的重点是“-exec {}  \;”参数,其中的{}表示find命令搜索出的每一个文件,并且命令的结尾必须是“\;”。完成该实验的具体命令如下:

[root@linuxprobe ~]# find / -user linuxprobe -exec cp -a {} /root/findresults/ \;

在本章最后,刘遄老师再多提几句:很多读者初次接触到本书时都担心因为自己的英语基础不好而导致学不会Linux系统,其实大可不必担心,因为我们的图书、培训课程甚至红帽 考题都是中文的。而在学习完本章后您也一定发现了,我们以后要使用的是Linux命令,而绝不是纯粹的英语单词,即便它们的拼写100%相同,最终用处肯定也是不一样的。因此就学习Linux系统技术来讲,您跟英语达人绝对都是站在同一起跑线上的,更何况还正确地选择了一本适合您的Linux教材。休息一下,然后开始学习第3章吧!

1.在RHEL 7系统及众多的Linux系统中,最常使用的Shell终端是什么?

答:Bash(Bourne-Again SHell)解释器。

2.执行Linux系统命令时,添加参数的目的是什么?

答:为了让Linux系统命令能够更贴合用户的实际需求进行工作。

3.Linux系统命令、命令参数及命令对象之间,普遍应该使用什么来间隔?

答:应该使用一个或多个空格进行间隔。

4.请写出用echo命令把SHELL变量值输出到屏幕终端的命令。

答:echo $SHELL。

5.简述Linux系统中5种进程的名称及含义。

答:在Linux系统中,有下面5种进程名称。

R(运行):进程正在运行或在运行队列中等待。

S(中断):进程处于休眠中,当某个条件形成后或者接收到信号时,则脱离该状态。

D(不可中断):进程不响应系统异步信号,即便用kill命令也不能将其中断。

Z(僵死):进程已经终止,但进程描述符依然存在, 直到父进程调用wait4()系统函数后将进程释放。

T(停止):进程收到停止信号后停止运行。

6.请尝试使用Linux系统命令关闭PID为5529的服务进程。

答:执行kill 5529命令即可;若知道服务的名称,则可以使用killall命令进行关闭。

7.使用ifconfig命令查看网络状态信息时,需要重点查看的4项信息分别是什么?

答:这4项重要信息分别是网卡名称、IP地址、网卡物理地址以及RX/TX的收发流量数据大小。

8.使用uptime命令查看系统负载时,对应的负载数值如果是0.91、0.56、0.32,那么最近15分钟内负载压力最大的是哪个时间段?

答:通过负载数值可以看出,最近1分钟内的负载压力是最大的。

9.使用history命令查看历史命令的执行记录时,命令前面的数字除了排序外还有什么用处?

答:还可以用“!数字”的命令格式重复执行某一次的命令记录,从而避免了重复输入较长命令的麻烦。

10.若想查看的文件具有较长的内容,那么使用cat、more、head、tail中的哪个命令最合适?

答:文件内容较长,使用more命令;反之使用cat命令。

11.在使用mkdir命令创建有嵌套关系的目录时,应该加上什么参数呢?

答:应该加上-p递归迭代参数,从而自动化创建有嵌套关系的目录。

12.在使用rm命令删除文件或目录时,可使用哪个参数来避免二次确认呢?

答:可使用-f参数,这样即可无需二次确认。

13.若有一个名为backup.tar.gz的压缩包文件,那么解压的命令应该是什么?

答:应该用tar命令进行解压,执行tar -xzvf backup.tar.gz命令即可。

14.使用grep命令对某个文件进行关键词搜索时,若想要进行文件内容反选,应使用什么参数?

答:可使用-v参数来进行匹配内容的反向选择,即显示出不包含某个关键词的行。


相关图书

Linux常用命令自学手册
Linux常用命令自学手册
庖丁解牛Linux操作系统分析
庖丁解牛Linux操作系统分析
Linux后端开发工程实践
Linux后端开发工程实践
轻松学Linux:从Manjaro到Arch Linux
轻松学Linux:从Manjaro到Arch Linux
Linux高性能网络详解:从DPDK、RDMA到XDP
Linux高性能网络详解:从DPDK、RDMA到XDP
跟老韩学Linux架构(基础篇)
跟老韩学Linux架构(基础篇)

相关文章

相关课程