第01章 Linux概述及系统环境搭建
目标:
◆ 知道 Linux 是什么?有什么特点?
◆ 知道 Linux 内核及发行版的区别
◆ 知道 Linux 的应用领域
◆ 能够在虚拟机软件上新建虚拟机
◆ 能够在虚拟机中挂载CentOS6.7光盘镜像
◆ 能够根据需求安装CentOS6.7的操作系统
◆ 能够对系统进行登录和关闭
1.1 计算机资源介绍
计算机资源分为2部分:硬件资源、软件资源
硬件:一般硬件是指计算机的物理组成,由真实(看得见,摸得着)的设备组成的。
软件:软件一般是指应用程序,应用程序是由开发人员去按照编程语言的特定的规则去编写的程序。除了上述的应用程序之外,操作系统也属于软件资源的范畴,它属特殊的软件。
用户空间和内核空间是程序执行的两种不同状态
(1)用户空间:用户空间中又包含了,用户的应用程序,C库;
(2)内核空间:内核空间包括,系统调用,内核,以及与平台架构相关的代码。
内核空间(Ring 0)拥有最高权限,可以直接访问所有资源;用户空间(Ring 3)只能访问受限资源,不能直接访问内存等硬件设备。它必须通过系统调用被陷入(trapped)内核中才能访问这些特权资源。也就是说我们可以通过“系统调用”和“硬件中断“来完成用户空间到内核空间的转移。
从另一个角度看,一个进程既可以在用户空间也可以在内核空间运行。当一个进程在用户空间运行时,称为该进程的用户态,当它落入内核空间时,称为该进程的内核态。
1.2 操作系统简介
1.2.1 什么是操作系统(Operation System,OS)
简单说:计算机操作系统用于管理计算机硬件资源和软件资源的一套软件系统。
操作系统作为接口的示意图
没有安装操作系统的计算机,通常被称为 裸机
- 如果想在 裸机 上运行自己所编写的程序,就必须用机器语言书写程序
- 如果计算机上安装了操作系统,就可以在操作系统上安装支持的高级语言环境,用高级语言开发程序
因此,操作系统是现代计算机系统中 最基本和最重要 的系统软件;是配置在计算机硬件上的第一层软件,是对硬件系统的首次扩展;主要作用是管理好硬件设备,并为用户和应用程序提供一个简单的接口,以便于使用;而其他的诸如编译程序、数据库管理系统,以及大量的应用软件,都直接依赖于操作系统的支持。
1.2.2 操作系统的作用
操作系统会控制其他程序运行,管理系统资源,提供最基本的计算功能,如管理及配置内存、决定系统资源供需的优先次序等,同时还提供一些基本的服务程序,例如:
1) 文件系统
提供计算机存储信息的结构,信息存储在文件中,文件主要存储在计算机的内部硬盘里,在目录的分层结构中组织文件。文件系统为操作系统提供了组织管理数据的方式。
2) 设备驱动程序
提供连接计算机的每个硬件设备的接口,设备驱动器使程序能够写入设备,而不需要了解执行每个硬件的细节。
3) 用户接口
操作系统需要为用户提供一种运行程序和访问文件系统的方法。如常用的 Windows 图形界面,可以理解为一种用户与操作系统交互的方式;智能手机的 Android 或 iOS 系统,也是一种操作系统的交互方式。
4) 系统服务程序
当计算机启动时,会自启动许多系统服务程序,执行安装文件系统、启动网络服务、运行预定任务等操作。
1.2.3 不同应用领域的主流操作系统
常见操作系统有:Windows、MacOS、Linux。根据不同的应用领域,操作系统分为桌面操作系统、服务器操作系统、嵌入式操作系统和移动设备操作系统。
Windows:其是微软公司研发的收费操作系统(闭源)
Windows系统分为两类:用户(个人)操作系统、服务器(企业)操作系统
- 个人操作系统:win 95、win 98、win NT、win Me、win xp、vista、win7、win8、win10
- 服务器操作系统:windows server 2003/2008/2012/2016
MacOS:其是由苹果公司开发的一款收费(变相收费,买电脑送系统)操作系统。该系统从终端角度来看分为:watch OS、iOS、MacOS,其表现突出的地方:底层优化实现的很好。MacOS 属于桌面操作系统,iOS属于移动设备操作系统。
Linux:Linux 是目前全球使用量最多的服务器操作系统(开源)
其体系很强大,其分支有很多(数不胜数),其目前主要的分支有:RedHat(红帽)、Debian、乌班图(ubuntu)、CentOS等等。其在世界范围最大的使用分支是安卓。安卓属于移动设备操作系统。
1.3 Linux简单介绍
1.3.1 Linux发展史
1965 年,美国麻省理工学院( MIT )、通用电气公司( GE )及 AT&T 的贝尔实验室联合开发 Multi cs 工程计划,其目标是开发一种交互式的具有多道程序处理能力的分时操作系统,以取代当时广泛使用的批处理操作系统。但因 Multics 追求的目标过于庞大复杂,项目进度远远落后于计划,最后贝尔实验室宣布退出。
1969 年,美国贝尔实验室的肯•汤普森等人员吸取了 Multics 工程计划失败的经验教训,实现了一种分时操作系统的雏形,1970 年该系统正式取名为 UNIX;
1971年,肯•汤普森的同事丹尼斯•里奇发明了 C 语言; 1973 年, UNIX 系统的绝大部分源代码用 C 语言重写,这为提高 UNIX 系统的可移植性打下基础;
1984年,Andrew S.Tanenbaum 开发了用于教学的unix系统,命名为Minix,但是仅仅用于教学,1989年,Andrew S.Tanenbaum将Minix系统运行于x86的pc平台;
1990年,芬兰赫尔辛基大学学生linux Torvalds首次接触Minix系统
1991年,linux Torvalds开始在Minix上编写各种驱动程序等操作系统内核组件,同年底,linux Torvalds公开了linux内核源码0.02版;
1993年,linux 1.0版本发行,linux转向GPL版权协议,开始盛行开来……
Linux是自由软件,源代码开放的类UNIX系统,由芬兰大学生李纳斯( Linus Torvalds )和后来陆续加入的众多爱好者共同开发完成。
1.3.2 Linux内核及发行版
(1)Linux 内核版本
内核(kernel)是系统的心脏,是运行程序和管理像磁盘和打印机等硬件设备的核心程序,它提供了一个在裸设备与应用程序间的抽象层。
Linux 内核版本又分为 稳定版 和 开发版,两种版本是相互关联,相互循环
稳定版:具有工业级强度,可以广泛地应用和部署。新的稳定版相对于较旧的只是修正一些 bug 或加入一些新的驱动程序
开发版:由于要试验各种解决方案,所以变化很快
内核源码网址:http://www.kernel.org
所有来自全世界的对 Linux 源码的修改最终都会汇总到这个网站,由 Linus 领导的开源社区对其进行甄别和修改最终决定是否进入到 Linux 主线内核源码中
(2)Linux 发行版本
Linux发行版(也被叫做 GNU/Linux 发行版)指的就是通常所说的“Linux操作系统”,它可能是由一个组织,公司或者个人发布的。
通常来讲,一个Linux发行版包括Linux内核,各种GNU软件,及其他的一些自由软件。在一些特定的Linux发行版中也有一些专有软件。
发行版为许多不同的目的而制作,包括对不同计算机硬件结构的支持,对一个具体区域或语言的本地化,实时应用和嵌入式系统。目前,有数百个Linux发行版。被广泛应用的发行版有:
(1)Red Hat Enterprise Linux
RHEL是Red Hat(红帽)公司的企业版Linux系统,因其稳定强大,各大厂商认证和良好的技术支持,在Linux服务器上市场占领超过50%份额。采用RPM的包管理方式,很多发行版都或多或少的受到它的影响。
(2)CentOS
由社区开发并维护,基于RHEL,并与RHEL版本号保持一致。致力于提供一个自由使用且稳定的RHEL。开发者直接修改RHEL的源代码,去除了红帽的商标和商业服务组件,修复了很多存在的Bug。其拥有自己的软件仓库,提供免费的在线更新程序。
(3)Fedora
主要由RedHat主持的社区Linux项目,采用同样的RPM包管理,致力于最新技术的开发和引入。经过测试稳定且有价值的技术将被RHEL吸纳。坚持每半年发布一个版本。
(4)SUSE Linux
在欧洲非常流行的Linux发行版,以界面华丽和简单易用著称。2004年被NOVELL收购。NOVELL提供企业级的SUSE Linux Enterprise Server|Desktop软件和商业技术支持服务,企业市场占有率较高。OpenSUSE是基于企业版的社区提供的免费SUSE Linux。
(5)Debian
Debian是完全开放,一个强烈信奉自由软件的系统,由Debian计划组织维护,其背后没有任何营利组织的支持,开发人员完全来自于全世界各地的志愿者。Debian基于Deb的包管理方式,apt的在线软件安装更新非常方便且快速。提供超过18000个软件包的支持,受到研究机构开发人员的极大欢迎。
(6)Ubuntu
基于Debian开发,采用相同的deb和apt。通过精挑细选,保证软件质量,致力于开发一个简单易用的Linux系统。由Canonical支持,坚持每6个月发布一个版本,分别提供6个月和3年(LTS)的技术支持。由于其易用性和遍布世界各地的镜像源服务器,使得它近年来变得非常流行。
(7)其他Linux发行版
Arch Linux,一个基于KISS(Keep It Simple and Stupid)的滚动更新的操作系统。
Gentoo,一个面向高级用户的发行版,所有软件的源代码需要自行编译。
Elementary OS:基于Ubuntu,界面酷似Mac OS X。
Linux Mint,从Ubuntu派生并与Ubuntu兼容的系统。
1.3.3 Linux特性
(1)完全开源
使用Linux,包括对它的拷贝,修改,再发布,在遵循GPL的协议下,你不会有任何版权问题的担心,对于企业部署可以极大的降低成本。而正因为Linux平台不会依赖于任何一家私有软件公司,所有各大软硬件厂商都支持并发展Linux,如REDHAT,IBM,DELL,ORACLE,VMWARE,GOOGLE,INTEL等。
(2)多用户多任务系统
Linux继承了UNIX多用户多任务的设计理念,允许多人同时上线工作,并合理分配资源。
(3)安全高效稳定
严格的用户权限管理使得不同的使用者之间保持高度的保密性和安全性。Linux得到来自各大软硬件厂商的支持,特别是企业级应用。
(4)支持多种硬件平台
Linux是一种UNIX Like 操作系统,它遵循POSIX标准,运行在UNIX下的软件很容易移植到Linux下,这使得Linux立刻拥有了大量优秀的软件。
1.3.4 开源文化
自由软件基金会(Free Software Foundation,FSF)是一个致力于推广自由软件、促进计算机用户自由的美国民间非盈利性组织。它于1985年10月由理查德·斯托曼建立。其主要工作是执行GNU计划开发更多的自由软件,完善自由软件理念。
(1)什么是GNU?
GNU是在1983年由理查德·马修·斯托曼提出的一个项目计划,目标是提供一个和Unix100%兼容的操作系统。这个系统的名字叫GNU,是GNU's Not Unix的首字母递归缩写——这是对Unix的技术思想致敬的一种方法,同时表达GNU有所不同。从技术上说,GNU很像Unix。但是它不同于Unix,GNU给予其用户自由。
(2)什么是GPL协议?
GPL(General Public License)协议是指GNU通用公共许可证。任何软件发布,都需要许可证,GNU 认为任何软件都应当以自由软件发布。要让一个软件成为自由软件,就需要把它以自由软件许可证发布。我们通常使用GNU通用公共许可证(GNU GPL)发布软件。
简单地说,GPL授权具有以下几个特点:
① 任何软件挂上GPL授权之后,即为自由的软件,任何人均可获取,同时,亦可取得其源代码;
② 取得GPL授权的软件后,任何人均可修改源代码,以使其符合自己的喜好;
③ 除此之外,经过修改的源代码应回报给网络社会,供大家参考!
注意:并非挂上GPL之后的软件就不可贩卖,这是不同的两回事!
(3)GNU和Linux是怎么结合在一起的?
1991年,林纳斯·托瓦兹编写出了与UNIX兼容的Linux操作系统内核并以GPL授权发布。Linux之后在网上广泛流传,许多程序员参与了开发与修改。
1992年,Linux与其他GNU软件结合,完全自由的操作系统正式诞生。该操作系统往往被称为“GNU/Linux”或简称Linux。
1.3.5 总结
(1)Linux是什么?
严格来说,Linux只是一个操作系统内核。大多数Linux发行版是由操作系统内核加上GNU的软件或工具形成完整的操作系统,也就是GNU/Linux。GNU/Linux是一种Unix Like操作系统。
(2)广泛使用的Linux发行版有哪些?
常见的Linux发型版本:Red Hat Enterprise Linux、CentOS、Ubuntu、SUSE Linux等。
(3)Linux有哪些特点?
完全开源
支持多种硬件平台
多用户多任务
安全高效稳定
(4)扩展阅读
GNU相关介绍:http://www.gnu.org/
Centos官网:https://www.centos.org/
Linux内核官网:https://www.kernel.org/
主流Linux桌面版简介:主流Linux桌面版简介 - 简书
1.4 学习环境介绍
1.4.1 虚拟机概述
(1)什么是虚拟机软件?
虚拟机软件,有些时候想模拟出一个真实的电脑环境,碍于使用真机安装代价太大,因此而诞生的一款可以模拟出虚拟计算机并运行操作系统的软件。
虚拟机软件目前有2个比较有名的产品:vmware 出品的vmware workstation、oracle 出品的virtual Box。VMware 有两个版本,分别是 VMware Workstation Pro 和 VMware Workstation Player。
- Player 是免费版本,只能用于非商业用途,适合个人学习。
- Pro 是商业版本,功能最强大,付费以后才能使用。
(2)虚拟机和虚拟机软件什么关系?
虚拟机是在虚拟机软件下面模拟出来的一个计算机(虚拟机)
1.4.2 软件说明
虚拟机软件 版本 大小
VMware- Player-12.0.0-2589596.exe 12.0.0 69.5M
操作系统镜像文件 版本 大小
CentOS-6.7-i386-bin-DVD1.iso 6.7 3.62GB
建议大家安装
虚拟机软件 版本 大小
VMware-workstation-full-12.1.0-3272444 12.1.0 300.3M
操作系统镜像文件 版本 大小
CentOS-6.8-x86_64-bin-DVD1 6.8 3.82GB
1.4.3 系统部署需求
(1)由于是测试环境,为了方便学习,安装图形化界面
(2)语言环境配置中文
(3)安装基本的开发工具包
(4)磁盘自动分区即可
1.5 虚拟机中安装CentOS6.7操作系统
1.5.1 思路和步骤
(1)安装VMware- Player-12.0版本(模拟虚拟计算机)
(2)打开VMware Player软件创建虚拟机(模拟出虚拟计算机)
在安装完虚拟机之后需要检查虚拟机软件是否有安装2个虚拟网卡
如果没有这2个网卡的话,则会影响后期windows系统与虚拟机其中操作系统之间的相互通信(比如共享网络、文件传输等)。
(3)在虚拟计算机(虚拟机)安装CentOS6.7操作系统
1)下载CentOS6.7镜像文件
2)将CentOS6.7镜像文件放入到虚拟机的虚拟光驱里
3)开启虚拟机进行系统安装
1.5.2 安装过程
1.下载镜像文件CentOS-6.7-x86_64-bin-DVD1.iso到本地
2. 打开VMware Player,选择创建新虚拟机
3.选择稍后安装操作系统,下一步
4. 选择操作系统和版本
5. 输入虚拟机名称和安装路径
6. 设置磁盘大小
7.完成
8.回到首页可以看到已经创建好的虚拟机,由于还没有配置系统镜像,要编辑虚拟机设置
9.点击CD/DVD(IDE),选择使用ISO映像文件,浏览,选择之前下载好的CentOS-6.7-x86_64-bin-DVD1.iso文件,确定
10.回到首页,播放虚拟机
11. 选择第一项,安装全新操作系统或升级现有操作系统
12. 下载并安装
13. Tab键进行选择,选择Skip,退出检测
14. 点击Next
15. 选择安装语言:中文(简体),Next
16. 选择美国英语式键盘,下一步
17.选择基本存储设备,下一步
18.是,忽略所有数据,下一步
19.定主机名:localhost,然后配置网络
20.选中System eth0,编辑
21.勾选自动连接,应用
22. 设置时区,勾选使用UTC时间
23. 输入根用户(root)的密码(ps:密码不得少于6位,如果密码过于简单会出现提示,点击无论如何都使用)
24. 选择使用所有空间
25.将修改写入磁盘,下一步
26.安装开发工具软件,下一步
27.开始安装
28. 安装完成,重新引导
29. 看到欢迎界面,安装继续
30.同意许可证协议,继续
31.创建用户
32. 如果密码过于简单会出现提示,点击无论如何都使用
33.设置时间和日期
34.不启用Kdump
35.系统更新重新启动,完成
1.6 CentOS开发工具安装
1.6.1 软件包分类
(1)软件包分类
软件包分为源码包和二进制包
- 源码包
源码包是开源的,可修改源码,可以自由选择所需的功能,需要编译安装,卸载方便。但安装步骤较多,编译时间较长,因为是编译安装,安装过程中一旦报错新手很难解决。
- 二进制包
指的是已经编译好了的软件包,只需要直接安装就可以使用。需要根据自己的计算机CPU以及操作系统去选择合适的二进制包。二进制包又分为DPKG包和RPM包
- DPKG包:是有Debian Linux开发出来的包管理机制,通过DPKG包,Debian Linux就可以进行软件包管理。主要应用在Debian和ubuntu中。
- RPM包:是由Red Hat公司开发的包管理系统。功能强大,安装、升级、卸载简单方便。
RPM包的缺点:经过编译,看不到源代码,功能选择步入源码包灵活,软件包安装具有依赖性(安装软件包a时需要先安装软件包b和c,而安装b时又需要安装软件包d和e。这时需要先安装d和e,再安装b和c,最后才能安装软件包a)。
(2)二进制包的命名
- 包全名:如果操作的是未安装软件包,则使用包全名,而且需要注意绝对路径
- 包名:如果操作的是已经安装的软件包,则使用包名即可,系统会生成RPM包的数据库(/var/lib/rpm),而且可以在任意路径下操作。
1.6.2 RPM包的安装
(1)RPM包手工安装
1)安装命令
2)服务启动
3)卸载
(2)RPM包在线安装(YUM安装)
YUM安装必须确保有YUM源,YUM源可以是本地YUM源,也可以是网上YUM源。
CentOS系统默认采用YUM(Yellow dog Updater,Modified)的方式进行软件包管理。YUM软件包管理方式是基于RPM软件包的,能够从指定的服务器自动下载RPM包进行安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无需一次次地下载安装。
1)查询yun源服务器中是否包含某个软件包
2)安装
3)卸载
特别强调:除非你确定卸载的软件的依赖包不会对系统产生影响,否则不要执行yum的卸载,因为很有可能在卸载软件包的同时卸载的依赖包也是重要的系统文件,这就有可能导致系统崩溃。卸载命令如下:
1.6.3 GCC程序编译器
(1) GCC-C语言编译器(gcc)符合最新的C语言标准-ANSI C,可以在多种硬件平台上编译执行程序,与一般的编译器相比,其执行效率平均高出20%~30%。GCC-C++语言编译器(g++)也可用于编译C程序,但实际上还是调用了底层的GCC-C语言编译器,只不过加上了一些命令行参数使它能够识别C++源代码。
(2)GCC安装
(3) GNU编译器gcc可以完成程序的预处理、编译、汇编和连接四个步骤。
预处理(gcc hello.c -E -o hello.i 调用预处理器cpp,源程序->文件.i);
编译(gcc hello.c -S -o hello.s 调用编译器cc1,源程序->汇编文件.s);
汇编(gcc hello.c -c -o hello.o 调用汇编器as,源程序->目标文件.o);
链接(gcc hello.c -o hello 调用链接器ld,源程序->可执行文件elf)。
1.6.4 GDB程序调试器
(1) GDB作为GNU开源组织发布的UNIX/Linux平台下的程序调试器,能够调试C、C++、Objective-C等多种语言编写的程序。
(2)GDB安装
(3) GDB调试的目的是让调试者知道:程序在执行时内部发生了什么,或者运行过程中在做什么。一般来说,GDB主要帮助实现以下四个方面的功能:启动程序,可以按照程序员自定义的要求来运行;让被调试的程序在设置的断点处停住;检查当程序被停住时所发生的事;动态地改变程序的执行环境。
(4) 在命令行上输入命令gdb就可以启动GDB,一旦启动完毕,就可以接受用户从键盘输入的命令并完成相应的任务。若想退出GDB,只需在其工作环境中输入命令quit即可。
1.7 系统登录与关闭
1.7.1 系统登录
(1)登录界面
(2)root用户登录,输入用户名
(3)输入密码
(4)普通用户输入密码
(5)登录系统后的用户界面
1.7.2 关机和重启系统命令
对于服务器来讲,关机和重启操作只有管理员可以执行!
(1)关机命令
shutdown -h now 立刻马上关机
shutdown -h 60 60分钟(1个小时)后关闭
说明:如果取消在另一终端使用shutdown -c 或者直接ctrl+c
(2)重启命令
reboot 重启系统
shutdown -r now 立刻马上重启
shutdown -r 30 30分钟后重启系统