循序渐进Linux(第2版) 基础知识 服务器搭建 系统管理 性能调优 虚拟化与集群应用

978-7-115-40985-0
作者: 高俊峰
译者:
编辑: 傅道坤

图书目录:

详情

本书从基础知识入手,系统讲解了Linux系统结构、shell、主流服务器搭建及故障排除、用户权限管理、磁盘存储管理、文件系统管理、内存管理和系统进程管理等关键技术,深入研究了系统性能优化思路、系统性能评估与优化、虚拟化、集群技术、负载均衡等Linux热点主题。

图书摘要

版权信息

书名:循序渐进Linux(第2版) 基础知识 服务器搭建 系统管理 性能调优 虚拟化与集群应用

ISBN:978-7-115-40985-0

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

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

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

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

• 著  高俊峰

  责任编辑 傅道坤

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

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

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

  读者服务热线:(010)81055410   印装质量热线:(010)81055316

  反盗版热线:(010)81055315



高俊峰,网名南非蚂蚁,著名Linux专家,知名IT作家。毕业于西安电子科技大学通信工程专业。曾就职于新浪网、阿里云(原万网),任职系统架构师。具有多年的自动化运维和管理经验,擅长Linux、集群应用、Mysql、Oracle等方面的系统管理、性能调优,规划设计,实战经验丰富。曾出版《循序渐进Linux》、《高性能Linux服务器构建实战》等畅销Linux书籍。

本书特色

本书最大的特点是注重实践、理论与实际相结合,在讲述完一个知识点后,一般都附有很多的例子,作为对理论知识的实践补充,并且每个章节都涉及独立的知识,读者可以只选择阅读感兴趣的章节,也可以从头开始阅读。全书给出了一个由浅入深、由点及面、循序渐进地学习Linux的过程。

本书主要分为五篇,共20章,基本结构如下。

第一篇 基础知识篇(第1章~第5章)

第一篇主要讲述Linux的学习方法、Linux的安装、系统基本结构、系统运作原理、常用命令的使用方法以及软件包的安装与使用,每个章节都理论与实践相结合,每个知识点的讲解都尽力做到完整、明确。通过对基础知识篇的学习,初学者已经对Linux有了一个整体的清晰认识,或者说已经进入了Linux领域的大门了。

第二篇 服务器搭建篇(第6章~第10章)

第二篇主要讲述Linux在服务器环境下的系统安全防范以及各种应用软件使用环境的搭建,首先讲解了Linux作为服务器的安全策略和安全防范规则,然后详述了各种Linux服务器的架设过程。由于Linux下应用软件数目众多,不可能面面俱到,这里选择了最常用、最流行的Linux应用软件作为讲述的对象,主要讲解了Web服务器的搭建、LAMP服务器的搭建、DNS服务器的搭建、Samba服务器搭建。此外,还深入介绍了如何构建一个高性能的MySQL数据库服务器。最后结合实际案例讲述了Linux常见故障的排除思路和解决方法。

第三篇 系统管理篇(第11章~第15章)

通过对前两篇的学习,读者已经掌握Linux的基本使用方法。该篇进入Linux深入学习阶段:系统管理,主要讲述Linux系统下的用户权限管理、磁盘存储管理、文件系统管理、内存管理、进程管理。通过对这些内容的学习,让读者更深层次地理解Linux的运作机制和原理,因为只有真正理解了Linux内部的技术细节,才能更深入地学习Linux,为进一步学习后面的章节打下坚实的基础。

第四篇 性能调优篇(第16章~第17章)

第四篇主要讲述Linux服务器的性能调优原则和调优思路,开篇首先讲述了性能优化的思路和性能评价标准,然后分别评估了影响Linux性能的四个方面:Linux的CPU性能评估、内存性能评估、磁盘I/O性能评估、网络性能评估。通过该篇的学习,读者应该对Linux服务器的性能调优工作有了全面的认识和了解,为以后的系统管理和维护工作打下良好基础。

第五篇 虚拟化与集群应用篇(第18章~第20章)

第五篇是对本书知识体系的一个综合,或者说是对全书所有知识点的一个整理和融合。该篇从实际应用出发,详细深入地讲述了开源虚拟化平台PVE的使用、高性能集群软件Keepalived的使用、负载均衡集群软件LVS、HAproxy的使用等。学习完该篇,相信读者对虚拟化会有一个全新的了解,并且能熟练应用高可用集群和负载均衡集群构建业务系统。

本书适合的读者对象有:


本书从基础知识入手,系统讲解了Linux系统结构、shell、主流服务器搭建及故障排除、用户权限管理、磁盘存储管理、文件系统管理、内存管理和系统进程管理等关键技术,深入研究了系统性能优化思路、系统性能评估与优化、集群技术、负载均衡等Linux热点主题。

全书强调学习方法以及技术能力的培养,在每个知识点后都给出了大量操作案例,包括了详细的操作步骤,具有很强的可操作性,并对案例进行分析,提供了解决问题的思路和方法,做到了授人以渔。

本书适合希望系统、全面学习Linux技术的初学者作为教材,也适合Linux系统管理员、数据库管理人员、网络安全管理人员、系统集成人员和系统架构师参考。


随着虚拟化、云计算时代的来临,Linux迅猛发展,在服务器领域已经占据半壁江山,而基于Linux的运维也面临新的挑战:面对越来越复杂的业务,面对越来越多样化的用户需求,不断扩展的应用需要越来越合理的模式来保障Linux灵活便捷、安全稳定地持续提供服务,这种模式中的保障因素就是Linux运维。从初期的几台服务器发展到庞大的云计算数据中心,单靠人工已经无法满足在技术、业务、管理等方面的要求,于是标准化、自动化、稳定性、可靠性等业务需求越来越被人们所重视。因此,对Linux的高性能、可靠性提出了更高的要求。

2009年我完成了基于Linux操作系统的入门作品《循序渐进Linux——基础知识、服务器搭建、系统管理、性能调优、集群应用》。本书出版后,得到了很多同行的认可和支持,但是,由于这本书出版已近6年,书中介绍的部分知识点和操作系统版本已经变得陈旧,已不能满足Linux以及开源技术迅速发展的需求,抱着对读者和本书负责的态度,我决定修订此书,因此也就有了本书。

目前市场上关于Linux系统管理或运维的书籍有很多,但是普遍存在的问题是模式单一,要么只讲基础理论和系统命令,要么侧重粘贴代码,要么介绍软件的安装与配置,这种模式带有很大的实验性质,并没有生产环境中实战应用和经验技巧的介绍。

本书以RHEL/CentOS 7.x版本为主线,也涉及RHEL/CentOS 6.x的版本,这也是目前企业线上环境主流的系统版本。在内容介绍上,本书从基础入手,再进行深入研究,同时结合实际的应用案例进行由点到线及面、由浅入深的讲述。本书秉承了实战、实用、通俗、易懂的特点,在内容上十分注重实战化,从系统管理的多个方面以真实的生产环境介绍Linux系统管理工作中的各个方面,理论介绍结合实际应用是贯穿全书的思想,通过真实案例的学习,可以使读者深入、迅速地掌握Linux运维技术的各种经验和技巧,从而真正提高实践能力。

Linux作为一个开源的操作系统,有着自己独特的魅力,作为一个Linux爱好者或者Linux初学者,掌握一个合理有效的学习方法是至关重要的。在这里,我作为一个Linux老手,谈谈自己的一点看法和经验。

1.多动手实践,理论结合实际

要学活、学通Linux操作系统,必须理论结合实际,多动手操作。例如,对每个命令都要亲自操作实践,对于命令的每个参数也要亲自实践,只有这样才能理解其含义。虽然现在网络上关于Linux的文档资料很多,单单一味地去看,是没有任何效果的。

有很多新手都存在这么一个问题,感觉自己也学习Linux时间很长了,基本命令操作也都知道,但是在系统出现故障时,面对Linux显得无能为力,不知道如何下手。归根结底,就是学习的理论知识没有很好地与实际操作相结合。总之,只有多次动手练习,多多实战,才能掌握其中的技巧。

2.一定要习惯命令行方式工作

Linux下90%的操作都是通过命令行完成的,因而,命令是必须要熟练掌握的。这对于刚刚从Windows下转到Linux的新手可能会有点困难,但是一定要努力适应。这确实有点困难,但是一旦迈过了这个难关,接下来学习Linux的道路将一马平川。很多Linux新手最终放弃Linux,都跟这个原因有关。

3.选择一个适合自己的Linux发行版本

Linux的发行版本太多了,目前Linux大约有300多个发行版本。但是,请不要为此而感到没有头绪。根据自己学习Linux的方向,选择适合自己的发行版本。例如,如果喜欢Linux的企业级应用,想从事Linux服务器管理方面的工作,推荐学习CentOS版本或者Red Hat Enterprise Linux发行版本;而如果是为了娱乐游戏等,推荐选择Ubuntu Linux;如果你已经是Linux的初中级学者,想继续深入学习,推荐选择CentOS或者Debian Linux等。

4.学会使用Linux的联机帮助

Linux是由命令组成的一个有机系统,因而命令非常多,常用命令就有上百个。要识记每个命令的用法和参数,是不可能的,每个人都办不到。好在Linux自身提供了强大的联机帮助文档,如果不记得某些命令的用法,查看联机文档即可。例如,如果不清楚tar命令的用法,只须在命令行执行man tar,即可列出tar命令的所有参数和用法。熟练、灵活运用联机帮助,在Linux下工作会有事半功倍的效果。

5.学会利用网络资源

Linux能获得飞速发展,互联网的力量功不可没。网络上Linux技术社区、网站、论坛带动了Linux发展的热度,一些狂热的Linux爱好者无偿地将自己的学习经验和总结发布到网络上,并且在网络的每个角落回答广大网友提出的问题,这些免费的技术经验和资料是学习Linux的瑰宝。

遇到Linux难题,搜索引擎绝对是第一选择,基本上99%的问题,都可以在这里找到答案。如果还是不能解决问题,可以去大型Linux技术社区论坛,发表提问,热心的Linux爱好者一定会帮助你的。

本书最大的特点是注重实践、理论与实际相结合,在讲述完一个知识点后,一般都附有很多的例子,作为对理论知识的实践补充,并且每个章节都涉及独立的知识,读者可以只选择阅读感兴趣的章节,也可以从头开始阅读。全书给出了一个由浅入深、由点及面、循序渐进地学习Linux的过程。

本书主要分为五篇,共20章,基本结构如下。

第一篇 基础知识篇(第1章~第5章)

第一篇主要讲述Linux的学习方法、Linux的安装、系统基本结构、系统运作原理、常用命令的使用方法以及软件包的安装与使用,每个章节都理论与实践相结合,每个知识点的讲解都尽力做到完整、明确。通过对基础知识篇的学习,初学者已经对Linux有了一个整体的清晰认识,或者说已经进入了Linux领域的大门了。

第二篇 服务器搭建篇(第6章~第10章)

第二篇主要讲述Linux在服务器环境下的系统安全防范以及各种应用软件使用环境的搭建,首先讲解了Linux作为服务器的安全策略和安全防范规则,然后详述了各种Linux服务器的架设过程。由于Linux下应用软件数目众多,不可能面面俱到,这里选择了最常用、最流行的Linux应用软件作为讲述的对象,主要讲解了Web服务器的搭建、LAMP服务器的搭建、DNS服务器的搭建、Samba服务器搭建。此外,还深入介绍了如何构建一个高性能的MySQL数据库服务器。最后结合实际案例讲述了Linux常见故障的排除思路和解决方法。

第三篇 系统管理篇(第11章~第15章)

通过对前两篇的学习,读者已经掌握Linux的基本使用方法。该篇进入Linux深入学习阶段:系统管理,主要讲述Linux系统下的用户权限管理、磁盘存储管理、文件系统管理、内存管理、进程管理。通过对这些内容的学习,让读者更深层次地理解Linux的运作机制和原理,因为只有真正理解了Linux内部的技术细节,才能更深入地学习Linux,为进一步学习后面的章节打下坚实的基础。

第四篇 性能调优篇(第16章~第17章)

第四篇主要讲述Linux服务器的性能调优原则和调优思路,开篇首先讲述了性能优化的思路和性能评价标准,然后分别评估了影响Linux性能的四个方面:Linux的CPU性能评估、内存性能评估、磁盘I/O性能评估、网络性能评估。通过该篇的学习,读者应该对Linux服务器的性能调优工作有了全面的认识和了解,为以后的系统管理和维护工作打下良好基础。

第五篇 虚拟化与集群应用篇(第18章~第20章)

第五篇是对本书知识体系的一个综合,或者说是对全书所有知识点的一个整理和融合。该篇从实际应用出发,详细深入地讲述了开源虚拟化平台PVE的使用、高性能集群软件Keepalived的使用、负载均衡集群软件LVS、HAproxy的使用等。学习完该篇,相信读者对虚拟化会有一个全新的了解,并且能熟练应用高可用集群和负载均衡集群构建业务系统。

本书适合的读者对象有:

本书的修订信息会发布在作者的博客上,该博客会不定期更新书中的遗漏。当然,若读者遇到疑惑或者发现书中的错误,也欢迎在博客上留言,博客地址为http://ixdba.blog.51cto.com,非常欢迎大家到上面提出意见和建议。由于本人水平有限,书中错误、疏漏在所难免,希望大家多多批评指正!

首先要感谢我的爸爸、妈妈,感谢你们将我培养成人,并时时刻刻向我传递信心和力量!

感谢我的妻子吴娟然女士,是她的鼓励和背后默默的支持,让我坚持写完了这本书。

感谢对本书提供大力支持的杨武先生、禄广峰先生,感谢我的挚友张建坤、兰海文,他们从技术角度对本书某些章节进行了修改和补充,并提出了很多意见和建议。

本书内容是建立在开源软件与开源社区研究成果基础之上的,因此,在本书完成之际,对每位无私奉献的开源作者以及开源社区表示衷心的感谢,因为有他们,开源世界才更加精彩。同时,也要感谢学习和使用Linux开源软件过程中认识的一些同行好友,以及本书的众多支持者,在本书撰写过程中他们向我提出了很多意见和建议,人数众多不一一列举,在此一并感谢。

高俊峰(南非蚂蚁)


第1章 学习Linux的经验与技巧

第2章  Linux系统的安装与基础配置

第3章 Linux系统基本结构

第4章 Linux常用命令及使用技巧

第5章 Linux下软件的安装与管理


本章主要讲述学习Linux系统的一些方法和经验,包括如何选择适合自己的Linux发行版本,以及每个Linux发行版本的相互关系和适用环境,然后总结学习Linux的一般路线图,随后讲解如何利用虚拟机搭建自己的Linux学习环境,最后讲述学习Linux的一些资源。通过本章的学习,让初学者在学习Linux的过程中不再感到迷茫,找到适合自己的学习方法。

很多新手都有一个很疑惑的问题:“Linux我听过,但是学习Linux系统之后,能在上面干什么呢?或者说Linux系统具体能做什么呢?”带着这个疑问,本书开篇先概述Linux与开源软件的关系以及Linux的应用领域和未来的发展趋势。

Linux是一种自由和开放源代码的类UNIX操作系统,该操作系统的内核由林纳斯·托瓦兹在1991年首次发布,之后,再加上用户空间的应用程序,就成为Linux操作系统。严格来讲,Linux只是操作系统内核本身,但通常采用“Linux内核”来表达该意思。而Linux则常用来指基于Linux内核的完整操作系统,它包括GUI组件和许多其他实用工具。

GNU通用公共许可协议(GNU General Public License,GNU GPL或GPL),是一个广泛使用的自由软件许可协议条款。最初由理查德·斯托曼为GNU计划而撰写,GPL给出了计算机程序自由软件的定义,任何基于GPL软件开发衍生的产品在发布时必须采用GPL许可证方式,且必须公开源代码。

Linux是自由软件和开放源代码软件发展中最著名的例子。只要遵循GNU GPL,任何个人和机构都可以自由地使用Linux的所有底层源代码,也可以自由地修改和再发布。随着Linux操作系统飞速发展,在Linux上各种集成的开源软件和实用工具也得到了应用和普及,因此,Linux也成为开源软件的代名词。

随着开源软件在世界范围内影响力日益增强,Linux服务器操作系统在个服务器操作系统市场格局中占据了越来越多的市场份额,已经形成了大规模市场应用的局面,并且保持着快速的增长率,尤其在政府、金融、农业、交通、电信等国家关键领域。此外,考虑到Linux的快速成长性以及国家相关政策的扶持力度,Linux服务器产品一定能够冲击更大的服务器市场。

据权威部门统计,目前Linux在服务器领域已经占据75%的市场份额。同时,Linux在服务器市场的迅速崛起,已经引起全球IT产业的高度关注,并以强劲的势头成为服务器操作系统领域中的中坚力量。

近年来,特别在国内市场,Linux桌面操作系统的发展趋势非常迅猛。国内如中标麒麟Linux、红旗Linux、深度Linux等系统软件厂商都推出的Linux桌面操作系统,目前已经在政府、企业、OEM等领域得到了广泛应用。另外,SUSE、Ubuntu也相继推出了基于Linux的桌面系统,特别是Ubuntu Linux,已经积累了大量社区用户。但是,从系统的整体功能、性能来看,Linux桌面系统与Windows系列相比还有一定的差距,主要表现在系统易用性、系统管理、软硬件兼容性、软件的丰富程度等方面。

Linux的低成本、强大的定制功能以及良好的可移植性,使得Linux在嵌入式系统方面也得到广泛应用,目前Linux已广泛应用于手机、平板电脑、路由器、电视和电子游戏机等领域。在移动设备上广泛使用的Android操作系统就是创建在Linux内核之上的。目前,Android已经成为全球最流行的智能手机操作系统,据2015年权威部门最新统计,Android操作系统的全球市场份额已达84.6%。

此外,思科公司在网络防火墙和路由器中也使用了定制的Linux,阿里云也开发了一套基于Linux的操作系统“YunOS”,可用于智能手机、平板电脑和网络电视;常见的数字视频录像机、舞台灯光控制系统等都在逐渐采用定制版本的Linux来实现,而这一切均归功于Linux与开源的力量。

互联网产业的迅猛发展,促使云计算、大数据产业的形成并快速发展,云计算、大数据作为一个基于开源软件的平台,Linux占据了核心优势。据Linux基金会的研究,86%的企业已经使用Linux操作系统进行云计算、大数据平台的构建。目前,Linux已开始取代UNIX成为最受青睐的云计算、大数据平台操作系统。

Linux的发行版本太多了,以至于谁也不可能给出一个准确的数字,但是有一点是可以肯定的,Linux正在变得越来越流行。面对这么多的Linux发行版,打算从其他系统转到Linux系统来的初学者可能会感到困惑,即便是忠实的Linux用户也没有时间和精力去挨个尝试。因此,初学者在学习Linux之前,需要有一个明确的方向,选择一个适合自己的Linux系统至关重要。下面就分类介绍Linux发行版。

1.Red Hat Linux

Red Hat Linux是Red Hat最早发行的个人版本的Linux,其1.0版本于1994年11月3日发行。虽然其历史不及其他Linux发行版本悠久,但比起很多的Linux发行套件,Red Hat的历史要悠久得多。自从Red Hat 9.0版本发布后,Red Hat公司就不再开发桌面版的Linux发行套件,Red Hat Linux停止了开发,而将全部力量集中在服务器版的开发上,也就是Red Hat Enterprise Linux版。2004年4月30日,Red Hat公司正式停止对Red Hat 9.0版本的支援,这标志着Red Hat Linux的正式完结。原本的桌面版Red Hat Linux发行套件则与来自开源社区的Fedora进行合并,成为Fedora Core发行版本。

目前Red Hat分为两个系列:由Red Hat公司提供收费技术支持和更新的Red Hat Enterprise Linux,以及由社区开发的免费的Fedora Core。

2.Fedora Core

Fedora Core(FC)被Red Hat公司定位为新技术的测试平台,许多新技术都会在FC中检验。如果这些新技术稳定,Red Hat公司则会考虑加入到Red Hat Enterprise Linux中。

Fedora Core 1发布于2003年年末,而FC的定位便是桌面用户。FC提供了最新的软件包,同时它的版本更新周期也非常短,仅有6个月。由于版本更新频繁,性能和稳定性得不到保证,因此一般在服务器上不推荐采用Fedora Core。

对于用户而言,Fedora是一套功能完备、更新迅速的免费操作系统,因此,个人领域的应用,例如开发、体验新功能等,可选择此发行版本。

3.Red Hat Enterprise Linux

Red Hat Enterprise Linux(RHEL,Red Hat的企业版Linux)。Red Hat现在主要做服务器版的Linux开发,在版本上注重性能和稳定性,以及对硬件的支持。由于企业版操作系统的开发周期较长,注重性能、稳定性和服务端软件支持,因此版本更新相对较缓慢。

RHEL的版本都基于Fedora。大约发布六个新版本的Fedora后就会有一个新版本的RHEL发布,因此,RHEL大约3年发布一个新版本。在写作本书时,最新版本是2015年3月6日发布的RHEL 7.1。本书就是基于此版本展开讲述的。

4.CentOS

CentOS全名为“社区企业操作系统”(Community Enterprise Operating System)。它由来自于RHEL依照开放源代码规定发布的源代码编译而成,由于RHEL是商业产品,因此必须将Red Hat的所有Logo改成自己的CentOS标识,这就产生了CentOS操作系统。两者的不同在于,CentOS并不包含封闭源代码软件。因此,CentOS不但可以自由使用,而且能享受CentOS提供的长期免费升级和更新服务。这是CentOS的一个很大优势。

CentOS从RHEL的源代码包来构建,它的版本号有两部分:主要版本和次要版本,主要版本和次要版本号分别对应于RHEL的主要版本与更新包。例如,CentOS 6.5构建在RHEL6.0更新的第5版上。但是从RHEL7.0版本以后,CentOS版本命名格式又稍有变化:主要版本仍然对应于RHEL的主要版本,次要版本以RHEL更新包发布日期为准。例如,RHEL 7.1对应的CentOS版本为CentOS 7.1.1503,这表示RHEL 7.1版本是2015年3月发布的。

在2014年CentOS宣布与Red Hat合作,但CentOS将会在新的委员会下继续运作,并不受RHEL的影响。这个策略表明CentOS后续发展将由Red Hat作为强有力的支持。

5.SuSE Linux

SUSE是德国最著名的Linux发行版,也享有很高的声誉,不过命运相当坎坷。2003年11月4日,Novell公司对外宣布收购SUSE。2004年1月,该收购顺利完成,Novell同时将SUSE正式命名为SUSE Linux。Novell公司收购SUSE,加速了SUSE Linux的发展,将免费SUSE Linux改为openSUSE社区项目。但在2010年,Attachmate公司收购了Novell公司,在被收购后,SUSE Linux发展受阻。而就在3年后,SUSE再次易主,2014年9月,Attachmate公司被上市公司Micro Focus收购,但幸运的是,SUSE官方宣布开源作为SUSE的发展之本,仍将持续贡献开源,SUSE仍将全力支持openSUSE。

虽然SUSE多次易主,但并不影响它的专业性。据不完全统计,SUSE Linux现在欧洲Linux市场中占有将近80%的份额,大部分关键应用都是建立在SUSE Linux下的。而由于SUSE多次易主,再加上SUSE在中国的营销模式问题,现在SUSE在中国的Linux市场份额并不大,但是这些并不影响SUSE Linux高可靠性与稳定性的事实。随着SUSE的发展,相信SUSE Linux在中国的应用会越来越多。

6.Ubuntu Linux

Ubuntu(中文谐音为“友帮拓”、“优般图”、“乌班图”)是一个以桌面应用为主的Linux操作系统,基于Debian GNU/Linux,Ubuntu旨在为一般用户提供一个主要由自由软件构建而成的最新的同时又相当稳定的操作系统。Ubuntu具有庞大的社区力量,用户可以方便地从社区获得帮助。

7.发行版总结

上面主要介绍了几种最常见的Linux发行版本,其实Linux的发行版本还有很多,比较常见的还有Debian GNU/Linux、Mandriva、Gentoo、Slackware、Knoppix、MEPIS和Xandros,以及国产的红旗Linux、深度Linux和中标麒麟Linux等,这里不再一一介绍。其实纵观Linux的各个发行版,Linux发行版本无非是朝着这两个方面发展,一是服务器市场,二是桌面市场。

以Ubuntu Linux为代表的Linux发行版走的是桌面市场路线,虽然它们给用户带来很多惊喜,更新也很快,但是由于桌面市场有Windows这样强劲的对手,因此Linux桌面市场的发展不容乐观。目前Ubuntu Linux也开始向企业级服务器市场发力。

以Red Hat系列版本为代表的Linux发行版现在主要面向企业级Linux的服务器市场,重点开发Linux的企业版本,其他的发行版(例如,国产红旗Linux、中标麒麟Linux等)都重点投入在了Linux服务器市场。Linux两大发布厂商现在都走了Linux服务器市场的路线,可见Linux作为企业级服务器有着巨大的发展前途。据权威部门统计,Linux在服务器市场的占有率每年都在持续上升。

其实Linux的很多应用都是针对Linux服务器的,本书的讲述也是主要针对Linux在服务器下的各种应用展开的。

在了解了Linux几个主要发行版本后,我们就找到了为何选择CentOS作为初学者入门学习的理由了。

说到Linux桌面市场,Ubuntu Linux几乎占据了桌面Linux的半壁江山,Ubuntu Linux主打Linux桌面之最,界面美观,简洁而不失华丽。如果想在Linux下进行娱乐休闲,Ubuntu Linux绝对是首选。

Ubuntu的安装非常人性化,只须按照提示一步一步进行。Ubuntu被誉为对硬件支持最好、最全面的Linux发行版之一,在其他发行版上无法使用的或者在默认配置时无法使用的许多硬件,在Ubuntu上都能轻松安装、使用。因此用户可以像安装Windows一样轻松地安装Ubuntu,尽情体验Ubuntu Linux带来的乐趣。

企业级应用追求的是可靠性和稳定性,这就要求构建企业级应用的系统平台具有高可靠性和高稳定性。企业级Linux的发行版本就可以解决这个问题。

RHEL与Centos两个Linux发行版本,并没有太大差别,所不同的是,RHEL属于商业Linux发行版本,如果要使用RHEL版本,则需要购买商业授权和咨询服务,Red Hat公司提供系统的技术支持并提供系统的免费升级。目前Red Hat官网已经不再提供可免费下载的光盘介质,如果需要试用,可通过官网下载有试用时间限制的评估版Linux。而CentOS属于非商业发行版,可以从网上免费下载CentOS各个版本的安装介质,但CentOS并不提供商业支持,当然,使用者也不用负任何商业责任。

那么,到底是选择CentOS还是RHEL呢?这取决于你所在公司是否拥有相应的技术力量,如果是单纯的业务型企业,那么建议选购RHEL发行版并购买相应服务,这样可以节省企业的IT管理费用,并可得到专业的技术支持服务。相反,如果企业技术力量比较强大,并且有多年Linux使用经验,那么CentOS发行版将是最佳选择。

开始Linux的学习之后,请不要用Windows的工作方式来思考问题,因为它们之间确实有很大的不同,比如,它们之间的内存管理机制、进程运行机制等都有很大不同,这些异同点将在下面的章节陆续讲述。因此,抛开Windows的那种思维,用全新的理念尝试去挖掘Linux特有的潜质,对初学者是至关重要的。

Linux是由命令行组成的操作系统,精髓在命令行,无论图形界面发展到什么水平,命令行方式的操作永远是不会变的。Linux命令有许多强大的功能:从简单的磁盘操作、文件存取,到复杂的多媒体图像和流媒体文件的制作,都离不开命令行。虽然Linux也有桌面系统,但是X-Window也只是运行在命令行模式下的一个应用程序。

因此,可以说命令是学习Linux系统的基础,在很大程度上,学习Linux就是学习命令,很多Linux高手其实都是精通命令的人。

也许对于刚刚从Windows系统转向Linux系统的初学者来说,立刻进入枯燥的命令学习实在太难,但是一旦学会就会爱不释手,因为它的功能实在是太强大了。

有很多初学者都会遇到这么一个问题,自己对系统的每个命令都很熟悉,但是在系统出现故障的时候,就无从下手了,甚至不知道在什么时候用什么命令去检查系统,这是很多Linux新手最无奈的事情了。归根到底,就是学习的理论知识没有很好地与系统实际操作相结合。

很多Linux知识,例如每个命令的参数含义,在书本上说得很清楚,看起来也很容易理解,但是一旦组合起来使用,并不那么容易,没有多次的动手练习,其中的技巧是无法完全掌握的。

人类大脑不像计算机的硬盘,除非硬盘坏掉或者硬盘被格式化,否则存储的资料将永远记忆在硬盘中,而且时刻可以调用。而在人类记忆的曲线中,必须要不断地重复练习才会将一件事情记得比较牢。学习Linux也一样,如果无法坚持学习,就会学了后面的,忘了前面的。还有些Linux初学者也学了很多Linux知识,但是由于长期不用,导致学过的东西在很短的时间内又忘记了,久而久之,失去了学习的信心。

可见,要培养自己的实战技能,只有勤于动手,肯于实践,这也是学好Linux的根本。

各个Linux发行版本的技术支持时间都较短,这对于Linux初学者来说往往是不够的。其实,当安装了完整的Linux系统后,其中已经包含了一个强大的帮助,只是可能你还没有发现它,或者还没有掌握使用它的技巧。例如,如果对于tar命令的使用不是很熟悉,那么只要在命令行输入“man tar”,就会得到tar的详细说明和用法。

主流的Linux发行版都自带了非常详细的帮助文档,包括使用说明和FAQ,从系统的安装到系统的维护,再到系统安全,针对不同层次用户的详尽文档。仔细阅读文档后,60%的问题都可在这里得到解决。

遇到问题,首先想到的应该是如何自己去解决这个问题,解决方式有很多。比如,看书、查资料、上网搜索和浏览技术论坛等,通过这几种方式,90%的问题都能得到解决。

独立思考并解决问题,不但锻炼了自己独立解决问题的能力,而且在技术上能得到快速提高。如果通过以上方式实在解决不了,可以向人询问,得到答案后要思考为何这么做,然后做笔记记录解决过程。最忌讳的方式是只要遇到问题,就去问人,虽然这样可能会很快解决问题,但是长久下去,遇到问题就会依赖别人,技术上也不会进步。

如果想深入学习Linux,一定要尝试查看英文文档。因为,技术性的东西写得最好、最全面的文档都是英文版的,最先发布的高新技术也都是用英语写的。即便是非英语国家的人发布技术文档,也都首先翻译成英语在国际学术期刊和网络上发表。安装一个新的软件时先看Readme文档,再看Install文档,然后看FAQ文档,最后才动手安装,这样遇到问题就知道原因了。因此,学习一点专业英语是很有必要的。

Linux运维或管理人才是企业目前急需的技术人才之一。作者根据多年工作经验,总结出了一套学习Linux的线路图,读者可以此线路图为依据,抓住重点,分清主次,相信一定能达到事半功倍的效果。如果读者能认真学习完并掌握本线路图所涉及的技术要点,也就基本满足了企业对Linux运维或管理人才的基本应用需求。

Linux学习线路图如图1.1所示,本线路图分为初级、中级和高级三个阶段。初级阶段主要是对Linux基础知识以及系统基本应用的介绍,要掌握的内容较多。如果初次接触Linux,那么入门还是有一定难度的。Linux注重的是命令操作,因此初级阶段以学习基础命令为主,多看书、多实践是学好命令的根本。中级阶段以服务器常见配置为主,涉及各种应用服务器的配置、网络配置、系统安全配置等几个方面。此阶段的难点在于各种服务器的搭建,对综合知识要求较高。高级阶段的重点是编程语言、集群架构两个方面。此阶段的发展方向是高级运维工程师或系统架构师,要成为系统架构师,熟练掌握一门编程语言是必需的,而Linux下常见的各种集群架构、分布式架构也是高级运维工程师必须要掌握的。

图1.1 Linux学习线路图

虚拟机(Virtual Machine)指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。

虚拟机会生成现有操作系统的全新虚拟镜像,它与真实系统具有完全一样的功能,进入虚拟机后,所有操作都在这个全新的独立虚拟系统里面进行,可以独立安装、运行软件,保存数据,拥有自己的独立桌面,这不会对真实的系统产生任何影响,而且能够在现有系统与虚拟机之间灵活切换。

使用虚拟机技术的好处有以下3个。

如果要在一台计算机上安装Linux和Windows系统,而不用虚拟机,有两个办法。一是安装多个硬盘,每个硬盘安装一个操作系统;这个方法的缺点是费用比较昂贵。二是在一个硬盘上安装双系统,这个方法的缺点是不够安全,因为系统盘的MBR是操作系统的必争之地,Windows更是霸道,每次重新安装系统都要重写系统的MBR,这样,几个操作系统可能会同时崩溃。而使用虚拟机软件既省钱又安全,因此对于新手来说,利用虚拟机学习Linux简直再好不过了。

在虚拟机上安装Linux系统,不用担心会格式化掉自己的硬盘,甚至可以随意地对虚拟系统进行任何设置和更改操作,可以格式化虚拟系统硬盘,还可以重新分区虚拟系统硬盘,等等,因为虚拟机是在真实系统上运行的软件,对虚拟机系统的任何操作都是对软件的操作。

利用虚拟机模拟出来的Linux系统和真实的Linux系统是一摸一样的。现在各个公司专门的Linux服务器是不会让新手随意操作的,而供测试的Linux服务器一般又很紧缺,如果在自己的电脑上安装虚拟Linux系统,就可以随意地学习测试,而不受任何环境影响。

1.运行环境

流行的虚拟机软件有VMware、VirtualBox,它们都有Windows和Linux两个版本,也就是说,它们可以安装在Windows和Linux两个平台下:在Windows平台下可以虚拟出Windows、Linux、UNIX等多个操作系统,同理,在Linux平台上也可以虚拟出Windows、Linux、UNIX等多个计算机。

注意

 运行虚拟机软件的操作系统叫Host OS,在虚拟机里运行的操作系统叫Guest OS。

2.硬件需求

虚拟机软件是将两台以上计算机的任务集成到一台计算机上来的,因此对硬件的要求比较高,主要涉及的是内存、硬盘和CPU。内存要足够大,因为每个虚拟机都会占用一定的内存资源,内存的总大小等于各个虚拟系统的总和。可喜的是,现在内存已经很便宜,因此就不是问题了。同样,硬盘空间也是每个虚拟机都要占用的,CPU现在都发展到了多核阶段,硬盘也不是问题。

1.VirtualBox虚拟机概述

VirtualBox是一款开源虚拟机软件。最初是由德国Innotek公司开发,由Sun Microsystems公司出品的软件,使用Qt编写,在Sun被Oracle收购后正式更名成Oracle VM VirtualBox。

VirtualBox可以说是最强大的免费虚拟机软件,它不仅具有丰富的特色,而且性能非常优异,并且简单易用。它可以虚拟的系统有Windows、Mac OS X、Linux、OpenBSD、Solaris、IBM OS2,甚至Android 4.0等多种操作系统。

VirtualBox不但开源,而且有诸多优点,本书将基于VirtualBox虚拟机介绍如何使用虚拟机软件学习Linux操作系统。VirtualBox的主要特点如下。

2.虚拟机软件的安装

VirtualBox的官方网站是:https://www.virtualbox.org,读者可从此网站下载VirtualBox的稳定版本,目前最新稳定版本为VirtualBox 4.3.26,这里下载Windows版本的VirtualBox,然后在VirtualBox上安装Linux操作系统。Windows下VirtualBox虚拟机软件的安装很简单,只须按照Windows常规方法安装即可完成,这里不再讲述。

3.创建虚拟机系统

虚拟机软件安装完毕后,双击桌面上的Oracle VM VirtualBox图标以启动应用程序,进行虚拟机系统的创建,具体步骤如下。

(1)按CTRL+N快捷键新建虚拟机,弹出“新建虚拟电脑”界面,如图1.2所示,在这里填写新建虚拟机的名称、虚拟机的类型和系统版本,这里新建虚拟机名为“Centos”,操作系统类型为“Linux”,版本选择“Linux 2.6(64bit)”,然后单击“下一步”按钮。

图1.2 虚拟机名称和类型

(2)配置虚拟机内存大小,如图1.3所示,这里配置为“4096MB”,单击“下一步”按钮。

图1.3 配置虚拟机内存大小

(3)添加虚拟硬盘,如图1.4所示,这里选择“现在创建虚拟硬盘”单选按钮,然后单击“创建”按钮。

图1.4 添加虚拟硬盘

(4)设置虚拟硬盘文件类似,如图1.5所示,这里选择“VDI(VirtualBox磁盘映像)”单选按钮,单击“下一步”按钮。

图1.5 设置虚拟硬盘文件类型

(5)设置虚拟硬盘空间分配方式,如图1.6所示,可根据情况选择“动态分配”或“固定大小”,这里选择“动态分配”单选按钮,单击“下一步”按钮。

图1.6 配置虚拟硬盘空间分配方式

(6)设置虚拟磁盘文件位置和大小,如图1.7所示,这里选择文件位置为“D:\vmdisk\ Centos.vdi”,虚拟磁盘大小为“100GB”,单击“创建”按钮即可完成虚拟磁盘的创建。

图1.7 设置虚拟磁盘文件位置和大小

(7)虚拟机创建完成,虚拟磁盘创建完成后,整个虚拟机也就创建完成了,如图1.8所示,这是VirtualBox的整个控制管理界面,单击左侧的虚拟机名称,在右边可以看到此虚拟机的配置属性。

图1.8 虚拟机创建完成

(8)在VirtualBox控制管理界面中,可以对虚拟机进行新建、管理和启动,首先选中左侧的虚拟机名称,然后单击“设置”按钮即可对虚拟机进行设置,关于系统的具体设置如图1.9所示。

图1.9 设置CentOS虚拟机

在设置界面中,可以对虚拟机的常规、系统、显示、存储、声音、网络、串口、USB设备、共享文件夹等多个方面进行设置。

到此为止,虚拟机的安装和基本配置已经介绍完毕,接下来讲述在虚拟机上安装Linux的方法。

4.虚拟机上Linux安装方式

在虚拟机上安装Linux系统,常用的方法有两种:光驱安装和ISO镜像文件安装。

(1)光驱安装方式

在“Oracle VirtualBox管理控制器”界面中,选中需要安装系统的虚拟机,然后单击“设置”按钮,进入虚拟机设置界面,然后选择“存储”选项,如图1.10所示。

图1.10 通过物理光驱安装Linux系统

单击“存储”选项后,右边会出现一个IDE控制器和SATA控制器。SATA控制器下是虚拟机的虚拟磁盘设备,而默认的IDE控制器是空的,显示“没有盘片”。单击“没有盘片”选项,右边会出现关于IDE控制器的属性设置。单击“属性”下面的那个光盘图标,出现所有可用的设备,有物理设备也有虚拟设备,这里的物理设备“F:”就是物理机器的光驱,选择它后,单击“确定”按钮即可使用物理光驱来安装系统。

最后,单击“Oracle VirtualBox管理控制器”界面上的“启动”图标即可启动虚拟机,VirtualBox会自动读取物理机的光盘进入Linux引导安装界面。

(2)ISO镜像文件安装方式

ISO文件是一种光盘镜像文件,刻录软件可以直接把ISO文件刻录成可安装的系统光盘。由于ISO文件直接运行在硬盘上,因此数据传输速度非常快。而光盘安装方式虽然简单,但是由于普通光驱传输速度相对较慢,因而安装过程也比较慢。因此,推荐在虚拟机上通过ISO文件方式来安装系统。

与光驱安装方式类似,选择ISO安装方式时,也是在“Oracle VirtualBox管理控制器”界面上,选中需要安装系统的虚拟机,然后单击“设置”图标,进入虚拟机设置界面(如图1.11所示)。然后选择“存储”选项,单击“选择磁盘”按钮,接着指定物理机上对应的ISO文件,最后单击“确定”按钮完成ISO镜像文件的加载。

图1.11 以ISO方式安装Linux

最后,单击“Oracle VirtualBox管理控制器”界面上的“启动”图标即可启动虚拟机,VirtualBox会自动读取ISO文件,然后引导进入Linux安装界面。

有时候虚拟机可能无法从光驱或者ISO文件进行引导,此时可能需要修改虚拟机的引导顺序。在虚拟机启动后,迅速按下键盘上的F12键,即可进入虚拟机引导顺序配置界面,如图1.12所示。

默认虚拟机的引导顺序是硬盘、软驱、光驱和网络,如果要选择从光驱启动,在图1.12所示界面中直接按c键即可进入光盘启动。其他操作类似。

图1.12**虚拟机引导顺序设置

VirtualBox 虚拟机启动后,会进入一个新的虚拟电脑控制台,在进入新的虚拟电脑控制台时,会出现虚拟机和物理机之间鼠标和键盘的切换问题,如图1.13所示。

图1.13 虚拟机和物理机之间独占状态切换键

默认情况下切换键是右Ctrl键,也就是说,当虚拟机独占键盘和鼠标后,按右Ctrl键即可退出独占模式,再次按右Ctrl键,再次进入独占模式,这个右Ctrl键也称为热键或者主机(Host)键。主机键和其他键组合,可实现对虚拟机的快捷操作,例如,Host+Del组合键表示键盘上的Ctrl+Alt+Del组合键,Host+R表示重启虚拟机,Host+H组合键表示正常关闭虚拟机,等等。

Linux系统的安装将在下面章节详细讲述。

Linux的开源特性决定了Linux知识的开放性和充足性。当今,Linux非常流行,Linux的学习资源也非常多,书店到处可见Linux方面的书籍,选择一本适合自己的慢慢去学习,再好不过。

除了书本中的知识之外,网络里也有无限的Linux学习资源,各大Linux技术门户、Linux社区论坛都是学习Linux的好地方。在这里,有一批无私奉献的Linux狂热爱好者,他们把自己的学习经验和学习总结无偿地发布出来。他们每天在Linux论坛的各个角落热情地回答广大网友提出的问题。他们不求回报,因为他们热爱技术、热爱Linux。

遇到学习问题,或者要查找某些Linux资料,搜索引擎绝对是第一选择,例如Google和百度,99%的技术资料都能在这里找到。要查找Linux资料,就不要错过这两个优秀的搜索引擎。

网络中有很多Linux学习资源,丰富的学习资源虽然给我们的学习提供了很好的便捷性,但是也造成了我们学习的盲目性。学习资源的丰富性,引出的另一个问题是资源的混杂性,刚入门的新手感觉无从下手,可能今天看了一点内存管理的资料,明天学习了一些磁盘管理的知识,并且总是感觉自己理解了,也学会了,但就是无法灵活地掌握,究其原因,就是没有系统地学习Linux。

因此,选择一本好书放在自己身边是必需的。一本好书应该由浅入深、由点及线、由线及面地介绍知识。选择一本好书,同时结合网络资源进行循序渐进的学习,学习就不会再有空洞感,进步也会飞快。大家会感觉到学习Linux是一件很快乐的事情。


在开始学习Linux的各种操作前,先要安装Linux系统。与Windows系统的安装相比,Linux系统的安装有很多需要注意的地方,比如,选择合适的安装方式、确定分命名方案等。本章将以CentOS 7.1版本为例,详细讲解Linux系统的安装过程,并帮助解决安装中可能遇到的问题。

一般每个Linux发行版本都会给出对系统的最低要求及推荐的配置列表,而且不同的安装选项(如图形界面或字符界面)对于系统的要求都不一样。

Linux对硬件的要求很低,大部分可以运行Windows的机器都可以用来安装Linux,并且运行速度会比Windows快得多。这里不讨论安装Linux的最低硬件配置,只对某些特殊应用和特殊安装进行说明。

如果要安装图形界面(也就是Linux中的X-Window),或者运行OpenOffice之类办公软件,则对系统的显卡和内存要求较高,最好是独立显卡,否则图形界面的显示效果会不理想。

Linux上大部分驱动程序都是开源人士根据硬件厂商提供的资料自行编写出来的,有些因为硬件厂商拒绝提供资料而令编写过程困难重重。这些年,因为Linux变得火热,所以有不少硬件厂商都一改常态,主动协助Linux开发者提供硬件资料,但仍有些持保守态度。

Linux安装光盘虽然已经包含大部分硬件驱动程序,但是由于硬件更新很快,因此Linux发行版本无法及时更新相应驱动程序的情况也是在所难免的。

如果硬件配置很新,就需要检查Linux安装版本是否包含硬件的所有驱动,最常见的有网卡驱动、声卡驱动等。读者可以到硬件厂商的官方网站上查询,那里列出了硬件支持的所有操作系统和版本。

Linux系统安装多样,方式灵活,可以根据环境的不同选择不同的安装方式。常见安装方式有硬盘安装、U盘安装、网络安装和光驱安装等几种。

硬盘安装方式一般是在Windows系统的基础上进行的,例如,要安装Windows和Linux共存的双系统或者在系统没有光驱的情况下,都可以用硬盘方式来进行安装。

注意

 因为Windows的文件系统格式和Linux是完全不同的,所以绝对不能在一个分区内既安装Windows又安装Linux。即使这么做了,Linux也识别不了硬盘分区。

现在的服务器一般都不配备光驱了,而且光驱安装速度较慢,批量安装系统时,会浪费很多时间。此时,可通过U盘方式来安装系统,U盘安装是一种快速、廉价、高效的Linux安装方式。首先,U盘价格低廉,并且可多少使用。其次,所有服务器或PC上基本都配备了USB接口,U盘安装具有普遍性。最后,U盘方式安装速度非常快,可节省很多时间。因此,U盘安装Linux是目前的一个发展趋势,本章将详细介绍U盘安装Linux的方法。

在安装单台或数量不多(不超过10台)的服务器时,通过U盘或光驱方式进行安装还可以应付,但是如果要安装几百台甚至上千台服务器,这种方法显然是不现实的。那么面对这样的需求,要如何快速安装呢?这就要用到网络安装方式。

网络安装Linux一般是大批量的自动化安装过程。最常见的批量网络安装工具是Kickstart,它是一个无人值守的Linux系统自动安装工具。使用Kickstart,系统管理人员可以通过创建一个应答文件自动完成Linux系统的安装。它的工作原理是通过典型安装过程中需要人工干预填写的各种参数,进而生成一个ks.cfg应答文件,安装者只需告诉Kickstart安装程序从何处读取ks.cfg文件,然后Kickstart会根据此文件的设定自动完成系统的安装。

由于网络安装需要网络服务支持,对于新手来讲,有一定的难度,这里不过多讲述。下面重点讲述通过光驱方式和U盘方式安装Linux。

以光驱方式安装Linux系统是最常见的软件安装方式,简单易懂,因此这里选择以光驱安装Linux的方式为本章讲述的重点,前提是计算机一定要有光驱,并且有Linux系统安装光盘。

读者可以从网上下载CentOS Linux版本ISO格式的安装介质,然后将ISO文件刻录成光盘。例如,可以从163开源站http://mirrors.163.com/centos下载CentOS 7.1版本,这里下载的最新版本是CentOS-7-x86_64-DVD-1503-01.iso。下载完成后,通过UltraISO、InfraRecorder、Nero Burning ROM等刻录软件将ISO文件刻录到DVD光盘,然后进入BIOS,设置计算机的第一启动顺序为DVD-ROM,保存设置后将DVD放入光驱,重新启动计算机,光盘将自动进行引导,启动Linux安装程序。

1.分区命名方案

在开始安装之前,我们需要知道Linux关于分区命名的一些常识。

Linux下是通过字母和数字的组合来标识硬盘分区的,这点不同于Windows系统下使用类似“C盘”或者“C:”来标识硬盘分区。Linux的这种命名方案比起Windows更加灵活,表达的含义也更加清晰,完全可以通过分区标识来详细了解硬盘分区情况。同时,Linux的这种硬盘命名方案是基于文件的,一般有如下文件命名方式:

/dev/hda2
/dev/sdb3

下面详细介绍这些分区命名方案中每个字符表示的具体含义。

2.双系统Windows+Linux硬盘分区方案

从Windows转向Linux的很多新手都喜欢在自己的电脑上安装双系统,这种方法对Linux新手来说是比较危险的,有可能造成硬盘数据的丢失。因此,有必要讲述如何安全有效地安装Linux+Windows共存的双系统。

首先应该明白,Linux和Windows是两个完全不同的系统,因此Linux的文件系统和Windows的文件系统也是互不兼容的。如果要安装Linux,就必须从硬盘里“奉献”出一个分区给Linux,而这个奉献不是清空某个盘符下的数据就行的,而是要把这个磁盘完全从Windows下删除。例如,我要拿出D盘空间给Linux系统,就需要在Windows下的磁盘管理中彻底删除D盘。空间大小根据安装软件包的大小而定,一般10GB的空间就能满足要求。

整理出Linux所需的空间以后,接下来的工作就是重启系统,设置BIOS从光驱启动,放入Linux光盘到光驱中,之后就进入到了系统安装界面。

注意

 双系统的安装最好首先安装Windows系统,然后安装Linux,因为每次安装Windows都会重新修改系统引导文件。如果按照相反的顺序安装了双系统,可能Linux就没有引导了,并且还可能要修复系统引导文件。

经过上面的讲述,我们已经有了安装Linux系统前充足的准备知识。下面开始安装Linux系统,具体的操作步骤如下。

1.系统引导

(1)在主板的BIOS中,设置成从DVD-ROM启动,把光盘放入光驱,出现如图2.1所示界面。

图2.1 安装CentOS Linux启动界面

安装程序从光盘成功引导后,会显示有几个选项的引导菜单。如果在60秒内没有按任何键,则运行默认引导选项。要选择默认选项,可以等待计数器超时或者按键盘上的Enter键。要选择默认选项外的其他选项,可使用键盘上的方向键并在选中正确选项后按Enter键。

从上面的启动界面可以看到,CentOS 7安装程序有三个启动选项可供选择,分别是Install CentOS 7(安装CentOS 7)、Test this media & install CentOS 7(测试安装介质并安装CentOS 7)和Troubleshooting(故障修复)。

选择Install CentOS 7即可自动进入图形界面的安装过程;如果要测试安装介质是否存在问题,可选择Test this media & install CentOS 7,此选项为默认选项,它会首先检测安装介质的完整性,然后启动安装程序,自动进入图形界面安装过程。Troubleshooting选项主要用于帮助解决各种安装问题以及对系统的故障修复。

(2)选择Troubleshooting,然后按Enter键,得到图2.2所示界面。

图2.2 CentOS 7 救援模式

在Troubleshooting界面下,有4个选项,分别表示基本图形模式下安装CentOS、救援CentOS模式、内存测试、从本地驱动器启动。这4个选项中,用得比较多的是援救CentOS模式,它可用于系统内核问题、配置文件错误、磁盘错误等造成的系统无法启动时的故障修复。

Linux常用的安装方式有两种,即字符和图形。从CentOS 6.x版本以后,字符安装方式已经基本不推荐使用了,默认都是图形安装方式。不过,系统安装程序仍然保留了字符安装的界面。如果需要通过字符模式安装系统,可在图2.1所示界面下,按Esc键,然后在“boot:”后输入“Linux text”,则进入字符安装界面。

注意

 以图形方式和字符方式安装Linux的过程是一模一样的。如果安装的电脑本身没有显卡或者显卡不支持图形安装,就可以选择字符安装。一般都选择图形安装方式。

(3)在图2.1所示界面中,选择Install CentOS 7,直接按Enter键,选择图形安装方式,然后进入图2.3所示的界面。

图2.3 安装过程语言选择

此步骤用于选择系统安装过程中的语言,这里选择English选项,当然,可以选择“Chinese Simplified”,不过建议选择英文安装。选择英文的好处等到系统安装完毕大家就能体会到了。选择完语言后,单击Continue按钮进入下一个安装界面。

(4)此步骤是一个系统安装总览,如图2.4所示。从图中可以看出,安装过程可分为三大部分,依次为LOCALIZATION(本地化安装)、SOFTWARE(软件安装)和SYSTEM(系统安装)。本地化安装主要包含时间和时区设置、键盘设置和语言支持设置;软件安装包含安装源和软件安装两个部分;系统安装包含磁盘分区、内核崩溃转存、网络设置三个部分。

图2.4 CentOS 7.1系统安装总览

单击每个部分即可进入设置界面,下面依次介绍。

2.本地化设置

(1)单击图2.4所示界面中DATA & TIME部分,即可进行系统时区、时间选择,如果在中国,Region就选择Asia,City选择Shanghai选项,如图2.5所示。选择完成,单击左上方的Done按钮返回图2.4所示界面。

图2.5 选择时区

(2)在图2.4所示界面中,对于KEYBOARD选项,保持默认的English(US)即可。接着单击LANGUAGE SUPPORT选项,选择需要安装的语言包,可以根据自己的需求选择安装的语言包,这里选择英文、简体中文两种附加语言包,如图2.6所示。选择完成,单击左上方的Done按钮返回图2.4所示界面。

图2.6 选择系统附加语言包

3.软件安装设置

(1)下面进入安装源配置部分。由于Linux有多种安装方式,因此这里也可以选择多种安装源。在图2.4所示界面中,单击INSTALLATION SOURCE选项,即可进入系统安装源配置界面,如图2.7所示。因为这里介绍的是通过光驱方式安装系统,所以保持默认选项即可,选择完成,单击左上方的Done按钮返回图2.4所示界面。

图2.7 选择系统安装源

(2)下面进入系统安装软件配置部分,在图2.4的界面中,单击SOFTWARE SELECTION选项,即可进入软件包安装选择界面,如图2.8所示。

图2.8 软件包选择安装界面

CentOS 7.x版本的软件包选择界面与CentOS 5.x/6.x版本有很大不同,在CentOS 7.x版本中,根据Linux的多种用途对软件包进行了分类,主要分为10个应用场景,读者可根据自己的需要选择对应的分类。

关于软件包的选择,有一定的规则,一般经验如下。

本次安装中我们是将Linux作为服务器来使用的,因此这里选择Server with GUI。在选中左边的安装环境后,右边会出现已选环境的插件,这些插件可选可不选,这里选择三类插件,如图2.8所示。

对于Linux服务器来说,安全是第一位的,需要什么软件包就安装什么,不需要的一定不要安装,多余的软件包不但占用磁盘空间,而且会给服务器带来潜在的安全隐患。因此,当Linux作为一个服务器来使用时,要遵循按需安装、不用不装的原则。比如,要搭建一个DNS服务器,仅仅需要安装DNS软件包和一个基础系统内核即可。这样可以最大限度地提高系统效率和保障系统安全。

选择完成,单击左上方的Done按钮返回图2.4所示界面。

4.系统安装设置

(1)现在进入磁盘分区阶段。在图2.4所示界面中,单击INSTALLATION DESTINATION即可进入磁盘分区阶段,如图2.9所示,可以看到,有一个硬盘sda,该硬盘大小为100GB。

图2.9 磁盘分区主界面

在进行分区之前,进行Linux分区的一些必要说明。

Linux系统下必需的分区为根分区(根分区用“/”标识)和交换(标识为swap)分区。

swap分区相当于Windows中虚拟内存的概念,也就是内存数据与硬盘的交换。

关于swap分区的大小,很多资料指出至少要是物理内存的2倍,其实不然。基本的一个原则是:如果内存较小(根据经验,物理内存小于4GB),一般设置swap分区大小为内存的2倍;如果物理内存大于4GB而小于16GB,可以设置swap分区大小等于物理内存即可;如果内存大小在16GB以上,就可以设置swap分区为0。swap分区可以设置为0,但是并不建议这么做,因为设置一定大小的swap分区还是有一定作用的。

虽然Linux默认只需要划分根分区和交换分区即可完成系统安装,但是不建议这么做,因为如果只划分了根分区,那么当根分区遭到破坏以后,系统可能无法启动,存储在根分区中的资料也可能丢失,这样很不安全。因此,建议给独立的应用分配独立的分区,这样即使某个分区被破坏,也不影响其他分区的数据,能最大限度地减少系统崩溃造成的损失。

以下分区建议在安装系统时独立分配。

关于每个分区的含义,更详细的信息请参见下一章。

根分区包含Linux系统所有的目录。如果在安装系统时只分配了根分区,那么上面的/boot、/usr和/var将都包含在根分区中,也就是说,这些分区将占用根分区的空间。如果将/boot、/usr等单独划分,那么这些分区将不再占用根分区的空间。

了解一些基本的分区知识后,下面开始进行磁盘分区。

(2)在图2.9所示界面中,首先选中100GB的那个sda盘,然后在左下角会有两个分区选项。第一个是Automatically configure partitioning,表示自动分区;第二个是I will configure partitioning,表示手动分区。如果对分区不熟悉,可以直接默认选择自动分区。但是出于学习的考虑,建议选择手动分区,哪怕你是新手,因为选择手动分区更有助于对系统分区的认识和了解。这里选择手动分区,选择完后,单击左上角的Done按钮进入图2.10所示界面。

(3)选择手动分区后,还需要选择分区的方案,如图2.10所示,可以从左侧窗格中的下拉菜单中选择分区方案,可用的分区方案有Standard Partition(标准分区)、Btrfs、LVM和LVM Thin Provisioning(精简配置)。

图2.10 设置分区方案

其中,标准分区可以用于各种文件系统或交换空间(swap),这是常用的一种分区方案;Btrfs是Linux下一代文件系统,由Oracle、Red Hat、Intel、Suse等多个公司和社区研发,具有非常高的性能和稳定性,目前正在逐步稳定下来;LVM是一个逻辑卷管理分区方案,在创建一个LVM分区时,会自动生成一个LVM逻辑卷,通过LVM可以很灵活地使用物理磁盘,并提高磁盘性能;使用LVM精简配置,可以动态创建和分配存储池,进而自由地管理磁盘空间,LVM精简配置是LVM的升级版本。其实还有一个RAID分区方案,当有两个或两个以上磁盘的时候,就会出现RAID分区方案,这是一种软件RAID,可以为服务器提供高端的存储功能和冗余的数据安全。

这里选择Standard Partition分区方案,添加一个分区有两个步骤,首先需要创建一个挂载点,单击左下角的“+”按钮来创建一个挂载点,如图2.11所示。

(4)先创建一个根分区,根分区空间尽量设置得大一些,因为如果根分区空间满,系统可能会停止响应,系统运行的应用程序也会出现异常。由于已经将/boot和/usr等分区独立出来了,因此根分区拥有20GB空间已经够用了。

其实分区大小的设置是与硬盘大小相关联的,如果硬盘足够大,完全可以设置更大的根分区空间。保证系统够用而不浪费空间是划分磁盘分区的准则。

在图2.11中,Mount point(挂载点)可以单击下拉列表选取,也可以自定义填写,Desired Capacity(分区大小)如20GB可直接填写“20G”即可,500MB可填写“500M”,以此类推。设置完成后,单击Add mount point按钮完成挂载点的添加。

图2.11 创建系统根分区

(5)挂载点创建成功后会进入如图2.12所示界面,在左侧窗格中单击挂载点,可以在右侧窗格中做各种修改操作,例如,编辑挂载点,修改分区大小,选择设备类型,选择文件系统类型、标签的选项进行自定义,以及是否加密或重新格式化相应分区等。

对于File System(文件系统)的选择,默认是xfs,但可以有swap、vfat、BIOS boot、ext2、ext3、ext4、xfs七种类型可选,其中,ext2、ext3、ext4是Linux系统上主流的文件系统,RHEL/CentOS 7.x之前版本中,默认都采用ext系列的文件系统;VFAT文件系统对应于Windows上面的FAT文件系统;swap是Linux上面的交换分区;BIOS boot主要用于系统引导设备,是一个非常小的分区;xfs文件系统是在RHEL/CentOS 7.x版本上才出现的一个高性能文件系统。

Label选项是磁盘分区对应的一个标签,通过标签可快速识别分区。Label选项可填写也可不填写,默认为空。

挂载点一旦建立起来,对应的磁盘标识也就固定下来了,例如,根分区对应的磁盘标识为/dev/sda1,这个“sda1”无法进行修改,除非删除分区重新建立。

所有设置修改完成后,单击图2.12所示界面中的Update Settings按钮,完成磁盘分区的编辑。

图2.12 编辑磁盘分区

(6)单击图2.10所示界面中左下角的“+”按钮,继续创建/boot挂载点,如图2.13所示,在Mount Point下拉列表中选择“/boot”,Desired Capacity输入框中输入的大小为“500M”。

图2.13 创建/boot分区

/boot分区无须太大,因为它只用来存储一些系统引导信息和内核信息。单击Add mount point按钮,/boot挂载点就创建好了。

(7)接着创建一个swap类型的挂载点。在Mount Point下拉列表中选择swap,然后在Desired Capacity输入框中输入大小,这里指定4096M,如图2.14所示。

注意,这里是“swap”,而不是“/swap”。

图2.14 创建swap分区

(8)然后再分别创建/usr和/var分区,创建方法与创建/boot分区基本一致,只是分区大小不同。

如果安装的应用软件较多,可适当加大/usr分区。/var分区建议设置得大些,因为系统运行很长时间后,会相应产生较多日志。

(9)在创建完系统必需的分区后,如果有足够的空间,还可以创建一个属于自己的分区,用于存放自己的数据,这里创建一个/mydata分区。注意,每个分区前都有“/”,因为每个分区都是在根分区下创建的。

为了保证磁盘所有空间都能被Linux利用,划分磁盘所有剩余空间给/mydata分区。具体操作是,在Mount Point中输入框中输入“/mydata”,然后将Desired Capacity输入框留空,这样就把磁盘剩余空间全部划分给了/mydata分区,如图2.15所示。

图2.15 创建自定义/mydata分区

(10)至此,分区工作已经基本完成,完成后的分区如图2.16所示。

要删除一个分区,可以单击图2.10所示界面中左下角的“−”按钮,即可删除一个分区。所有设置完成后,单击左上角的Done按钮,进入图2.17所示界面。

图2.16 创建分区完成后的界面

(11)在图2.17所示界面中,显示了所有与磁盘分区相关的操作,这包括创建、调整大小或删除分区和文件系统。可以查看所有的更改,如果需要重新修改分区,单击Cancel &Return to Custom Partitioning按钮返回分区界面。要确认分区更改操作,单击Accept Changes按钮,返回图2.4所示界面。

图2.17 分区改变确认

到此,关于分区部分的所有基本操作,都已经介绍完毕。下面进入网络配置部分。

5.配置网络

(1)在图2.4所示界面中,KDUMP选项默认处于启用状态,保持启用即可,无须做其他设置。接着单击NETWORK & HOST NAME选项,即可进入网络设置界面,如图2.18所示。

图2.18 激活网络连接

在图2.18的左侧窗格中,显示了安装程序识别的网络接口信息,单击左侧列表中的网络接口,在右侧将显示详细信息。本例中,只有一块网卡,Ethernet表示以太网,eno16777736表示网卡设备标识,右侧窗格中显示了此网卡的连接状态,例如MAC地址、连接速率等。

在图2.18中还可以设置主机名信息,在左下角的Host name输入框中输入对应的主机名即可。

默认情况下,网卡处于断开连接状态,可单击右上角的ON/OFF(开关)按钮,将网卡激活。激活后的网卡无法自动获取到IP地址,因此需要手动设置IP地址信息。

单击右下角的Configure按钮,进入网卡信息配置界面,如图2.19所示。

(2)在图2.19所示配置界面中,可根据连接网络的类型配置有线、无线、VPN或DSL的连接,在这里选择Automatically connect to this network when it is available和All users may connect to this network复选框,这样就可实现系统启动后自动连接。

(3)在网络配置部分,看似有很多选项需要设置,其实需要配置的并不多。在图2.19所示界面中,选择IPv4 Settings选项卡,进入IP地址配置界面,如图2.20所示,首先选择Method(网络连接模式),常用的有Automatic DHCP、Manual、Link-Local Only等,这里选择Manual。

图2.19 设置网络自动连接

接着单击Add按钮添加一个IPv4的IP地址,这里添加的IP地址为“192.168.56.101”,子网掩码为“255.255.255.0”,网关为“192.168.56.1”,然后再添加一个DNS servers地址“223.5.5.5”,如果网络需要设置多条路由,还可以单击右下角的Routes按钮添加路由。

所有设置完成后,单击Save按钮,保存设置,返回图2.18所示界面。

图2.20 IP地址配置界面

(4)在设置完成后,网卡会自动尝试网络连通性,配置完成的网络如图2.21所示。单击Done按钮,完成网络设置,返回图2.22所示界面。

图2.21 网络连接正常界面

(5)到这里为止,Linux安装需要设置的部分基本介绍完毕了,图2.22是设置完成的系统安装摘要界面,确保各项设置正确,单击右下角的Begin Installation按钮开始安装Linux系统。

图2.22 设置完成的系统安装摘要界面

6.安装Linux

(1)单击Begin Installation按钮后,就出现了Linux安装进度界面,如图2.23所示。此时将把系统安装到磁盘中,在安装过程中,还需要设置Linux管理员账户ROOT的密码,单击ROOT PASSWORD选项进入设置ROOT密码界面,如图2.24所示。

图2.23 Linux安装进度界面

(2)安装程序会对输入的密码进行验证,如果设置了过于简单的密码将提示重新设置,ROOT用户是Linux系统中的超级管理员,因此密码的设置必须严谨,最好设置为包含数字、字母、特殊字符组合的密码。

重复输入两次密码后,单击Done按钮返回图2.23所示安装界面。

图2.24 设置ROOT账号密码

(3)在图2.23所示界面中,单击USER CREATION选项创建一个普通用户,如图2.25所示。Linux是一个多用户操作系统,在使用的时候,最好不要直接用ROOT账号登录系统,而是通过普通用户进行登录,这有助于系统的安全,因此,需要创建一个普通用户用来登录系统。

图2.25 给系统创建一个普通用户

输入用户的Full name、User name以及Password即可创建一个普通用户。输入完成,单击Done按钮返回图2.23所示的安装界面。

(4)安装过程需要的时间根据选择软件包的多少而定,一般10~60分钟即可完成安装。如图2.26所示,在系统安装完成后,USER SETTINGS下面的设置将不可用,因此要在系统安装完成之前对ROOT PASSWORD、USER CREATION进行设置。

安装完成后,单击Reboot按钮重启系统。

图2.26 Linux安装完成界面

7.完成安装

(1)在安装完成后,系统会自动弹出光盘,如果没有弹出光盘,需要取出安装介质,在服务器重新启动后,会自动进入启动引导界面,如图2.27所示。这里有两个引导选项,第一个是正常的引导程序,第二个是进入救援模式的引导程序,默认选择第一个,然后按Enter键进入启动过程。

图2.27 CentOS启动引导界面

(2)默认情况下,启动过程背后隐藏着一个显示进度条的图形界面。如果没有安装图形界面,那么默认将进入字符界面。如果安装了图形界面,那么会自动启动图形界面,如图2.28所示,单击ixdba用户,然后输入密码登录系统,如果需要用其他用户登录,可选择下面的Not listed按钮,输入需要登录的用户名和密码,即可切换用户登录系统。

图2.28 CentOS 7.1用户登录界面

(3)通过图形界面登录系统之后,会弹出语言选择界面,如图2.29所示,根据需要选择需要的语言即可,默认是英文。然后单击Next按钮进入下一个界面。

图2.29 用户图形界面中的语言选择

(4)下面进入键盘选择,如图2.30所示,选择默认的English(US)即可,单击Next按钮进入下一个界面。

图2.30 用户图形界面中的键盘类型选择

(5)至此,安装后的用户初始化过程全部结束,单击图2.31所示界面中的Start using CentOS Linux按钮开始进入Linux学习之旅。

图2.31 开始Linux学习之旅

现在的PC和服务器大多数都不配置光驱了,取而代之的是USB接口设备。同时,USB 3.0规范已经大范围普及,U盘数据传输速度已经可以达到千兆每秒,因而,基于USB接口的应用越来越多,常见的有USB键盘、USB鼠标、USB光驱等。在安装系统的时候,虽然可以采用USB光驱来安装,但是目前USB光驱成本较高,而通过U盘安装系统不但成本低廉,而且快速、便捷,在大批量、大规模的系统安装中,通过U盘安装系统已经成为主流。

通过U盘安装Linux系统,基本步骤如下。

(1)首先需要一个8GB左右的U盘,容量越大越好,CentOS 7.1版本的完整ISO镜像文件大小已经达到7GB左右。

(2)从163开源站(http://mirrors.163.com)下载CentOS 7.1的ISO镜像文件,这里下载的是4GB大小的ISO文件CentOS-7-x86_64-DVD-1503-01.iso。

(3)从网上下载一个U盘刻录工具,常见的U盘刻录工具有UltraISO、USBWriter等,这里推荐使用USBWriter,因为USBWriter使用简单,一个步骤即可刻录完成,UltraISO虽然也能将ISO镜像刻录到U盘,但是刻录好的U盘在安装引导过程中会存在问题。

(4)USBWriter是一个开源小工具,可从http://sourceforge.net/projects/usbwriter/下载,是专门用于Linux系统的U盘刻录工具。它的工作原理是将U盘分为两个分区,一个FAT32分区(大小只有几兆字节)用于安装引导程序,另一个Linux分区用来存储系统安装包。这就出现了一个问题:经过USBWriter刻录过的U盘,容量会自动变小,这是因为只看到一个FAT32分区的缘故,而另一个Linux分区在Windows下是看不到的。不过不用担心,恢复U盘到原始大小也很简单,从网上下载一个DiskGenius即可恢复U盘到原始大小。

(5)使用USBWriter将下载好的ISO镜像文件刻录到U盘中,刻录方法如图2.32所示。首先选择ISO镜像文件的位置,然后指定需要刻录到的U盘,这里选择的是一个16GB大小的U盘,选择之后,单击Write按钮即可开始刻录的过程。

图2.32 使用USBWriter将Linux ISO文件刻录到U盘

把ISO文件刻录到U盘后,U盘上之前的所有数据都会丢失,所以在刻录前,要备份U盘上的数据。

(6)U盘的刻录过程还是比较快的,一般10~30分钟,如果刻录过程中没有报错,基本上都能刻录成功,U盘刻录完成后,会提示刻录成功,如图2.33所示。

图2.33 U盘刻录成功

(7)U盘刻录成功后,需要重新插拔U盘,此时在Windows的磁盘管理器中,可以看到16GB的U盘已经变成6MB左右大小了,如图2.34所示。

图2.34 经过USBWriter刻录后的U盘

(8)U盘刻录成功后,将U盘插入服务器的USB接口中,然后进入BIOS,设置从USB设备启动,接着重启系统,即可进入图2.1所示界面。

(9)下面的安装过程与2.3节的光驱安装方式完全一样,不再重复介绍。但是有一点需要注意的是,在磁盘分区阶段,会看到两块磁盘,如图2.35所示。

图2.35 通过U盘安装Linux时出现的多磁盘界面

从此图中可以看到,100GB的硬盘是系统磁盘,而14.45GB的磁盘是安装系统的U盘。这里切记不要选择安装系统的U盘,不然安装过程会出现问题。


本章重点讲述Linux命令的使用,命令是学习Linux必须熟练掌握的一个部分。Linux下的命令大概有600个,而常用的命令其实只有80个左右,这些常用的命令是需要灵活掌握的。虽然Linux的各个发行版大同小异,但是常用命令基本相同,因此只要掌握了常用的Linux命令,就能融会贯通、触类旁通各个Linux版本了。本章通过分类的方式详细介绍常用命令的使用语法与技巧。

shell的本意是“壳”的意思,其实已经很形象地说明了shell在Linux系统中的作用。shell就是围绕在Linux内核之外的一个“壳”程序,用户在操作系统上完成的所有任务都是通过shell与Linux系统内核的交互来实现的。我们应该熟悉DOS系统中的command.com程序,shell的功能与此类似,但是shell的功能更加强大,更加好用。

各种操作系统都有自己的shell。以DOS为例,它的shell就是command.com程序。DOS下还出现了很多第三方命令解释程序,例如4DOS、NDOS等,这些命令解释程序完全可以取代标准的command.com程序。同样,除了默认的Bourne again shell(bash)之外,Linux下还有很多其他的shell,例如C shell(csh)、Korn shell(ksh)、Bourne shell(sh)和Tenex C shell(tcsh)等。每个版本的shell功能基本相同,但各有千秋,现在的Linux系统发行版一般都以bash作为默认的shell。

shell本身是一个以C语言编写的程序,是用户和操作系统内核之间通信的桥梁。shell既是一种命令解释程序,又是一种功能强大的解释型程序设计语言。作为命令解释程序,shell解释用户输入的命令,然后提交到内核处理,最后把结果返回给用户。

为了加快命令的运行,同时更有效地定制shell程序,shell中定义了一些内置命令,一般把shell自身解释执行的命令称为内置命令。例如,下面将要讲到的cd、pwd、exit和echo等命令,都是属于bash的内置命令。当用户登录系统后,shell以及内置命令就被系统载入到内存,并且一直运行,直到用户退出系统为止。除了内置命令之外,Linux系统上还有很多可执行文件。可执行文件类似于Windows下的.exe文件,这些可执行文件也可以作为shell命令来执行。其实Linux上很多命令都不是shell的内置命令。例如,ls就是一个可执行文件,存放在/bin/ls中。这些命令与shell内置命令不同,只有当它们被调用时,才由系统装入内存执行。

当用户登录系统后,如果登录字符界面,将出现shell命令提示符。“#”表示登录的用户是系统超级用户,“*”表示登录到系统的是普通用户。shell执行命令解释的具体过程为:用户在命令行输入命令并提交后,shell程序首先检测它是否为内置命令,如果是,就通过shell内部的解释器将命令解释为系统调用,然后提交给内核执行;如果不是shell内置的命令,那么shell会按照用户给出的路径或者根据系统环境变量的配置信息在硬盘寻找对应的命令,然后将其调入内存,最后再将其解释为系统调用,提交给内核执行。

最后,shell还是强大的解释型程序设计语言,它定义了各种选项和变量,几乎支持高级程序语言的所有程序结构,如变量、函数、表达式和循环等。利用shell可以编写shell脚本程序,类似于Windows/DOS下的批处理文件,但是shell功能更加完善,更加强大。

Linux下的各种shell的主要区别在于命令行的语法。对于一些普通的命令,各个shell版本的语法基本相同,只有在编写一个shell脚本或者使用一些shell高级特性的时候,各个版本shell的差异才会显示出来。

shell语法分析是指shell对命令的扫描处理过程,也就是,把命令或者用户输入的内容分解成要处理的各个部分的操作。在Linux系统下,shell语法分析包含很多内容,如重定向、文件名扩展和管道等。

本节以bash为例,介绍shell命令的语法分析。

1.shell的命令格式

用户登录系统后,shell命令行启动。shell遵循一定的语法格式将用户输入的命令进行分析解释并传递给系统内核。shell命令的一般格式为:

command [options] [arguments]

其中,

根据习惯,我们一般把具有以上格式的字符串称为命令行。命令行是用户与shell之间对话的基本单位。

在命令行中,选项是包含一个或多个字母的代码,主要用于改变命令的执行方式。一般在选项前面有一个“-”符号,用于区别参数。例如:

[root@WEBServer ~]#ls -a

ls命令加上-a选项后,列出当前目录下的所有文件(包含隐藏文件)。如果ls不加“-a”选项,则仅仅显示当前目录下的文件名和目录(不显示隐藏文件)。

一般命令都有很多选项,可以单独列出它们,也可以在“-”后面把需要的选项都列出来,例如:

ls–a –l

也可以写成:

ls–al

很多命令都可以接受参数。参数就是在选项后面紧跟的一个或多个字符串,这些字符串指定命令的操作对象,如文件或者目录。例如,要显示/etc目录下的所有文件及信息,可用以下命令。

[root@WEBServer ~]#ls –al /etc

特殊情况下,有些命令可以不带参数,例如ls命令,而有些必须带参数。当参数不够时,shell就会给出错误提示。例如,mv命令至少需要两个参数。

[root@WEBServer ~]#mv mylinux1.txt mylinux.txt

在shell的一个命令行中,还可以输入多个命令,用分号将各个命令分开,例如:

[root@WEBServer ~]#ls –al;cp mylinux1.txt mylinux2.txt

相反,也可以在多行中输入一个命令,用“\”将一个命令持续到下一行。

[root@WEBServer ~]#cp –i \
>mylinux1.txt \
>mylinux2.txt

2.shell的通配符

通配符主要是为了方便用户对文件或者目录的描述,例如,当用户仅仅需要以“.sh”结尾的文件时,使用通配符就能很方便地实现。各个版本的shell都有通配符,这些通配符是一些特殊字符,用户可以在命令行的参数中使用这些字符,进行文件名或者路径名的匹配。shell将把与命令行中指定的匹配规则符合的所有文件名或者路径名作为命令的参数,然后执行这个命令。

bash中常用的通配符有“*”、“?”、“[]”。

(1)“*”——匹配任意一个或多个字符

例如:

[root@WEBServer ~]#ls *.txt

这条命令列出当前目录中所有以“.txt”结尾的文件(除去以“.”开头的文件)。

[root@WEBServer ~]#cp doc/* /opt

这条命令表示将doc目录下的所有文件(除去以“.”开头的文件)复制到/opt目录下。

[root@WEBServer ~]#ls –al /etc/*/*.conf

这条命令列出/etc目录的子目录下所有以“.conf”结尾的文件。在/etc目录下以“.conf”结尾的文件将不会列出。

(2)“?”——匹配任意单一字符

例如:

[root@WEBServer ~]#ls ab?.txt

这条命令列出当前目录下以ab开头,随后一个字母是任意字符,接着以“.txt”结尾的文件。

[root@WEBServer ~]#ls ab??.txt

这条命令列出当前目录下以ab开头,随后的两个字母是任意字符,接着以“.txt”结尾的文件。

(3)“[]”——匹配任何包含在方括号内的单字符

例如:

[root@WEBServer ~]#ls /dev/sda[12345]
/dev/sda1 /dev/sda2 /dev/sda3 /dev/sda4 /dev/sda5

上面的命令列出了在/dev目录下以sda开头,第4个字符是1、2、3、4或5的所有文件。

[root@WEBServer ~]#ls /dev/sda[1-5]

在方括号中“1-5”给出了匹配的范围,与上面一条命令完全等效。

(4)通配符的组合使用

在Linux下,通配符也可以组合使用,例如:

[root@WEBServer ~]#ls [0-9]?.conf

这条命令列出当前目录下以数字开头,随后一个是任意字符,接着以“.conf”结尾的所有文件。

[root@WEBServer ~]#ls [xyz]*.txt

这条命令列出当前目录下以x、y或z开头,最后以“.txt”结尾的文件。

3.shell的重定向

Linux下系统打开3个文件,即标准输入、标准输出和标准错误输出。用户的shell将键盘设为默认的标准输入,默认的标准输出和标准错误输出为屏幕。也就是,用户从键盘输入命令,然后将结果和错误消息输出到屏幕。

所谓的重定向,就是不使用系统默认的标准输入/输出,而是重新指定,因此重定向分为输入重定向、输出重定向和错误输出重定向。要实现重定向就需要了解重定向操作符,shell就是根据重定向操作符来决定重定向操作的。

(1)输入重定向

输入重定向用于改变命令的输入源,利用输入重定向,就可以将一个文件的内容作为命令的输入,而不从键盘输入。

用于输入重定向的操作符有“<”和“<<”。例如:

[root@WEBServer ~]#wc</etc/shadow
40  40 1169

这里用wc命令统计输入给它的文件/etc/inittab的行数、单词数和字符数。

还有一种输入重定向操作符“<<”。这种重定向告诉shell,当前命令的标准输入为来自命令行中一对分隔号之间的内容。例如:

[root@WEBServer ~]#wc<< aa
> # Default runlevel. The runlevels used by RHS are:
> #  0 - halt (Do NOT set initdefault to this)
> #  1 - Single user mode
> #  2 - Multiuser, without NFS (The same as 3, if you do not have networking)
> #  3 - Full multiuser mode
> #  4 - unused
> #  5 - X11
> #  6 - reboot (Do NOT set initdefault to this)
>aa
8 65 303

上面的命令将一对分隔号aa之间的内容作为wc命令的输入。分隔号可以是任意字符。shell将在第一个分隔号后开始读取内容,直到出现另一个分隔号读取结束,然后将内容送给wc命令处理。

(2)输出重定向

输出重定向不是将命令的输出结果在屏幕输出,而是输出到一个指定文件中。

在Linux下输出重定向用得很多。例如,某个命令的输出很长,一个屏幕无法显示完毕,这时可以将命令的输出指定到一个文件,然后用more命令查看这个文件,从而得到命令输出的完整信息。

用于输出重定向的操作符有“>”和“>>”。例如:

[root@WEBServer ~]#ps –ef >ps.txt

这条命令将ps –ef输出的系统运行进程信息全部输入到了ps.txt文件,而不输出到屏幕,可以用more命令查看ps.txt文件中系统运行的进程信息。

[root@WEBServer ~]#more file1 file2 file3 >file

其中,more命令用于查看文件的内容,上面的命令是将file1、file2和file3的内容全部输出到file文件中,类似于文件内容的合并。

如果在“>”后面指定的文件不存在,shell就会自动重建一个;如果文件存在,那么这个文件原有的内容将被覆盖;如果不想覆盖存在的文件,可以使用“>>”操作符。例如:

[root@WEBServer ~]#ls –al /etc/* >>/root/install.log

这条命令将/etc目录及其子目录下的所有文件信息追加到/root/install.log文件的后面。/root/install.log文件原来的内容仍然存在。

(3)错误重定向

错误重定向和标准输出重定向一样,可以使用操作符“2>”和“2>>”实现对错误输出的重定向。例如:

[root@WEBServer ~]#tar zxvf text.tar.gz 2> error.txt

其中,tar是打包命令,可以在屏幕上看到tar的解压过程。如果“text.tar.gz”是个损坏的压缩包,就会把错误消息输出到error.txt文件。

4.shell的管道

管道可以把很多命令连接起来,可以把第1个命令的输入当作第2个命令的输出,第2个命令的输出当作第3个命令的输入,依此类推。因此,管道的作用就是把一个命令的输出当作下一个命令的输入,而不经过任何中间文件。

通过管道符“|”可以建立管道连接,例如:

[root@WEBServer ~]#ls -al /etc/* |more

这条命令表示将/etc目录以及子目录下的所有文件分屏显示。

[root@WEBServer ~]#ps -ef|grep httpd|wc –l

这个命令用于查看系统中正在运行的httpd进程,并统计httpd的进程数。

5.shell中的引用

在bash中有很多特殊字符,这些字符本身就具有特殊含义。如果在shell的参数中使用它们,就会出现问题。Linux中使用了“引用”技术来忽略这些字符的特殊含义,引用技术就是通知shell将这些特殊字符当作普通字符处理。shell中用于引用的字符有转义字符“\”、单引号“'”、双引号“""”。

(1)转义字符“\”

如果将“\”放到特殊字符前面,shell就忽略这些特殊字符的原有含义,把它们当作普通字符对待,例如:

[root@WEBServer ~]#ls
abc?* C:\backup
[root@WEBServer ~]#mv abc\?\* abc
[root@WEBServer ~]#mv C\:\\backup backup

上面是将abc?*重命名为abc,将C:\backup重命名为backup。因为文件名中包含特殊字符,所以都使用了转义字符“\”。

(2)单引号“'”

如果将字符串放到一对单引号之间,那么字符串中所有字符的特殊含义将被忽略,例如:

[root@WEBServer ~]#mv C\:\\backup backup
[root@WEBServer ~]#mv 'C:\backup' backup

上面两条命令完全等效。

(3)双引号“""”

双引号的引用与单引号基本相同,包含在双引号内的大部分特殊字符可以当作普通字符处理,但是仍有一些特殊字符即使用双引号括起来,也仍然保留自己的特殊含义,比如“$”、“\”和“`”。

[root@WEBServer ~]#str="The \$SHELL Current shell is $SHELL"
[root@WEBServer ~]#str1="\$$SHELL"
[root@WEBServer ~]#echo $str
The $SHELL Current shell is /bin/bash
[root@WEBServer ~]#echo $str1
$/bin/bash

从上面的输出可以看出,“$”和“\”在双引号内仍然保留了特殊含义。

[root@WEBServer ~]# str="This hostname is `hostname`" 
[root@WEBServer ~]# echo $str
This hostname is WEBServer

上面的输出中,字符“`”在双引号中也保留了自己的特殊含义。

6.shell的自动补全命令行

自动补全命令行是bash一个简单而且实用的功能,自动补全命令行也就是在输入命令时不必把命令输全,shell就能智能判断用户所要输入的命令。

当用户输入某个命令的一部分后,按Tab键,shell就会根据系统环境变量信息提示出与用户输入命令相似的所有命令和文件,例如:

[root@WEBServer ~]# if<按Tab键>
if  ifcfg  ifconfig  ifdown  ifenslave ifnames  ifrename  ifup 
[root@WEBServer ~]# if

可以从上面看到,用户输入“if”后按Tab键,即可显示以“if”为前缀的所有命令和文件。如果需要的是ifconfig命令,那么只须再次输入“co”,然后按Tab键,shell就能补全命令。

如果我们要进入一个很深的目录中,并且每个目录的名字又很长,此时利用bash的自动补全功能,就再好不过了。

1.功能说明

ls命令显示指定工作目录下的内容,列出工作目录所含的文件及子目录。此命令与Windows下的dir类似。另外,Linux也提供了dir命令,用户也可以用dir命令代替ls命令。ls的语法如下。

ls [选项] [路径或文件]

ls的选项及其说明如表4.1所示。

表4.1 ls的选项及其说明

  选项   

说 明

-a

显示指定目录下的所有文件以及子目录,包含隐藏文件(Linux下将“.”开头的文件或者目录视为隐藏文档)

-d

只显示目录列表,不显示文件

-l

除文件名称外,同时将文件或者子目录的权限、使用者和大小等信息详细列出  

-s

在每个文件名后输出该文件的大小 

-k

以k字节的形式表示文件的大小  

-u

以文件上次被访问的时间排序   

-t

以时间排序         

-o

显示除组信息外的详细信息 

-x

按列输出,横向排序     

-r 

对目录反向排序      

-q

用“?”代替不可输出的字符  

-m

横向输出文件名,并以“,”作为分格符    

-S

以文件大小排序      

-R

列出所有子目录下的文件  

-pF

在每个文件名后附上一个字符以说明该文件的类型。“*”表示可执行的普通文件,“/”表示目录,“@”表示符号链接,“ | ”表示FIFO,“=”表示套接字(socket)

-C

按列输出,纵向排序    

-R

列出所有子目录下的文件   

-Q

把输出的文件名用双引号括起来

2.举例

以下命令列出/home目录下文件及其子目录。

# ls -l /home
-rw-r--r-- 1 root  root   0 Jul 7 22:39 db2
drwx------ 3 mysql mysql 4096 Oct 10 2007 mysql
drwx------ 3 oracle oracle 4096 Oct 16 2007 oracle

以下命令显示/home/oracle下的所有文件及其子目录的详细信息,并显示文件类型标记。

# ls -alF
total 56
drwx------ 4 oracle oracle 4096 Jul 7 22:43 ./
drwxr-xr-x 4 root  root  4096 Jul 7 22:39 ../
-rw------- 1 oracle oracle 238 Dec 20 2007 .bash_history
-rw-r--r-- 1 oracle oracle 304 Oct 16 2007 .bash_logout
-rw-r--r-- 1 oracle oracle 191 Oct 16 2007 .bash_profile
-rw-r--r-- 1 oracle oracle 124 Oct 16 2007 .bashrc
-rw-r--r-- 1 oracle oracle 383 Oct 16 2007 .emacs
-rw-r--r-- 1 oracle oracle 120 Oct 16 2007 .gtkrc
drwxr-xr-x 3 oracle oracle 4096 Oct 16 2007 .kde/
drwxr-xr-x 2 root  root  4096 Jul 7 22:41 .linux/
lrwxrwxrwx 1 root  root   10 Jul 7 22:43 mount -> /bin/mount*
-rwxr-xr-x 1 root  root  4283 Jul 7 22:42 nfs*
-rw-r--r-- 1 oracle oracle  22 Oct 16 2007 .rhosts

功能说明

显示当前的工作目录,执行pwd指令可立刻得知目前所在的工作目录的绝对路径名称,pwd命令的语法如下。

pwd

1.功能说明

改变当前工作目录,其用法与Windows下的cd类似。具体的语法格式如下。

cd [目录名]

cd命令的选项及其说明如表4.2所示。

表4.2 cd命令的选项及其说明

 选 项       

说 明 

cd [目录]  

切换到有目录名指定的目录下,注意,Linux下文件和目录是区分大小写的

cd 或者cd ~ 

返回当前用户的默认工作目录,注意,cd与“~”之间有一个空格    

cd ~[用户名]

返回指定用户的工作目录下,注意,这里“~”和用户名之间没有空格 

cd ..或者cd ../

返回到上级工作目录下                                    

cd /      

返回到根目录下                                         

2.举例

要切换到/usr/bin目录下,命令如下。

#cd /usr/bin
#pwd
/usr/bin

要返回oracle工作目录下,命令如下。

#cd ~oracle
#pwd
/home/oracle

1.功能说明

显示或者修改系统时间与日期。只有超级用户才能用date命令设置时间,一般用户只能用date命令显示时间。date命令的语法如下。

date [选项] 显示时间格式(以+开头,后面接时间格式)

date命令的选项及其说明如下。

时间显示格式如表4.3所示。

表4.3 时间显示格式

  格 式 

表 示 含 义     

%H  

显示小时,表示范围00~23                                        

%I   

显示小时,表示范围01~12                                        

%k   

显示小时,表示范围0~23                                         

%l   

显示小时,表示范围1~12                                         

%M  

显示分钟,显示格式为00~59                                      

%S   

显示秒钟,显示格式为00~59                                      

%p  

显示是AM(上午)还是PM(下午)                                 

%r   

显示时间,格式为hh:mm:ss AM或PM,其中hh代表小时,mm代表分钟,ss代表秒

%T   

显示时间,格式为hh:mm:ss                                       

%x   

显示年份和日期,格式为mm/dd/yyyy,这里的yyyy代表年份               

%X  

显示时间格式,相当于%H:%M:%S的组合                              

%a   

显示星期几                                                    

%b或%B

显示月份,%b是月的简称,%B是显示月的全称                         

%m  

显示月份,表示格式为从01~12                                    

%Z  

显示时区                                                      

%d  

显示一个月的第几天                                             

%D  

显示年份和月份,格式为mm/dd/yy,这里yy代表年份的最后两个数字        

%Y或%y

显示年份,%Y显示完整的年份,%y显示年份的最后两个数字               

%c   

显示日期和时间格式,相当于“%a %d %b %Y %r %Z”的组合             

2.举例

1)用指定的格式显示时间和日期。

# date '+This date now is:%x, time is now:%X,thanks!'
This date now is:07/15/2008, time is now:07:41:35 PM,thanks!

2)修改系统时间。

[root@mylinux /]# date -s 20080715 
Tue Jul 15 00:00:00 CST 2008
[root@mylinux /]# date -s 17:25  
Tue Jul 15 17:25:00 CST 2008

也可以将上面两部合并到一起。

[root@mylinux /]# date -s "20080715 17:25"
Tue Jul 15 17:25:00 CST 2008

3)显示两天前的时间。

[root@mylinux /]# date '+%Y-%m-%d'
2008-07-15
[root@server108 /]# date -d "2 days ago" +%Y-%m-%d
2008-07-13

1.功能说明

用于设置用户密码。语法格式如下。

passwd [用户名]

2.举例

1)普通用户要修改自己的密码,可使用以下命令。

passwd

然后根据提示连续两次输入密码即可。

2)超级用户root修改某个用户的密码时,使用以下命令。

passwd [用户名]

然后根据提示连续两次输入密码即可。

root修改自己的密码时,只需输入以下命令。

passwd

或者

passwd root

然后根据提示连续两次输入密码即可。

1.功能说明

su命令主要用于改变用户身份,其格式如下。

su [选项] [用户名]

su命令的选项及其说明如表4.4所示。

表4.4 su命令的选项及其说明

选 项

说 明                             

-

加载相应用户下的环境变量            

-l 

使目前的shell成为改变身份后用户默认的shell

-c 

改变身份运行一个指令后就结束         

-m

改变用户身份,但是不改变环境变量      

2.举例

1)普通用户要成为超级用户,可执行如下命令。

$su -

根据系统提示输入超级用户密码,即可转变为超级用户。

注意

 su后面的“-”就会加载root环境变量,如果直接输入su也可以转变为超级用户,但是由于没有加载root环境变量,因此某些指令可能无法执行,会提示“command not found”。

2)在普通用户A下修改超级用户root的密码,可以使用下面的命令。

$su –c passwd

然后根据提示输入root密码,接着连续两次输入root用户新的密码。执行完毕,系统自动退出到普通用户A下。

功能说明

clear命令用来清除屏幕信息,格式如下。

clear

1.功能说明

man命令用来显示指定命令的帮助信息,其格式如下。

man [命令名称]

2.举例

需要得到ls命令的帮助信息,可使用以下命令。

#man ls

1.功能说明

who命令显示目前登录到系统的用户,其格式如下。

who [选项] [file]

who命令的一般输出格式如下。

名称 [状态] 终端 时间 [活动] [进程标识](主机名)

who命令的选项及其说明如表4.5所示。

表4.5 who命令的选项及其说明

  选 项 

说 明     

-a  

列出所有信息,相当于所有选项                                                          

-b  

列出系统最近启动的日期                                                               

-l  

列出所有可登录的终端信息                                                             

-m 

仅列出关于当前终端的信息。“who –m”命令等同于“who am i”和“who am I”命令               

-q  

列出在本地系统上的用户和用户数的清单                                                   

-r  

显示当前系统的运行级别                                                               

-s  

仅显示名称、终端和时间字段信息。这是who默认的输出,即“who”和“who –s”命令是等效的        

-u  

显示当前每个用户的用户名、登录终端、登录时间、终端活动和进程标识                            

-T或-w

显示tty终端的状态,“+”表示对任何人可写,“-”表示仅对root用户或所有者可写,“?”表示遇到终端故障

在Linux下who通常通过/var/run/utmp文件来获取信息,如果“[file]”选项指定另一个文件,则who命令不再默认读取/var/run/utmp文件,而是读取指定文件来获取信息。

2.举例

1)查询系统处于什么运行级别(见图4.1)。

图4.1 查询系统所处的运行级别

2)显示系统最近启动日期,以及当前每个用户的登录详情、终端状态(见图4.2)。

图4.2 系统最近启动日期及用户登录详情

1.功能说明

用于显示登录到系统的用户信息,其格式如下。

w [选项] [用户]

w命令的选项及其说明如表4.6所示。

表4.6 w命令的选项及其说明

选 项

说 明                                 

-h

不显示输出信息的标题                    

-l 

用长格式输出                           

-s 

用短格式输出,不显示登录时间、JCPU和PCPU时间

-V

显示版本信息                           

[用户]表示当指定用户后,只显示该用户的信息。

2.举例

显示当前用户登录信息(见图4.3)。

图4.3 当前用户登录信息

1.功能说明

uname命令用来显示操作系统相关信息。其格式如下。

uname [选项]

uname命令的选项及其说明如表4.7所示。

表4.7 uname命令的选项及其说明

选 项

说 明                         

-a

显示操作系统全部信息            

-m

显示系统CPU类型,是32位还是64位系统

-n

显示操作系统的主机名            

-s 

显示操作系统类型                

-r 

显示操作系统内核版本            

2.举例

1)图4.4显示的是一个32位的Linux操作系统,内核版本为2.6.32-279.el6.i686,主机名为centos6.3。

图4.4 显示操作系统的全部信息1

2)图4.5显示的是一个64位的Linux操作系统,内核版本为3.10.0-229.el7.x86_64,主机名为centos7.1。

图4.5 显示操作系统的全部信息2

1.功能说明

uptime命令用来输出系统任务队列信息,其格式如下。

uptime

uptime输出当前系统时间、系统开机到现在的运行时间、目前有多少用户在线和系统平均负载等。

2.举例

[root@web1 ~]# uptime
 16:03:08 up 4 days, 1:49, 2 users, load average: 0.12, 0.20, 0.17

上面的输出表示现在系统时间是16:03:08,系统已经运行4天零1小时49分钟,目前有两个用户在线,系统在1分钟、5分钟、15分钟前到现在的平均负载为0.12、0.20、0.17。

功能说明

列出目前与过去登入系统的用户相关信息。当执行last指令时,它会默认读取位于/var/log目录下名称为wtmp的文件,并把该给文件记录的登入系统的用户名单全部显示出来。

last [选项] [-n 显示列数]

last命令的选项及其说明如表4.8所示。

表4.8 last命令的选项及其说明

选 项                    

说 明                                  

-a                      

把从何处登入系统的主机名称或IP地址显示在最后一行

-R                      

不显示登入系统的主机名称或IP地址            

-x                      

显示系统关机、重新开机以及执行等级的改变等信息

-n <显示列数>或-<显示列数>

设置列出名单的显示列数                    

-d                      

将显示的IP地址转换成主机名称               

功能说明

显示开机信息。内核会将开机信息存储在系统缓冲区(ring buffer)中,如果开机来不及查看相关信息,可以在开机后利用dmesg命令查看,也可以在/var/log/目录中查看dmesg文件。其格式如下。

dmesg [选项]

dmesg命令的选项及其说明如表4.9所示。

表4.9 dmesg命令的选项及其说明

选 项

说 明                       

-c 

显示开机信息后,清除ring buffer信息

-s 

设置缓冲区大小,默认设置为8192 

-n

设置记录信息的层级            

1.功能说明

free命令用来显示系统内存状态,具体包括系统物理内存、虚拟内存、共享内存和系统缓存。其格式如下。

free [选项] [-s (间隔秒数)]

free命令的选项及其说明如表4.10所示。

表4.10 free命令的选项及其说明

选 项      

说 明                          

-b        

以字节为单位显示内存使用情况       

-m       

以MB为单位显示内存使用情况       

-K        

以KB为单位显示内存使用情况        

-t        

显示内存总和列                  

-s(间隔秒数)

根据指定的间隔秒数持续显示内存使用情况

-o        

不显示系统缓冲区列               

2.举例

列出当前内存的使用状况,以MB的形式显示,如图4.6所示。

图4.6 显示当前内存使用状况

从图4.6中可以看出,系统总的物理内存为4GB,已经使用了4033MB,可用内存只有16MB。而交换分区(Swap)总大小为4GB,还没有被系统使用。

1.功能说明

ps命令显示系统进程在瞬间的运行动态,其格式如下。

ps [选项]

ps的选项非常之多,这里仅仅列出常用的选项介绍,ps命令的选项及其说明如表4.11所示。

表4.11 ps命令的选项及其说明

选 项

说 明                              

a 

显示所有用户的进程,包含每个程序的完整路径

-x 

显示所有系统程序,包括那些没有终端的程序

-u

显示使用者的名称和起始时间            

-f 

详细显示程序执行的路径群             

-c 

只显示进程的名称,不显示进程的完整路径  

-e

将除内核进程以外所有进程的信息写到标准输出

2.举例

1)要查看目前使用者的进程,使用以下命令,如图4.7所示。

图4.7 查看当前使用者的进程

默认ps命令输出使用者自己的进程。其中,

2)要查看系统所有进程,使用以下命令。

[root@mylinux ~]#ps –ef

注意

 ps命令是Linux系统最基本、最常用的且非常强大的进程查看命令,使用该命令可以确定哪些进程在运行,进程占用了多少资源,是否合理,运行状态是否正常,进程是否结束,进程有没有僵死现象,等等。该命令最常用的选项就是e、f、a、u,相应的选项组合为ps-ef、ps aux,可以通过这些组合准确定位系统进程运行状态。

top命令提供了对系统处理器状态的实时监控,它能够实时显示系统中各个进程的资源占用状况。该命令可以按照对CPU的使用、内存使用和执行时间对系统任务进程进行排序显示,同时top命令还可以通过交互式命令进行设定显示。

1.功能说明

查看即时活跃的进程,类似于Windows的任务管理器。其格式如下。

top [选项]

top的选项很多,这里列出常用的选项及其说明,如表4.12所示。

表4.12 top命令的选项及其说明

选 项

说 明                                                  

-d

指定每两次屏幕信息刷新之间的时间间隔                        

-i 

不显示闲置或者僵死的进程信息                               

-c 

显示进程的整个命令路径,而不是只显示命令名称                 

-s 

使top命令在安全模式下运行,此时top的交互式指令被取消,避免潜在危险

-b

分屏显示输出信息,结合“-n”选项可以将屏幕信息输出到文档       

-n

top输出信息更新的次数,完成后将退出top命令                  

除了一些选项之外,top命令还有很多交互式命令。交互式命令就是在top命令执行过程中使用的一些命令,这些命令都是单个字母,从应用来讲,熟悉这些交互式命令至关重要。

表4.13所示为交互式命令及其具体说明。

表4.13 交互式命令及其说明

交互式命令

说 明   

h或?   

显示帮助信息,给出交互式命令的一些说明总结                                                

k      

终止一个进程,系统将提示用户输入一个需要终止进程的PID                                        

i      

忽略闲置进程和僵死进程,这是一个开关式命令                        

s      

改变top输出信息两次刷新之间的时间,系统将提示输入新的时间,单位是秒。如果输入小数,就换算成毫秒;如果输入0,系统输出将不断刷新,默认刷新时间是5秒。需要注意的是,如果设置太短的时间,可能会引起系统不断刷新,无法看清输出显示情况,而且系统负载也会加大

o或者O 

改变top输出信息中显示项的顺序。按小写的a~z键可以将相应的列向右移动,而按大写的A~Z键可以将相应的列向左移动。最后按Enter键确定        

f或者F  

从当前显示列表中添加或者删除项。按f键之后会显示列的列表,按a~z键即可显示或隐藏对应的列。最后按Enter键确定                 

m     

切换显示内存信息                        

t      

切换显示进程和CPU状态信息                                                        

r      

重新设置一个进程的优先级,系统提示用户输入需要改变的进程PID以及需要设置的进程优先级值。输入一个正值将使优先级降低,反之则可以使该进程拥有更高的优先权。默认值是10                                      

l      

切换显示平均负载和启动时间信息                                                      

q      

退出top显示                            

c      

切换显示完整命令行和命令名称信息                                                     

M     

根据驻留内存大小进行排序输出                                                        

P      

根据CPU使用百分比大小进行排序输出                                                     

T      

根据时间/累计时间进行排序输出                  

S      

切换到累计模式                          

W     

将当前top设置写入~/.toprc文件中                  

2.举例

查看当前系统活动的进程,具体的命令和结果如图4.8所示。

图4.8 查看当前系统活动进程

从图4.8中可以看到,top的输出可以分为统计信息区和进程信息区两个部分,即前5行为统计信息区,下面几行为进程信息区,下面分别介绍两种信息区。

(1)统计信息区

第1行为任务队列信息,含义如下。

第2行和第3行分别为进程和CPU信息,具体含义如下。

最后两行输出的是内存信息,具体含义如下。

(2)进程信息区

进程信息区显示了每个进程的运行状态,我们先来看一下每列输出的含义。

1.功能说明

mkdir命令用于创建一个目录。mkdir是make directory的缩写。其格式如下。

mkdir [选项] 目录名

mkdir命令的选项及其说明如表4.14所示。

表4.14 mkdir命令的选项及其说明

选 项

说 明                                                                                                           

-m

对新建目录设置存取权限                                                                                            

-p

可以指定一个路径名称。此时,若路径中的某些目录尚不存在,加上此选项后,系统将自动创建那些尚不存在的目录,也就是说,一次可以创建多个目录

2.举例

在/home下创建user1目录,同时在user1下创建user2目录,也就是说,连续创建两个目录。

[root@mylinux~]#mkdir –p /home/user1/user2

这样就在/home目录下创建了嵌套目录user1/user2。

1.功能说明

如果一个文本文件比较长,一屏无法显示完毕,就需要使用more命令。more命令读取文本文件时,每次显示一屏,并且在每屏后暂停,同时在屏幕底部显示单词“More”。如果此时按Enter键,more命令就会接着再显示文本的一行,依此类推;如果按空格键,more命令就继续显示文本文件的另一屏信息。其格式如下。

more [选项] 文件名

more命令的选项及其说明如表4.15所示。

表4.15 more命令的选项及其说明

选 项

说 明                                                                                

-d

在屏幕底部more提示符后显示友好信息,此信息是有关使用哪些键继续,哪些键退出,哪些键提供more命令帮助的

-s 

将输出文件中的多个空行减少为只有一个空行输出。以文件的第1行为准                               

-p

先清除显示屏以前的信息,再显示文本信息                                                    

-c 

显示文件时,每屏显示都清除屏幕先前的信息,然后从最顶端显示出来                                

2.举例

1)要以分页的方式显示Makefile文件的内容,可使用以下命令。

[root@mylinux~]#more Makefile

2)要显示Makefile文件的内容,每10行显示一屏,同时清除屏幕,使用以下命令。

[root@mylinux~]#more –c -10 Makefile

1.功能说明

cat命令用来将文件的内容输出到标准输出,类似于DOS下的type命令,同时cat还可以用于连接合并文件。其格式如下。

cat [选项] 文件名

或者:

cat 文件1 文件2 >文件3

cat命令的选项及其说明如表4.16所示。

表4.16 cat命令的选项及其说明

选 项

说 明                                            

-A

将文件中的制表符显示为“^I”,同时在每行的末尾显示一个$符号

-b

将文件中的所有非空行按顺序编号,编号从1开始            

2.举例

1)要查看Kconfig文件的内容,同时将文件中的制表符显示为“^I”,并对非空行进行编号输出,可以使用以下命令。

[root@mylinux~]#cat –Ab Kconfig

2)以下命令将文件file1.txt和file1.txt的内容合并后输出到文件file3.txt。

[root@WEBServer base]# ls
file1.txt file2.txt
[root@WEBServer base]# cat file1.txt
This is file1.txt
[root@WEBServer base]# cat file2.txt
This is file2.txt
[root@WEBServer base]# cat file1.txt file2.txt >file3.txt
[root@WEBServer base]# more file3.txt
This is file1.txt
This is file2.txt
[root@WEBServer base]# ls
file1.txt file2.txt file3.txt

1.功能说明

diff命令用来比较文件的差异。diff以逐行的方式比较文本文件的异同,如果指定比较的是目录,则diff会比较目录中相同文件名的文件,但不会比较其中的子目录。其格式如下。

diff [选项] 文件1 文件2

diff命令的选项及其说明如表4.17所示。

表4.17 diff命令的选项及其说明

选 项

说 明                                         

-c 

显示全部内容,并标出不同之处                      

-b

忽略行尾的空格,同时字符串中的一个或多个空格都将视为相同

-r 

当文件1和文件2为目录时,会比较子目录中的文件        

-s 

当两个文件相同时,显示文件的相同信息               

2.输出格式

通常输出信息由如下格式组成。

n1 a n3,n4
n1,n2 d n3
n1,n2 c n3,n4

其中,字母a、d、c之前的n1和n2代表文件1的行号,字母a、d、c之后的n3和n4代表文件2的行号,字母a、d、c分别表示附加、删除和修改操作。在上面输出形式的每行后紧跟着两个文件的若干不同行,其中以“<”打头的行属于文件1,以“>”打头的行属于文件2。

3.举例

比较文件file1.txt和文件file2.txt的异同,同时将/home/admin/file3.txt文件和当前目录下的file2.txt文件进行比较。

[root@WEBServer opt]# ls
file1.txt file2.txt
[root@WEBServer opt]# cat file1.txt 
This is file1.txt
[root@WEBServer opt]# cat file2.txt 
This is file2.txt
[root@WEBServer opt]# cat/home/admin/file3.txt
This is file3.txt
[root@WEBServer opt]# diff file1.txt file2.txt 
1c1
< This is file1.txt
---
> This is file2.txt
[root@WEBServer opt]# diff /home/admin/file3.txt  file2.txt 
1c1
< This is file3.txt
---
> This is file2.txt
[root@WEBServer opt]# diff -c/home/admin/file3.txt  file2.txt 
*** /home/admin/file3.txt 2008-07-20 14:15:48.000000000 +0800
***file2.txt2008-07-20 14:14:21.000000000 +0800
--- 1 ---
! This is file3.txt
--- 1 ----
! This is file2.txt

1.功能说明

grep命令是Linux下的文本过滤工具,grep根据指定的字符串,对文件的每一行进行搜索,如果找到了这个字符串,就输出该行的内容。其格式如下。

grep [选项] 需要查找的字符串文件名

grep命令的选项有很多,这里列出最常使用的选项说明,如表4.18所示。

表4.18 grep命令的选项及其说明

选 项 

说 明                                                            

-A NUM

除了列出符合条件的行外,同时列出每个符合条件行的后NUM行                

-c   

只显示符合条件的行数,而不显示每行的具体信息                           

-f file 

事先将要搜索的样式写入一个文件中,每行一个样式,然后以这个文件作为条件进行搜索

-i    

搜索时忽略大小写                                                  

-n   

在搜索结果中显示行号                                               

-B   

与选项“-A”相反,除了列出符合条件的行外,同时列出每个符合条件行的前NUM行

2.举例

1)列出install.log文件中含有RPM字符串的行。

[root@WEBServer ~]# grepRPMinstall.log
Installing RPM

2)列出install.log文件中含有rpm字符串的行,忽略大小写,并标识出每行的具体行号。

[root@WEBServer ~]# grep -ni rpm install.log
386:Installing rpm - 4.4.2-47.el5.x86_64
412:Installing rpm-libs - 4.4.2-47.el5.x86_64
413:Installing rpm-python - 4.4.2-47.el5.x86_64
580:Installing rpm-libs - 4.4.2-47.el5.i386
792:Installing redhat-rpm-config - 8.0.45-22.el5.noarch
1191:Installing rpm-devel - 4.4.2-47.el5.x86_64
1192:Installing rpm-build - 4.4.2-47.el5.x86_64
1194:Installing rpm-devel - 4.4.2-47.el5.i386
1337:Installing RPM

功能说明

rm命令用来删除某个目录及其下的所有文件及子目录。对于链接文件,只是断开了链接,原文件保持不变。其格式如下。

rm [选项] 文件或者目录

rm命令的选项及其说明如表4.19所示。

表4.19 rm命令的选项及其说明

选 项

说 明                                                                                           

-r 

告诉rm将选项中列出的全部目录以及子目录还有文件均递归地删除,如果在选项中不指定“-r”选项,“rm”命令将不能删除目录

-f 

忽略不存在的问题,也不给出提示                                                                     

-i 

交互式删除,即在删除前进行确认                                                                     


注意

 使用rm命令要特别小心,“rm-rf”组合要慎用,因为一旦文件被删除,就不能被恢复。Linux没有类似于Windows的回收站。因此,为了防止文件或者目录被误删除,可以使用rm的“-i”选项,来逐个确认要删除的文件。使用“-i”选项时,如果用户输入“y”,文件将被删除;如果输入其他任何信息,文件则不被删除。

1.功能说明

touch命令用来改变指定文件的访问时间和修改时间,若指定文件不存在则创建此文件。如果没有指定时间,则使用当前时间。其格式如下。

touch [选项] 设定的时间文件

touch命令的选项及其说明如表4.20所示。

表4.20 touch命令的选项及其说明

选 项           

说 明                                                  

-a             

改变文件的访问时间为系统当前时间,无须设置时间选项            

-m             

改变文件的修改时间为系统当前时间,无须设置时间选项            

-c             

如果文件不存在,不创建也不提示                            

-d或者-t        

使用指定的日期或时间                                     

-r<参考文件或目录>

把指定文件或目录的日期、时间都设成和参考文件或目录的日期、时间相同

2.举例

下面是touch命令的一个操作实例,“#”号后面的内容为命令注释。

[root@mylinux~]# touch test.txt#创建一个文件test.txt
[root@mylinux~]# ls -l#显示文件创建时间(修改时间)
total 0
-rw-r--r-- 1 root root 0 Jul 18 06:44 test.txt
[root@mylinux~]# ls –lu#显示文件的访问时间
total 0
-rw-r--r-- 1 root root 0 Jul 18 06:44 test.txt
[root@mylinux~]# date   #显示系统当前时间
Fri Jul 18 06:45:21 CST 2008
[root@mylinux~]# touch -a test.txt #改变文件的访问时间为系统当前时间
[root@mylinux~]# ls -lu
total 0
-rw-r--r-- 1 root root 0 Jul 18 06:45 test.txt
[root@mylinux~]# ls -l 
total 0
-rw-r--r-- 1 root root 0 Jul 18 06:44 test.txt
[root@mylinux~]# touch -m test.txt #改变文件的修改时间为系统当前时间
[root@mylinux~]# ls -l
total 0
-rw-r--r-- 1 root root 0 Jul 18 06:46 test.txt
[root@mylinux~]# touch linux.txt
[root@mylinux~]# ls -l
total 0
-rw-r--r-- 1 root root 0 Jul 18 06:47 linux.txt
-rw-r--r-- 1 root root 0 Jul 18 06:46 test.txt
[root@mylinux~]# ls -lu 
total 0
-rw-r--r-- 1 root root 0 Jul 18 06:47 linux.txt
-rw-r--r-- 1 root root 0 Jul 18 06:45 test.txt
[root@mylinux~]# touch -a -r linux.txt test.txt 
#将test.txt文件的访问时间修改为linux.txt文件的访问时间
[root@mylinux~]# ls -lu
total 0
-rw-r--r-- 1 root root 0 Jul 18 06:47 linux.txt
-rw-r--r-- 1 root root 0 Jul 18 06:47 test.txt
[root@mylinux~]# touch -d "20080718 06:40" linux.txt 
#将linux.txt文件的修改时间设定为2008年7月18日6点40分
[root@mylinux~]# ls -l
total 0
-rw-r--r-- 1 root root 0 Jul 18 06:40 linux.txt
-rw-r--r-- 1 root root 0 Jul 18 06:46 test.txt

1.功能说明

ln命令用来在文件或目录之间创建链接。

Linux下的链接有两种,一种是硬链接(Hard Link),另一种是符号链接(Symbolic Link),默认情况下ln命令产生的是硬链接。

ln命令的格式如下。

ln [选项] 源文件目标链接名

ln命令的选项及其说明如表4.21所示。

表4.21 ln命令的选项及其说明

选 项

说 明                                        

-f 

如果在目标位置存在与链接名相同的文件,这个文件将被删除

-s 

进行软链接                                   

-d

允许系统管理员硬链接自己的目录                  

-b

对将在链接时会被覆盖或者删除的文件进行备份        

2.举例

1)将/etc/inittab文件进行硬链接到/opt/backup目录下,此时/opt/backup下就生成了一个inittab文件。可以看到,两个文件没有任何不同。

[root@mylinux ~]#ln /etc/inittab /opt/backup
[root@mylinux ~]#ll /opt/backup/inittab
total 8
-rw-r--r-- 2 root root 1666 Jul 19 11:17 /opt/backup/inittab
[root@mylinux ~]#ll /etc/inittab 
-rw-r--r-- 2 root root 1666 Jul 19 11:17 /etc/inittab

2)在当前目录下有两个文件mylinux1.txt和mylinux.txt,现在将mylinux1.txt硬链接到当前目录下,链接名为mylinux.txt。当前目录下存在相同的文件名mylinux.txt,如果使用ln的“-f”选项,就会删除mylinux.txt文件。因此这里使用“-b”选项先备份mylinux.txt文件,然后再把mylinux1.txt硬链接到mylinux.txt。下面的mylinux.txt~文件就是“-b”选项备份产生的文件。

[root@mylinux oracle]# ls
mylinux1.txt mylinux.txt
[root@mylinux oracle]# more mylinux.txt 
This is mylinux!
[root@mylinux oracle]# more mylinux1.txt  
This is mylinux1!
[root@mylinux oracle]# ln -b mylinux1.txt mylinux.txt 
[root@mylinux oracle]# ls
mylinux1.txt mylinux.txt mylinux.txt~
[root@mylinux oracle]# more mylinux.txt
This is mylinux1!
[root@mylinux oracle]# more mylinux.txt~
This is mylinux!

3)将/etc/inittab文件符号链接到/opt下。

[root@mylinux ~]#ln -s /etc/inittab /opt
[root@mylinux ~]#ll /opt/inittab
total 4
lrwxrwxrwx 1 root root 12 Jul 20 17:57 /opt/inittab -> /etc/inittab

1.功能说明

file命令用来显示文件的类型。对于长度为0的文件,将识别为空文件;对于符号连接文件,默认情况下将显示符号链接引用的真实文件路径。其格式如下。

file [选项] 文件名

file命令的选项及其说明如表4.22所示。

表4.22 file命令的选项及其说明

选 项

说 明                                    

-b

显示文件类型结果,不显示对应文件名称          

-L 

直接显示符号链接所指向文件的类型             

-z 

显示压缩文件的信息                         

-i 

如果文件不是常规文件,则不进一步对文件类型进行分类

2.举例

1)显示/etc/init.d/halt文件的类型,显示结果为shell可执行文件。

[root@WEBServer bin]# file /etc/init.d/halt
/etc/init.d/halt: Bourne-Again shell script text executable

2)显示/bin/sh文件的类型,显示结果为符号链接文件。

[root@WEBServer bin]# file /bin/sh
/bin/sh: symbolic link to 'bash'

3)显示/opt/file1.txt文件的类型,显示结果为ASCII文本文件。

[root@WEBServer opt]# file file1.txt 
file1.txt: ASCII text

4)显示/dev/had文件的类型,显示结果为块设备文件。

[root@WEBServer cicro]# file /dev/hda 
/dev/hda: block special (3/0)

1.功能说明

cp命令用来将给出的文件或者目录复制到另一个文件或者目录中。cp与Windows下的copy命令类似,但是cp命令更加强大。其格式如下。

cp [选项] 源文件或目录目标文件或目录

cp命令的选项及其说明如表4.23所示。

表4.23 cp命令的选项及其说明

选 项

说 明                                                                              

-a

在复制目录时使用。它保留所有的信息,包含文件链接、文件属性,并递归地复制目录                   

-r 

若给出的源文件是一目录文件,此时cp将递归复制该目录下所有的子目录和文件。此时目标文件必须为一个目录名

-d

复制时保留链接,这样不会失去链接文件                                                    

-p

保留文件的修改时间和存取权限                                                           

-i 

如果已经有相同文件名的目标文件,则提示用户是否覆盖                                        

2.举例

1)将当前目录下的所有文件复制到/tmp目录下,“./*”表示当前目录下所有文件和目录。

[root@mylinux~]#cp –r ./* /tmp

2)将/home/oracle目录及其子目录下的全部内容复制到/home/ixdba下。

[root@mylinux~]#cp –r /home/oracle /home/ixdba

1.功能说明

find命令用来在指定的路径下查找指定的文件。其格式如下。

find path-name[-options] [-print –exec -ok命令 {} \;]

具体的选项说明如下。

表4.24 “-options”选项常见的格式及其说明

格 式       

说 明                                                                                                            

-name '字符串' 

查找文件名匹配所给字符串的所有文件,字符串内可用通配符*、?、[]                                                            

-lname '字符串'

查找文件名匹配所给字符串的所有符号链接文件,字符串内可用通配符*、?、[]                                                     

-gid n     

查找属于ID号为n的用户组的所有文件                                                                                    

-uid n      

查找属于ID号为n的用户的所有文件                                                                                     

-empty     

查找大小为0的目录或文件                                                                                            

-path '字符串'

查找路径名匹配所给字符串的所有文件,字符串内可用通配符*、?、[]                                                            

-group'字符串' 

查找属于用户组名为所给字符串的所有的文件                                                                              

-depth     

在查找文件时,首先查找当前目录下的文件,然后再查找其子目录下的文件                                                        

-prune 目录 

指出搜索时不搜索该目录。如果同时使用-depth选项,那么-prune将被find命令忽略                                                 

-size n     

查找文件长度为n块的文件,带有c时表示文件长度以字节计                                                                    

-user '字符串'

查找属于用户名为所给字符串的所有的文件                                                                                

-mtime +n或-n

按时间搜索,+n表示n天之前的,-n表示今天到n天前之间的                                                                   

-type 文件类型 

按指定文件类型搜索。文件类型包括b(块设备文件)、c(字符设备文件)、f(普通文件)、l(符号链接)、d(目录)、p(管道)、s(socket)文件


注意

 格式要正确,“-exec 命令 {} \;”,在“}”和“\”之间一定要有空格才行。

2.举例

1)在系统根目录下,查找文件类型为普通文件,属于ixdba用户,两天以前,并且查找时不包含/usr/bin目录的文件名为main.c的文件,并将结果输出到屏幕。

[root@mylinux~]#find / -path "/usr/bin" -prune -o -name "main.c" -user ixdba -type f 
-mtime +2 -print

2)对上例中搜索的结果进行删除操作。

[root@mylinux~]#find / -path "/usr/bin" -prune -o -name "main.c" -user ixdba -type f 
-mtime +2 –print–exec rm {} \;

3)在系统根目录下查找不在/var/log和/usr/bin目录下的所有普通文件。

[root@mylinux~]#find / \( -path /var/log –o –path /usr/bin \) –prune –o –name 
"main.c"–print

\ 表示引用,告诉shell不对后面的字符做特殊解释,而留给find命令去解释其意义。

注意

 “( -path”中,在“(”和“-path”之间是有空格的,同时“/usr/bin )”在“bin”和“\”之间也是有空格的。

4)查找系统中所有大小为0的普通文件,并列出它们的完整路径。

[root@mylinux~]#find / -type f –size 0 –exec ls –al {} \;

5)查找系统/var/logs目录中修改时间在7天以前的普通文件,然后以交互方式删除。

[root@mylinux~]#find /var/log –type f –mtime +7 –ok rm {} \;
<rm ... /var/log/spooler.1 > ? y
<rm ... /var/log/spooler.3 > ? y
<rm ... /var/log/boot.log.2 > ? y
<rm ... /var/log/spooler.4 > ? y
<rm ... /var/log/Xorg.0.log.old > ? y
<rm ... /var/log/Xorg.0.log > ? y
<rm ... /var/log/secure.4 > ? y

6)在当前目录及子目录下查找所有“*.txt”文件。

[root@mylinux~]#find .–name "*.txt"–print

7)在用户自己的根目录下查找文件名以一个大写字母开头,紧接着是一个小写字母和两个数字,最后以“.txt”结尾的文件。

[root@mylinux~]$ find ~ -name “[A-Z][a-z][0--9][0--9]*.txt” -print

8)在/etc目录下查找文件属主为ixdba用户的文件。

[root@mylinux~]#find /etc –user ixdba -print

1.功能说明

split命令用来分割文档,将一个文件分成数个。其格式如下。

split [选项] [input_file] [output_file]

split命令的选项及其说明如表4.25所示。

表4.25 split命令的选项及其说明

选 项

说 明                                                          

-b size

指定分割出来的文件大小,size可加入单位,b代表512字节,k代表1KB,m代表1MB

-n  

这里“n”指定分割的每个文件的长度,默认为1000行                     

-d  

将split命令生成的文件序列以数字形式命名                              

-a  

指定split命令生成的文件序列的长度,默认长度为2                        

2.举例

1)将access_log文件进行分割,设定每个分割文件的大小为10MB。

[root@mylinux ~]#split –b 10Maccess_logaccess_log_bak

执行完毕,在当前目录下就生成类似access_log_bakaa、access_log_bakab和access_log_bakah等分割文件,每个文件大小10MB。

2)将/opt/etc.zip文件进行分割,指定每个文件大小为2MB,输出文件序列以数字形式显示,序列长度为3。

[root@mylinux ~]#split –b 2M–d –a 3 /opt/etc.zip /opt/etc.zip_bak

split命令执行完毕,在/opt/目录下生成类似etc.zip_bak001、etc.zip_bak002和etc.zip_bak003等文件。

1.功能说明

mv命令用来将文件或目录改名或将文件由一个目录移入另一个目录中。如果源类型和目标类型都是文件或者目录,mv将进行目录重命名。如果源类型为文件,而目标类型为目录,mv将进行文件的移动。如果源类型为目录,则目标类型只能是目录,不能是文件,此时完成目录重命名。其格式如下。

mv [选项] 源文件或目录目标文件或目录

mv命令的选项及其说明如表4.26所示。

表4.26 mv命令的选项及其说明

选 项

说 明                                                                                  

-i 

交互式操作,在对已经存在的文件或目录覆盖时,系统会询问是否覆盖,用户输入“y”进行覆盖,输入“n”则不覆盖

-f 

禁止交互式操作,在mv将要覆盖某个文件或者目录时,不给任何提示,默认覆盖                          

2.举例

创建一个myDocument目录和一个Document文件,然后将Document文件移动到myDocument目录下,最后修改myDocument目录为myDocument_1。

[root@dbbackup oracle]# mkdir myDocument
[root@dbbackup oracle]# touch Document
[root@dbbackup oracle]# ls
Document myDocument
[root@dbbackup oracle]# mv Document myDocument 
[root@dbbackup oracle]# mv myDocument myDocument_1
[root@dbbackup oracle]# ls
myDocument_1
[root@dbbackup oracle]#

1.功能说明

将一般的文件或者目录进行压缩或者解压,默认生成以“.zip”为后缀的压缩包。zip命令类似于Windows中的winzip压缩程序。其格式如下。

zip [选项] 压缩文件名需要压缩的文档列表
unzip [选项] 压缩文件名

zip命令的选项及其说明如表4.27所示。

表4.27 zip命令的选项及其说明

选 项     

说 明                                              

-r       

递归压缩,将指定目录下的所有文件以及子目录全部压缩        

-d       

从压缩文件内删除指定的文件                            

-i "文件列表" 

只压缩文件列表中的文件                                

-x "文件列表"

压缩时排除文件列表中指定的文件                         

-u       

更新文件到压缩文件中                                 

-m      

将文件加入压缩文件压缩后,删除原始文件,即把文件移到压缩文件中

-F       

尝试修复损坏的压缩文件                                

-T       

检查压缩文件内的每个文件是否正确无误                    

- 压缩级别 

压缩级别是1~9之间的一个数字                          

unzip命令的选项及其说明如表4.28所示。

表4.28 unzip命令的选项及其说明

选 项     

说 明                                                                 

-x "文件列表"

解压文件,但不包含文件列表中指定的文件                                     

-t       

测试压缩文件有无损坏,并不解压                                           

-v       

查看压缩文件的详细信息,具体包括压缩文件中包含的文件大小、文件名和压缩比等,并不解压

-n       

解压时不覆盖已经存在的文件                                               

-o       

解压时覆盖已经存在的文件,并且不要求用户确认                                

-d 目录名 

把压缩文件解压到指定目录下                                               

2.举例

1)将/etc 目录下的所有文件以及目录进行压缩,设置压缩级别为最高,保存到文件/opt/etc.zip。

[root@mylinux ~]# zip -9r /opt/etc.zip /etc

2)将/var目录中所有文件以及子目录压缩,除了“*.log”文件之外,将压缩文件保存到/opt目录下。

[root@mylinux ~]#zip –r /opt/var.zip /var –x "*.log"

3)将上面/opt/etc.zip中的etc/passwd文件从压缩包中删除。

[root@mylinux ~]#zip /opt/etc.zip–d etc/passwd
deleting:etc/passwd

4)修改了/etc/inittab文件,希望把更改信息更新到/opt/etc.zip包中。

[root@mylinux ~]#zip –u /opt/etc.zip /etc/inittab

如果/etc目录下很多文件进行了修改或者增加了很多文件,就需要把/etc目录下的全部信息更新到/opt/etc.zip文件。可以使用以下命令。

[root@mylinux ~]#zip –u /opt/etc.zip /etc/* 或者使用
[root@mylinux ~]#zip–ru /opt/etc.zip /etc

看出点玄机了吗?在上例中,其实“/etc/*”就代表了/etc目录下的所有文件以及子目录,而这刚好是zip命令“-r”选项完成的功能。

5)将/opt/etc.zip压缩文件全部解压到/etc目录下,除了etc/inittab文件之外,并且在解压过程中如果出现相同的文件就直接进行覆盖,不要求用户确认。可以使用以下命令。

[root@mylinux ~]#unzip –o /opt/etc.zip –x etc/inittab –d /etc

1.功能说明

将一般的文件进行压缩或者解压。压缩文件预设的扩展名为“.gz”,其实gunzip就是gzip的硬链接,因此无论是压缩或者解压都可以通过gzip来实现。

注意

 gzip只能对文件进行压缩,不能压缩目录,即使指定压缩的目录,也只能压缩目录内的所有文件。

其格式如下。

gzip [选项] 压缩(解压缩)的文档名

gzip命令的选项及其说明如表4.29所示。

表4.29 gzip命令的选项及其说明

选 项 

说 明                                                                                       

-d 

对压缩的文件进行解压                                                                          

-r 

递归式压缩指定目录以及子目录下的所有文件                                                          

-t 

检查压缩文档的完整性                                                                          

-v 

对于每个压缩和解压缩的文档,显示相应的文件名和压缩比                                                

-l 

显示压缩文件的压缩信息,显示字段为压缩文档大小、未压缩文档大小、压缩比和未压缩文档名称                   

-num

用指定的数字num配置压缩比,“-1”或“-fast”表示最低压缩比,“-9”或“-best”表示最高压缩比。系统默认压缩比为6

2.举例

1)首先将/etc目录下的所有文件以及子目录进行压缩,备份压缩包etc.zip到/opt目录,然后对etc.zip文件进行gzip压缩,设置gzip的压缩级别为9。

[root@mylinux ~]#zip –r /opt/etc.zip /etc
[root@mylinux ~]#gzip -9v /opt/etc.zip
etc.zip:     6.5% -- replaced with etc.zip.gz

2)查看上述etc.zip.gz文件的压缩信息。

[root@mylinux ~]# gzip -l /opt/etc.zip.gz 
compressed    uncompressed ratio uncompressed_name
      11938745      12767265  6.5% /opt/etc.zip

3)解压上述etc.zip.gz文件到当前目录。

[root@mylinux ~]#gzip –d /opt/etc.zip.gz或者执行
[root@mylinux ~]#gunzip /opt/etc.zip.gz

通过上面的示例可以知道“gzip -d”等价于“gunzip”命令。

1.功能说明

对文件进行压缩与解压缩。此命令类似于“gzip/gunzip”命令,只能对文件进行压缩。对于目录只能压缩目录下的所有文件,压缩完成后,在目录下生成以“.bz2”为后缀的压缩包。bunzip2其实是bzip2的符号链接,即软链接,因此压缩、解压都可以通过bzip2实现。其格式如下。

bzip2 [选项] 要压缩或解压的文件

bzip2命令的选项及其说明如表4.30所示。

表4.30 bzip2命令的选项及其说明

选 项  

说 明                                                                          

-d    

执行解压缩,此时选项后面跟要解压缩的文件                                             

-v     

压缩或解压文件时,显示详细信息                                                     

-k     

bzip2在压缩或解压缩后,会删除原始文件,若要保留原始文件,可使用此选项                    

-f     

bzip2在压缩或解压缩时,若输出文件与现有文件同名,预设不会覆盖现有文件。若要覆盖,就要使用此选项

-t     

测试“.bz2”压缩文件的完整性                                                       

- 压缩级别

压缩级别可以从1~9中选取,数字越大,压缩率越高                                       

2.举例

将/opt目录下的etc.zip、var.zip和backup.zip进行压缩,设置压缩率为最高,同时在压缩完毕后不删除原始文件,显示压缩过程的详细信息。

[root@mylinux~]# bzip2 -9vk/opt/etc.zip /opt/var.zip /opt/backup.zip   
etc.zip: 1.048:1, 7.633 bits/byte, 4.59% saved, 49490414 in, 4721194 out.
var.zip: 1.048:1, 7.633 bits/byte, 4.59% saved, 49490414 in, 2821065 out.
backup.zip: 1.046:1,7.647 bits/byte, 4.42% saved, 8410 in, 8823 out.

压缩完毕后,在/opt下就会生成相应的etc.zip.bz2、var.zip.bz2和backup.zip.bz2文件。

1.功能说明

tar是Linux下经常使用的归档工具,对文件或者目录进行打包归档,归档成一个文件,但是并不进行压缩。其格式如下。

tar [主选项+辅助选项] 文件或者目录

tar命令的选项很多,这里列出一些经常用到的主选项,如表4.31所示。

表4.31 tar命令的主选项及其说明

主 选 项

说 明                               

-c   

新建文件                            

-r   

把要归档的文件追加到档案文件的末尾       

-t   

列出档案文件中已经归档的文件列表        

-x   

从打包的档案文件中还原出文件            

-u   

更新档案文件,用新建文件替换档案中的原始文件

辅助选项的详细信息如表4.32所示。

表4.32 tar命令的辅助选项及其说明

辅 助 选 项    

说 明                                                                                                                                                           

-z           

调用gzip命令在文件打包的过程中压缩/解压文件                                                                                                                          

-w           

在还原文件时,把所有文件的修改时间设定为现在时间                                                                                                                      

-j           

调用bzip2命令在文件打包的过程中压缩/解压文件                                                                                                                         

-Z           

调用compress命令过滤档案                                                                                                                                         

-f           

“-f”选项后面紧跟档案文件的存储设备,默认是磁盘,需要指定档案文件名;如果是磁带,只需指定磁带设备名即可。注意,在“-f”选项之后不能再跟任何其他选项,也就是说,“-f”必须是tar命令的最后一个选项

-v           

指定在创建归档文件过程中,显示各个归档文件的名称                                                                                                                      

-p           

在文件归档的过程中,保持文件的属性不发生变化                                                                                                                          

-N "yyyy/mm/dd"

在指定日期之后的文件才会打包到档案文件中                                                                                                                             

--exclude file  

在打包过程中,不将指定file文件打包                                                                                                                                   

2.举例

1)将/etc目录下的所有文件打包,并显示打包的详细文件,设置打包文件名为etc.tar,同时保存文件到/opt目录下。

[root@dbbackup oracle]#tar -cvf /opt/etc.tar /etc

这里的档案名“etc.tar”名字是我们自己随便取的,Linux上利用tar命令打包出来的档案文件一般用.tar作为标识。

2)将/etc目录下的所有文件打包并压缩,然后显示打包的详细文件,设置打包文件名为etc.tar.gz,同时保存文件到/opt目录下。

[root@dbbackup oracle]#tar -zcvf /opt/etc.tar.gz /etc
[root@dbbackup oracle]#tar -jcvf /opt/etc.tar.bz2 /etc

“zcvf”选项表示在打包完成后调用gzip命令对档案文件进行压缩,这里的档案名“etc.tar.gz”也是我们随便取的,“.tar”表示是用tar命令打包的,“.gz”表示调用了gzip命令进行了压缩。同理,“jcvf”选项表示在打包完成后调用bzip2命令对档案文件进行压缩,档案命名标识中“.bz2”表示调用了bzip2命令进行了压缩处理。

这里对档案文件的取名没有硬性的规定,上面采用的命名规则,可以很方便地让我们知道文件的类型以及对应的解压方式,因为压缩方式不同,解压方式也是不同的。同时,这种规则也是默许的一种潜规则。如果你不喜欢这种规则,完全可以按照自己喜欢的方式命名档案文件。

3)查阅上面/opt/etc.tar.gz压缩包的内容。

[root@dbbackup oracle]#tar -ztvf /opt/etc.tar.gz
[root@dbbackup oracle]#tar -jtvf /opt/etc.tar.gz

注意

 “etc.tar.gz”可能包含很多个文件,无法一个屏幕显示完毕,这时可以使用more命令,比如,“tar -zxvf /opt/etc.tar.gz|more”。

4)将/opt/etc.tar.gz解压到/usr/local/src下。

[root@dbbackup oracle]#cd /usr/local/src
[root@dbbackup src]#tar -zxvf /opt/etc.tar.gz

一般情况下,可以把/opt/etc.tar.gz在任何地方解压,这里首先切换到了/usr/local/src目录下,然后解压/opt/etc.tar.gz,因此/usr/local/src/etc目录就是解压的目录。

5)将/etc目录下的所有文件打包备份到/opt目录下,并保存每个文件的权限。

[root@dbbackup oracle]#tar -zcvpf /opt/etc.tar.gz /etc

6)在/opt目录下,仅解压/opt/etc.tar.gz压缩文件中的/etc/inittab文件。

[root@dbbackup oracle]# cd /opt
[root@dbbackup opt]#tar -zxvf /opt/etc.tar.gz etc/inittab

首先可以通过“tar-ztvf”查看“etc.tar.gz”文件中包含的文件,然后找到需要解压的文件,通过上面的方式解压。后面指定的需要解压出来的文件一定要是通过“tar -ztvf”显示出来的文件完整路径。这样就在/opt目录下解压出了一个etc目录,而etc目录下的inittab就是我们需要的文件。

7)打包备份/var/log目录中2008/7/21以后的文件。

[root@dbbackup oracle]#tar –N "2008/7/21"–zcvf log.tar.gz /var/log
[root@dbbackup oracle]#pwd
/opt/oracle
[root@dbbackup oracle]#ls
log.tar.gz

8)打包备份/home目录和/etc目录,但是不备份/home下的ixdba目录。

[root@dbbackuporacle]#tar–exclude/home/ixdba -zcvf myfile.tar.gz /home/* /etc

9)将/etc目录打包压缩后直接解压到/opt目录下,而不生成打包的档案文件。

[root@dbbackuporacle]#cd /opt
[root@dbbackupopt]#tar –zcvf - /etc | tar –zxvf –

在上面的命令中,紧跟在“f”后面的“-”将创建的档案文件输出到标准输出,“|”在Linux下表示管道符,命令最后的“-”表示将tar命令通过管道传入的档案文件作为需要解压的数据来源。

1.功能说明

dd命令用来转换或复制文件,同时可以对设备进行备份。其格式如下。

dd if="input_file" of="output_file" bs="block_size" count="number"

dd命令的选项及其说明如下。

2.举例

1)将/etc/inittab文件备份到/opt/inittab.bak中。

[root@mylinux ~]# dd if=/etc/inittab of=/opt/inittab.bak
3+1 records in
3+1 records out
[root@mylinux ~]#ls –al /etc/inittab/opt/inittab.bak
-rw-r--r-- 1 root root 1666 Jul 22 17:37 /etc/inittab
-rw-r--r-- 1 root root 1666 Jul 23 08:09 /opt/inittab.bak

上面两个文件的大小没有任何异同,都是1666字节。由于没有指定“bs”大小,因此默认512字节为一个单位块,刚好对应上面的“3+1”。3表示有3个完整的512字节的块,而“1”表示未满512字节的那个块。

2)将/dev/sda2整个分区进行备份,保存备份文件到/opt目录。

[root@mylinux ~]# dd if=/dev/sda2 of=/opt/sda2.back

这里将磁盘某个分区的数据全部备份,dd命令还能够备份整个磁盘的数据,这里的备份输出路径一定不能是“/dev/sda2”所在分区,否则怎么都备份不完的。

3)将上面例子中的备份包/opt/sda2.back恢复到相应的分区,使用以下命令。

[root@mylinux ~]#dd if=/opt/sda2.back of=/dev/sda2

注意

 在恢复目标分区时,一定要先卸载目标分区,待恢复完成,再进行挂载。

还需要注意的是,备份的分区最好和恢复的分区一致,例如,本例中“/opt/sda6.back”文件是对“/dev/sda2”分区的备份,那么恢复的时候最好将“/opt/sda6.back”文件恢复到“/dev/sda2”分区下,或者恢复到大小与“/dev/sda2”一致的分区下。因为恢复的目标分区如果大于备份的分区,将浪费空间;相反,若恢复的目标分区小于备份的分区,就将在恢复的时候提示空间不足。

1.功能说明

cpio命令是通过重定向的方式将文件进行打包、备份、还原、恢复的工具,它可以解压以“.cpio”或者“.tar”结尾的文件。其格式如下。

cpio [选项] >文件名或者设备名
cpio [选项] <文件名或者设备名

cpio命令的选项及其说明如表4.33所示。

表4.33 cpio命令的选项及其说明

选 项

说 明                                                          

-o

将文件复制、打包成文件或者将文件输出到设备上                         

-i 

将打包文件解压或者将设备上的备份还原到系统中                         

-t 

查看cpio打包的文件内容或者输出到设备上的文件内容                      

-v

显示打包过程中的文件名称                                          

-d

在cpio还原文件的过程中,自动建立相应的目录                           

-c 

一种较新的存储方式                                               

-B

让默认块可以增大到5120字节,默认块为512字节,这样做的好处是可以加快存取速度

2.举例

1)将/etc下的所有普通文件都备份到/opt/etc.cpio中。

[root@mylinux ~]#find /etc –type f | cpio –ocvB >/opt/etc.cpio

2)将系统上所有资料备份到磁带机内。

[root@mylinux ~]#find / -print | cpio -covB > /dev/st0

这里的“/dev/st0”是磁带的设备名,代表SCSI磁带机。

3)查看上例磁带机上备份的文件。

[root@mylinux ~]#cpio -icdvt < /dev/st0

有时可能因为备份的文件过多,一个屏幕无法显示完毕,此时利用下面的命令,让磁带机的文件信息输出到文件。

[root@mylinux ~]#cpio -icdvt < /dev/st0> /tmp/st_content

4)将示例1)中的备份包还原到相应的位置,如果有相同文件就进行覆盖。

[root@mylinux ~]#cpio –icduv < /opt/etc.cpio

注意

 如果cpio在打包、备份的时候用的是绝对路径,那么在恢复的时候会自动恢复到这些绝对路径下,本例就会将备份文件全部还原到/etc路径下对应的目录中。同理,如果在打包备份时用的是相对路径,那么还原时也将恢复到相对路径下。

通过上面的示例可以看出,cpio无法直接读取文件,它需要每个文件或者目录的完整路径名才能识别、读取,而find命令的输出刚好做到了这点,因此cpio命令一般和find命令配合使用。其实,上面的示例中我们已经看到了它们的组合用法。

1.功能说明

df命令用来检查Linux系统的磁盘空间占用情况。其格式如下。

df [选项]

df命令的选项及其说明如表4.34所示。

表4.34 df命令的选项及其说明

选 项

说 明                                                 

-h

以容易理解的格式输出文件系统分区占用情况,如32KB、120MB、60GB

-k

以KB大小为单位输出文件系统分区占用情况                    

-m

以MB大小为单位输出文件系统分区占用情况                    

-a

列出所有的文件系统分区,包含0大小的文件系统分区             

-i 

列出文件系统分区的inode信息                             

-T

显示磁盘分区的文件系统类型                               

2.举例

1)查看当前系统磁盘分区情况,并显示文件系统类型,人性化输出。

[root@web1 ~]# df -hT
Filesystem  Type  Size Used Avail Use% Mounted on
/dev/sda2   ext3   15G603M14G  5% /
/dev/sda1   ext3   99M14M81M 14% /boot
/dev/sda7   ext496G19G72G 21% /ixdba
nonetmpfs  2.0G   0 2.0G  0% /dev/shm
/dev/sda3   ext3  9.7G3.3G5.9G 36% /usr
/dev/sda6   ext3  7.7G243M7.1G  4% /var
/dev/sdf6  xfs951G77G875G  9% /webdata

从上面的输出可以看出,每个文件系统分区的总大小、已经使用大小、剩余大小和占用的百分比等,还可以看出,上面的系统使用了ext3、ext4、tmpfs和xfs这4种类型的文件系统。

关于文件系统的概念,后面章节有详细讲述。

2)输出文件系统的inode信息。

[root@web1 ~]# df -ihT
Filesystem  Type  Inodes  IUsed  IFree IUse% Mounted on
/dev/sda2   ext3   1.9M  8.8K  1.9M  1% /
/dev/sda1   ext3    26K   38   26K  1% /boot
/dev/sda7   ext413M   41K   13M  1% /ixdba
nonetmpfs   496K    1  496K  1% /dev/shm
/dev/sda3   ext3   1.3M  156K  1.1M  13% /usr
/dev/sda6   ext3   1003K  3.3K  999K  1% /var
/dev/sdf6   xfs30M2.4M28M  9% /webdata

1.功能说明

du命令用来显示文件或目录所占用的磁盘空间情况。其格式如下。

du [选项] 文件或目录

du命令的选项及其说明如表4.35所示。

表4.35 du命令的选项及其说明

选 项

说 明                                        

-s 

显示文件或者整个目录的大小,单位为KB             

-b

以字节为单位显示文件大小或者显示目录下所有文件的大小

-sh

以人性化的格式显示文件或者目录大小,如300MB、1.2GB等

-sm 

以MB为单位显示文件或者目录大小                  

2.举例

1)要显示当前目录下所有文件的大小,使用以下命令。

[root@localhost iso]# du -sh ./*
174M  ./RHEL4-U4-i386-AS-disc1.iso
631M  ./rhel-5-server-i386-disc1.iso
631M  ./rhel-5-server-i386-disc2.iso
631M  ./rhel-5-server-i386-disc3.iso
629M  ./rhel-5-server-i386-disc4.iso
224M  ./rhel-5-server-i386-disc5.iso
3.7G  ./rhel-5-server-i386-discDvD.iso

2)要显示当前Linux系统/etc目录的总大小,使用以下命令。

[root@localhost iso]#du –sh /etc
54M   /etc

1.功能说明

fsck命令用来检查文件系统并尝试修复错误。其格式如下。

fsck [选项] [-t <文件系统类型>] [设备名]

fsck命令的选项及其说明如表4.36所示。

表4.36 fsck命令的选项及其说明

选 项

说 明                                                       

-a

自动修复文件系统,没有任何提示                                 

-r 

采取交互式的修复模式,在执行修复时进行询问,让用户得以确认并决定处理方式

-A

依照/etc/fstab配置文件的内容,检查文件内所列的全部文件系统           

-T

执行fsck指令时,不显示标题信息                                  

-V

显示fsck指令的执行过程                                        

-N

不执行指令,仅列出实际执行会进行的动作                           

“-t <文件系统类型>”是指定要检查的文件系统类型。

注意

 在执行fsck命令修复某个文件系统时,这个文件系统对应的磁盘分区一定要处于卸载状态,磁盘分区在挂载状态下进行修复是极为不安全的,数据可能遭到破坏,也有可能损坏磁盘。

2.举例

检查并尝试修复出问题的磁盘分区/dev/sda10,在执行修复时进行询问,让用户得以确认并决定处理方式,显示详细修复过程。

[root@localhost /]# fsck -rV -t ext3 /dev/sda10 
fsck 1.39 (29-May-2006)
[/sbin/fsck.ext3 (1) -- /dev/sda10] fsck.ext3 -r /dev/sda10 
e2fsck 1.39 (29-May-2006)
/opt contains a file system with errors, check forced.
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Inode 6121 ref count is 2, should be 1. Fix<y>? yes
Unattached inode 6122
Connect to /lost+found<y>? yes
Inode 6122 ref count is 2, should be 1. Fix<y>? yes
Pass 5: Checking group summary information
Block bitmap differences: -(519--529) -9273
Fix<y>? yes
…………
/opt: ***** FILE SYSTEM WAS MODIFIED *****
/opt: 19/128520 files (15.8% non-contiguous), 46034/514048 blocks

从上面可以看出,fsck在修复文件系统的时候其实调用了/sbin/fsck.ext3命令。fsck修复经历了5个步骤的检查,中间如果发现需要修复的,就会提示用户是否修复,按y键进行修复,按其他任意键跳过修复。

当fsck命令执行时,fsck如果发现存在没有文件系统依赖的文件或者目录,就会提示用户是否把它们找回来,因为这些没有文件系统依赖的文件或者目录对用户来说是看不到的,也就无法使用,一般是由文件系统内部结构损坏导致的。如果用户同意找回,也就是上面说的按y键,fsck命令就会把这些孤立的文件或者目录放到lost+found目录下,并用这些文件自己对应的i-node号来命名,以便用户查找自己丢失的文件。lost+found的字面意思就是丢失并找回的含义。

因此当用户在利用fsck命令修复磁盘分区以后,如果发现分区中有文件丢失,就可以到对应的lost+found目录中去查找。由于此时通过文件名称已经无法分辨文件,因此可以利用file命令查看文件系统类型,进而判断哪个是需要的文件。

功能说明

sync命令用来强制把内存中的数据写回硬盘,以免数据的丢失。其格式如下。

sync

需要说明的是:在Linux系统中,修改过的操作会缓存到内存中,不会马上写入硬盘,等待适当的时候再从内存写入磁盘,这样可以提高系统读写效率。Linux下默认每隔3秒系统自动执行一次sync操作,系统正常关机时也会执行sync操作,保证所有操作全部从内存写入磁盘。如果非法关机,系统内存信息无法及时同步到硬盘,就会造成数据丢失或者文件损坏,由此可见,Linux系统中正常关机是非常重要的。

1.功能说明

eject命令用来退出抽取式设备,如光驱或者磁带。如果该设备已经挂载,则eject先将设备卸载,然后再退出设备。其格式如下。

eject [选项] 设备名

eject命令的选项及其说明如表4.37所示。

表4.37 eject命令的选项及其说明

选 项       

说 明                                              

-c <光驱编号>

如果Linux系统中有多个光驱,需要指定某个光驱              

-d或--default

显示默认设备,而不是实际执行操作                       

-f或--floppy 

退出抽取式软盘                                      

-q或--tape  

退出磁带                                           

-r或--cdrom 

退出光盘                                           

-t或--trayclose 

关闭光盘的托盘                                      

-n或--noop 

显示指定的设备名对应的设备文件路径。默认显示光盘的设备文件路径

2.举例

1)要显示当前系统中软盘、光盘和磁带的相应设备文件路径,使用以下命令。

[root@mylinux ~]# eject --noop floppy
eject: device is '/dev/fd0'
[root@mylinux ~]# eject -n cdrom
eject: device is '/dev/hda'
[root@mylinux ~]# eject -n st0
eject: device is '/dev/st0'

2)要卸载Linux系统的/tmp分区,使用以下命令。

[root@mylinux ~]#eject /tmp

1.功能说明

挂载以及卸载指定的文件系统。在第3章我们曾经讲述过mount/umount命令,这里再深入讲述mount/umount的使用。

mount [选项] [-L<标签>] [-o<选项>] [-t<文件系统类型>] [设备名] [挂载点]
umount [挂载点]

mount命令的选项及其说明如表4.38所示。

表4.38 mount命令的选项及其说明

选 项 

说 明                            

-a 

加载文件/etc/fstab中指定的所有设备    

-n 

不将加载信息记录在/etc/mtab文件中    

-r 

以只读方式加载设备                 

-w 

以可读写模式加载设备,属于mount默认设置

-f或-v

不加载设备,仅查看mount的挂载状态   

1)-L<标签>:标签其实就是磁盘分区标识的别名,标签可以随便起名,这样便于记忆,在Linux下磁盘分区的设备名比较难记,利用标签代替设备名,简单易记。

2)-o<选项>:指定加载文件系统时的选项,这些选项如下。

3)-t<文件系统类型>:指定设备的文件系统类型,常用选项如下。

4)设备名:硬盘分区在Linux上的设备标识,类似于/dev/sda1、/dev/hda2等。

5)挂载点:Linux系统下指定的某个目录。

2.举例

1)将光盘镜像文件挂载到Linux系统下。

[root@localhost/]#mount-o loop -t iso9660 /iso/CentOS-7-x86_64-DVD-1503-01.iso /ixdba

在Windows下访问ISO镜像文件需要虚拟光驱等第三方软件,而在Linux系统下光盘镜像文件可以直接通过挂载的方式实现读取。

这里的“loop”选项表示把一个镜像文件当成硬盘分区挂接到系统,“-t”指定镜像文件的类型为iso9660,也就是光盘的标准文件系统。“/iso/CentOS-7-x86_64-DVD-1503-01.iso”表示镜像文件的路径,而“/ixdba”表示挂载点,挂载成功后就可以通过/ixdba目录访问镜像文件的内容了。

2)Windows+Linux双系统并存环境,将Windows下的D盘挂载到Linux下的/mnt/d目录下,并且支持中文,使用以下命令。

[root@localhost/]#mount -t vfat -ocodepage=936,iocharset=cp936 /dev/hda3 /mnt/d

上面的命令中,“-t vfat”选项表示需要挂载的D盘是FAT格式的文件系统;“-o”后面的选项指定了分区挂载后支持中文显示;“/dev/hda3”是Windows下的D盘在Linux下的硬件标识;“/mnt/d”是Linux系统上指定的挂载点,挂载成功就可以通过访问Linux下的/mnt/d目录来访问Windows下的D盘内容了。

3)在一台Linux系统上以只读方式挂载另一台Linux系统上共享的分区,也就是我们以后要深入讲述的网络文件系统(network filesystem,NFS),使用以下命令。

[root@localhost/]#mount-t nfs -o ro192.168.60.133:/home/ixdba /mnt/nfs

上面的命令中,“-t nfs”指定挂载的文件系统类型是nfs;“-o ro”指定以只读方式挂载;“192.168.60.133:/home/ixdba”表示将IP地址为“192.168.60.133”的另外一台Linux系统中的/home/ixdba目录共享;“/mnt/nfs”指定在本机Linux系统上的挂载点。

1.功能说明

ifconfig命令用来配置网络或显示当前网络接口状态。它类似于Windows下的ipconfig命令,同时ifconfig命令必须以root用户来执行。其格式如下。

ifconfig [选项] [interface] [inet|up|down|netmask|addr|broadcast]

ifconfig命令的选项及其说明如表4.39所示。

表4.39 ifconfig命令的选项及其说明

选 项

说 明                                                  

-a

显示所有的网络接口信息,包括活动的和非活动的                 

-s 

仅显示每个接口的摘要数据,是有关接口活动性的,每个接口显示一行信息

-v

如果某个网络接口出现错误,将返回错误消息,以帮助发现和处理故障  


2.举例

1)显示目前系统所有网络接口信息,使用以下命令。

[root@centos7 ~]# ifconfig
enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.81.232 netmask 255.255.255.0 broadcast 192.168.81.255
    inet6 fe80::a00:27ff:fe90:55 prefixlen 64 scopeid 0x20<link>
ether 08:00:27:90:00:55 txqueuelen 1000 (Ethernet)
    RX packets 20378 bytes 1845248 (1.7 MiB)
    RX errors 0 dropped 0 overruns 0 frame 0
    TX packets 958 bytes 147065 (143.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 4 bytes 336 (336.0 B)
    RX errors 0 dropped 0 overruns 0 frame 0
    TX packets 4 bytes 336 (336.0 B)
    TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

从上面可以看出以下几点。

第1行:“UP”代表网卡开启状态,“RUNNING”代表网卡上的网线处于连接状态,“MULTICAST”代表支持组播,“MTU:1500”表示最大传输单元为1500字节。

第2行:依次显示网卡的IP地址、子网掩码和广播地址。

第3行:IPv6地址的配置信息。

第4行:ether后面表示硬件网卡的MAC地址。Ethernet表示连接类型为以太网。

第5、6行:显示网卡接收数据包的统计信息和接收错误的统计信息。

第7、8行:显示网卡发送数据包的统计信息和发送错误的统计信息。

2)在网卡enp0s3上配置两个IP地址,分别为192.168.60.136、192.168.66.138,子网掩码为255.255.255.0,使用以下命令。

[root@centos7 ~]#ifconfig enp0s3 192.168.60.136 netmask 255.255.255.0
[root@centos7 ~]#ifconfig enp0s3:0 192.168.66.138 netmask 255.255.255.0

此时用ifconfig命令查看,就可以看到两个网卡的信息了,分别是“enp0s3”和“enp0s3:0”。如果此时还想在enp0s3上增加IP地址,那么网卡的命名依次是“enp0s3:1”、“enp0s3:2”等。

3)修改网卡的MAC地址为新的MAC地址,使用以下命令。

[root@centos7 ~]#ifconfig enp0s3hw ether xx:xx:xx:xx:xx:xx

其中,“xx:xx:xx:xx:xx:xx”为新的MAC地址,此时用ifconfig查看enp0s3的信息,MAC地址已经更改。

4)将网卡enp0s3禁用后再启用,使用以下命令。

[root@centos7 ~]#ifconfig enp0s3 down
[root@centos7 ~]#ifconfig enp0s3 up

注意

 用ifconfig命令配置的网卡信息,在网卡重启或者机器重启后,所有的配置都失效了,如果要让网卡配置永久生效,就需要修改网卡的配置文件了,这将在下面讲述。

1.功能说明

scp就是secure copy,用于将文件或者目录从一个Linux系统复制到另一个Linux系统下。scp传输数据用的是SSH协议,保证了数据传输的安全。其格式如下。

scp 远程用户名@ip地址:文件的绝对路径本地Linux系统路径
scp 本地Linux系统文件路径远程用户名@ip地址:远程系统文件绝对路径名

scp使用第1种格式将远程Linux系统上的某个文件或者目录复制到本地Linux系统上,使用第2种格式是将本地的某个文件或者目录复制到远程Linux系统的某个路径下。

2.举例

1)目前我们处在IP为“192.168.60.133”的Linux系统下,计划将此系统下的/home/ixdba/etc.tar.gz文件复制到IP为“192.168.60.168”的远程Linux系统中root用户下的/tmp目录下,使用下面命令。

[root@centos7 ~]#scp /home/ixdba/etc.tar.gz root@192.168.60.168:/tmp

命令输入完毕,会要求输入“192.168.60.168”服务器root的密码,然后开始远程复制数据。如果目前我们处在“192.168.60.168”服务器上,也可以使用下面的命令传输数据。

[root@centos7 ~]#scp root@192.168.60.133:/home/ixdba/etc.tar.gz /tmp

命令输入完毕,此时会要求输入“192.168.60.133”服务器root的密码,然后开始远程复制数据。

2)将本地/etc目录中所有文件和子目录复制到IP为“192.168.60.135”的远程Linux系统的root用户下的/opt目录中,使用以下命令。

[root@centos7 ~]#scp –r /etc root@192.168.60.135:/opt

这里的选项“r”与cp命令中的“r”选项含义相同。

1.功能说明

netstat命令用来显示本机网络连接、运行端口和路由表等信息。其格式如下。

netstat [选项]

netstat命令的选项及其说明如表4.40所示。

表4.40 netstat命令的选项及其说明

选 项   

说 明                                                                                

-a     

显示本机所有连接和监听端口                                                              

-n     

以网络IP地址的形式显示当前建立的有效连接和端口                                              

-r     

显示路由表信息                                                                        

-s     

显示按协议的统计信息。默认情况下,将显示IP、IPv6、ICMP、ICMPv6、TCP、TCPv6、UDP和UDPv6的统计信息

-v     

显示当前的有效连接,与“-n”选项类似                                                      

-t     

显示所有的TCP协议连接情况                                                               

-u     

显示所有的UDP协议连接情况                                                              

-c<秒数>

后面跟的秒数,表示每隔几秒就刷新显示一次                                                   

-i      

显示自动配置接口的状态                                                                  

-l      

仅显示连接状态为“LISTEN”的服务的网络状态                                                

-p     

显示连接对应的PID与程序名                                                               

2.举例

1)显示当前系统的路由信息。

[root@centos7 ~]# netstat -rn
Kernel IP routing table
Destination   Gateway     Genmask     Flags  MSS Window irtt Iface
0.0.0.0     192.168.81.250 0.0.0.0     UG    0 0     0 enp0s3
169.254.0.0   0.0.0.0     255.255.0.0   U     0 0     0 enp0s3
192.168.81.0  0.0.0.0     255.255.255.0  U     0 0     0 enp0s3

从上面可以看出,当前系统的默认网关是“192.168.81.250”,而对应的网络接口为enp0s3。

2)显示当前系统中所有有效的TCP连接,使用以下命令。

[root@centos7 ~]#netstat -an
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address      Foreign Address     State   
tcp    0   0 0.0.0.0:22       0.0.0.0:*        LISTEN   
tcp    0   0 127.0.0.1:631      0.0.0.0:*        LISTEN   
tcp    0   0 127.0.0.1:25      0.0.0.0:*        LISTEN   
tcp    0   52 192.168.81.232:22    192.168.81.30:65409   ESTABLISHED
tcp    0   0 192.168.81.232:22    192.168.81.30:64394   ESTABLISHED
tcp6    0   0 :::80          :::*          LISTEN   
tcp6    0   0 :::22          :::*          LISTEN   
tcp6    0   0 ::1:631         :::*          LISTEN   
tcp6    0   0 ::1:25         :::*          LISTEN   
udp    0   0 0.0.0.0:123       0.0.0.0:*             
udp    0   0 127.0.0.1:323      0.0.0.0:*             
udp    0   0 0.0.0.0:46122      0.0.0.0:*             
udp    0   0 0.0.0.0:5353      0.0.0.0:*             
udp6    0   0 :::123         :::*                
udp6    0   0 ::1:323         :::*
……以下省略……

在上面的显示中,可以看出netstat的输出分为两部分,分别是TCP/IP网络部分和UNIX Socket部分,我们先来看看输出的组成部分。

3)显示目前系统中已经启动的网络连接和对应的端口信息,使用如图4.9所示命令。

图4.9 查询系统中启动的网络连接和对应的端口

从图4.9的输出可以看出,系统中对外开放了80、22和23端口。为什么这么说呢?因为这些端口都是针对“0.0.0.0”开放的,而25、631端口仅仅针对内部127.0.0.1开放。最后一列显示了每个端口对应的服务名(Program name)和进程ID(PVD),可以很方便地知道每个端口的用途。

4)查看当前系统上处于连接状态的资源信息,可以使用如图4.10所示命令。

图4.10 查看系统上处于连接状态的资源信息

从上面的输出看出,有四个线路处于连接状态,分别是远程主机192.168.81.30启动的大于1024的两个端口65409、64394向本地主机192.168.81.232的22端口建立的连接,以及远程主机192.168.81.30启动的大于1024的两个端口49837、49848向本地主机192.168.81.232的23端口建立的连接。

1.功能说明

traceroute命令用来显示网络数据包传输到指定主机的路径信息,追踪数据传输路由状况。预设数据包大小是38字节,用户可另行设置。它与Windows下的tracert命令类似,其格式如下。

traceroute [选项] [远程主机名或者IP地址] [数据包大小]

traceroute命令的选项及其说明如表4.41所示。

表4.41 traceroute命令的选项及其说明

选 项       

说 明                      

-i <网络接口> 

使用指定的网络接口发送数据包   

-n         

直接使用IP地址而不使用主机名   

-v         

详细显示命令的执行过程        

-w<超时秒数>

设置等待远程主机回应的时间    

-x         

开启或者关闭对数据包的正确性检验 

-s<来源ip> 

设置本地主机发送数据包的IP地址 

-g<网关地址>

设置来源的路由网关,最多可设置8个

2.举例

跟踪从本机到网站www.ixdba.net的数据包发送过程,使用以下命令。

[root@localhost ~]# traceroute -i eth0 -s 192.168.60.251 -w 10 www.ixdba.net 100
traceroute to www.ixdba.net (221.130.192.57) from 192.168.60.251, 30 hops max, 100 byte 
packets
1 192.168.60.3 (192.168.60.3) 0.378 ms 0.564 ms 0.357 ms
2 192.168.1.10 (192.168.1.10) 0.494 ms 0.458 ms 0.377 ms
3 222.90.66.1 (222.90.66.1) 2.199 ms 4.531 ms 6.884 ms
4 61.185.192.101 (61.185.192.101) 8.946 ms 6.319 ms 7.726 ms
5 117.36.120.25 (117.36.120.25) 9.997 ms 23.021 ms 24.337 ms
6 61.150.3.165 (61.150.3.165) 27.591 ms 6.703 ms 11.928 ms
7 125.76.189.81 (125.76.189.81) 8.927 ms 4.388 ms 2.726 ms
8 61.134.0.9 (61.134.0.9) 5.731 ms 3.653 ms 3.667 ms
9 202.97.37.173 (202.97.37.173) 5.908 ms 3.874 ms 4.553 ms
10 202.97.37.182 (202.97.37.182) 2.568 ms 13.896 ms 14.722 ms
11 202.97.37.90 (202.97.37.90) 16.284 ms 26.148 ms 2.946 ms
12 202.97.36.161 (202.97.36.161) 49.285 ms 62.249 ms 55.451 ms
13 202.97.44.58 (202.97.44.58) 56.949 ms 56.292 ms 62.229 ms
14 202.97.15.226 (202.97.15.226) 142.705 ms 139.009 ms 150.365 ms
15 211.136.2.249 (211.136.2.249) 136.982 ms 156.440 ms 153.176 ms
16 211.136.6.22 (211.136.6.22) 136.463 ms 152.606 ms 150.101 ms
17 211.136.188.182 (211.136.188.182) 100.163 ms 128.552 ms 103.801 ms
18 221.130.192.57 (221.130.192.57) 149.583 ms

上面指定eth0网络接口发送数据包,同时指定本地发送数据包的IP为192.168.60.251,并设置超时时间为10秒,最后设置发送数据包的大小为100字节。根据输出可以看到,从本机到www.ixdba.net对应的IP地址经历了18个路由的迂回。

traceroute命令会对这18个路由节点做ICMP的回应时间测试,每个路由节点做3次时间测试,如上面显示,基本上每个路由节点的回应时间都在100秒内,只有在第15个路由节点,回应时间稍长。通过这种网络跟踪,可以测试数据传输在哪个部分出现问题,以便及时解决。

如果在指定的时间内(这里设置的是10秒),traceroute检测不到某个路由节点的回应信息,就在屏幕输出“*”,表示此节点无法通过。由于traceroute是利用ICMP连接的,有些网络设备(如防火墙)可能会屏蔽ICMP通过的权限,因此也会出现节点没有回应的状态,这些都是我们分析网络问题需要知道的。

1.功能说明

telnet命令通过telnet协议与远程主机通信或者获取远程主机对应端口的信息。它与Windows下的telnet具有相同的功能。其格式如下。

telnet 主机名或者IP地址端口

2.举例

1)要通过telnet协议登录到开启了telnet服务的远程主机上,使用以下命令。

[root@localhost ~]# telnet192.168.60.12323
Trying 192.168.60.123...
Connected to 192.168.60.123.
Escape character is '^]'.
 
Kernel 3.10.0-229.el7.x86_64 on an x86_64
centos7 login: ixdba
Password:

当输入用户名ixdba和密码后就登录到了“192.168.60.123”服务器,这里直接用“telnet 192.168.60.123”也是可以的,因为telnet默认寻找的就是“23”端口。

[root@localhost ~]# telnet192.168.60.12325
Trying 192.168.60.123...
telnet: connect to address 192.168.60.123: Connection refused

如果出现这个问题,就表示这个端口对应的服务没有开启,或者端口被屏蔽,无权访问。

2)要查看某台Linux系统的22和80端口是否打开以及分别开启了什么服务,使用以下命令。

[root@localhost ~]# telnet 192.168.60.88 22
Trying 192.168.60.88...
Connected to 192.168.60.88.
Escape character is '^]'.
SSH-2.0-OpenSSH_6.6.1
 
Protocol mismatch.
Connection closed by foreign host.

从这里可以看出,在“192.168.60.88”的22端口运行着SSH服务,对应的SSH版本为SSH-2.0-OpenSSH_6.6.1。

[root@localhost ~]# telnet www.ixdba.net 80
Trying 221.130.192.57...
Connected to www.ixdba.net (221.130.192.57).
Escape character is '^]'.
get
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>501 Method Not Implemented</title>
</head><body>
<h1>Method Not Implemented</h1>
<p>get to /index.html not supported.<br />
</p>
<hr>
<address>Apache/2.2.4 (Unix) PHP/5.2.3 mod_fastcgi/2.4.2 Resin/3.1.3 Server at 
www.ixdba.net Port 80</address>
</body></html>
Connection closed by foreign host.

当输入“telnet www.ixdba.net 80”之后,如果“www.ixdba.net”对应IP的80端口开启,就会给出欢迎信息,类似于“Escape character is '^]'”。此时通过键盘输入“get”命令,将显示80端口对应的应用服务器类型,例如本例的80端口对应的应用服务为Apache与PHP以及resin的组合。

1.功能说明

wget命令用来从网络上下载某个软件,这个命令对于能够连接到互联网的Linux系统作用非常大,可以直接从网络下载自己需要的软件。其格式如下。

wget [要下载软件的网址]

2.举例

下载一个linux-4.0.2版本内核,可以使用以下命令。

[root@localhost~]#wget \
>https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.0.2.tar.xz
-- 17:42:05-- https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.0.2.tar.xz
Resolving www.kernel.org (www.kernel.org)... 199.204.44.194, 198.145.20.140,149.20.4.69,...
Connecting to www.kernel.org (www.kernel.org)|199.204.44.194|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 82306532 (78M) [application/x-xz]
Saving to: 'linux-4.0.2.tar.xz'
 
10% [========>     ] 8,781,616  104KB/s eta 7m 35s 2

vi是Linux下标准的文本编辑程序,也是Linux系统命令行下最经常使用的文本文件可视化编辑器,类似于DOS命令edit。那么什么是可视化呢?其实就是让用户在编辑文本文件的时候能够看到它们。这听起来似乎很普通,但是在命令行的字符界面下,可视化编辑确实起了很大的作用。

vi是Linux下默认的编辑器,几乎所有的Linux/UNIX系统都捆绑了vi。这表示只要你学会了vi这个编辑工具,就可以在任何Linux/UNIX系统上使用它,而且vi程序非常小,只有几百千字节大小。因此,只要熟练了vi操作,你可以做任何想做的事情。

vi编辑程序有两种工作模式,即命令模式和文本输入模式。在命令模式下,输入的字符被解释为vi命令,就是这些命令组合形成了vi的强大功能,通过vi命令可以转换到文本输入模式;在文本输入模式下,输入的字符作为正在编辑的文件的正文内容来接受,如果按Esc键则切换到vi命令模式。

下面通过分类的方式,逐个介绍vi的一系列命令的含义和用法。

1)Linux命令行下用vi打开文件的命令选项,其详细说明如表4.42所示。

表4.42 用vi打开文件的命令选项及说明

vi使用的选项        

说 明                                  

vi filename         

打开或者新建一个文件,并将光标置于第一行的首部 

vi –r filename       

恢复上次vi打开时崩溃的文件                

vi –R filename       

把指定的文件以只读方式放入编辑器中         

vi + filename       

打开文件并将光标置于最后一行的首部         

vi +n filename      

打开文件,并将光标置于第n行的首部          

vi +/pattern filename 

打开文件,并将光标置于第一个与pattern匹配的位置

vi –c command filename

在对文件进行编辑前,先执行指定的命令       

2)vi命令模式下的命令选项,主要分为移动光标类命令、屏幕翻滚类命令、插入与删除文本类命令、搜索与替换类命令以及保存与退出类命令。这些分别在下面依次说明。

移动光标类命令及其说明如表4.43所示。

表4.43 移动光标类命令及其说明

按的键或者输入的字符

说 明                                

h              

光标左移一个字符                       

l               

光标右移一个字符                       

Backspace键     

光标左移一个字符                       

k或Ctrl+p       

光标上移一个字符                       

j或Ctrl+n        

光标下移一个字符                       

Enter键         

光标下移一行                          

w或W          

光标右移一个字到字首                   

b或B           

光标左移一个字到字首                   

e或E           

光标右移一个字到字尾                   

nG             

光标移动到第n行首部                    

n+             

光标下移n行                           

n-             

光标上移n行                           

n$             

相对于当前光标所在行,光标再向后移动n行到行尾

H              

光标移至当前屏幕的顶行                  

M             

光标移至当前屏幕的中间行                

L              

光标移至当前屏幕的最底行                

0              

将光标移至当前行首                     

$              

将光标移至当前行尾                     

:$              

将光标移动到文件最后一行的行首           

屏幕翻滚类命令及其说明如表4.44所示。

表4.44 屏幕翻滚类命令及其说明

按的键或输入的字符

说 明                                               

Ctrl+u        

相对于当前屏幕,向文件首翻半屏                         

Ctrl+d        

相对于当前屏幕,向文件尾翻半屏                         

Ctrl+b        

相对于当前屏幕,向文件首翻一屏                         

Ctrl+f         

相对于当前屏幕,向文件尾翻一屏                         

nz+Enter      

将文件的第n行滚至屏幕顶部,如果不指定n值,将当前行滚至屏幕顶部

插入与删除文本类命令及其说明如表4.45所示。

表4.45 插入与删除文本类命令及其说明

按的键或输入的字符

说 明                                                      

Esc           

返回命令行模式                                              

i             

在光标前输入文字                                            

a            

在光标后输入文字                                            

o            

在当前行之下新开一行                                         

O            

在当前行之上新开一行                                         

r             

替换光标所在字符,输入r命令后,在键盘上输入需要替换的新字符即可完成替换

x            

删除光标所在的字符                                          

dd           

删除光标所在的行。删除后的内容自动保存在剪贴板                   

yy            

将光标所在的行复制到剪贴板,如果在“yy”前加上数字,可复制多行     

p            

将剪贴板的内容复制到光标后                                    

P            

将剪贴板的内容复制到光标前                                    

yw           

将光标所在的单词复制到剪贴板                                  

搜索及替换类命令及其说明如表4.46所示。

表4.46 搜索及替换类命令及其说明

按的键或输入的字符

说 明                         

/abc          

在文件中向前查找字符串abc        

?abc          

在文件中向后查找字符串abc        

n            

在同一方向重复上次的搜索命令     

N            

在相反方向重复上次的搜索命令     

:s/a1/a2/g     

将当前光标所在行中的所有a1均用a2替换

:n1,n2s/a1/a2/g 

将文件第n1至n2行中所有a1均用a2替换 

:g/a1/a2/g     

将文件中所有的a1均用a2替换       

:set nu        

给文件的每行加上行号            

保存与退出类命令及其说明如表4.47所示。

表4.47 保存与退出类命令及其说明

按的键或输入的字符

说 明                                                                                   

:wq           

保存并退出vi编辑器,“:wq!”表示不保存,强制退出                                               

:q            

不保存就退出vi编辑器,“:q!”表示不保存,强制退出                                              

:w            

保存但是不退出vi编辑器,“:w!”表示强制保存,“:w filename”表示将修改保存到“filename”中。相当于另存文件

x!            

保存文件,退出vi编辑器,更通用的一个vi命令                                                    


相关图书

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

相关文章

相关课程