Linux学习
学自尚硅谷武晟然老师,结合老师课堂内容和自己笔记所写博文。
基础篇
桌面与终端
进入黑屏shell终端:Ctrl + Alt + F2-F6(可以打开多个且不一样)
呼唤鼠标:Ctrl + Alt
退出黑屏shell终端:Ctrl + Alt + F1
# root 超级用户
# develop 主机名
# ~ 主文件夹
# # 执行命令的提示(root) 普通用户是 $
文件系统
一、文件系统和挂载点
思考
我们现在对Linux的基本操作有所了解了,但是我们会想,我们学习Linux是想对系统有所了解,但现在我们能看到的东西好像太少了。在这个主文件夹里面,我们看到就这么几个文件和目录,而且我们还知道都是用户相关的数据和文件,那显然一开始里边什么都没有。那我们想学习的操作系统,它的内容到底在哪儿呢?我们到哪里去找呢?
回答: 如果在图形化界面里的话,我们可以到位置下边,点开看到有一个计算机,点击之后就会出现当前电脑上系统里边的所有目录、所有文件了。因为我们现在是超级管理员(root用户),所以什么都能看到,这里面显然就复杂多了。
Linux的文件系统及整个目录结构的设置
Linux里边这些目录叫什么名都是有原因、有标准的,所以Linux发行版本可能五花八门,但是它的目录结构基本都一样,这也是Linux比较有特点的一个地方。之前在安装CentOS的时候就已经知道,Linux对文件的管理其实就是一个单一的树状目录结构。也就是说,如果我们把所有文件、文件夹的组织关系都统一列出来的话,我们发现画出来就是一棵树。在Windows里,因为有不同的盘符,则一个盘符对应一棵树,画出来就是森林。
根目录: 在Linux里面,这颗目录树只有一个树根,也就是一个斜杠/,我们把它叫做Linux的根目录。我们当时在做硬盘分区的时候,这个根目录对应的就是根分区了。Linux里边的所有文件都会分门别类的按照不同的文件夹放在根目录下边,对应的相当于就叉出了很多个不同的树枝,每一个树枝对应着一个文件夹。这样层层嵌套,当前的整个目录结构就构成了一个层级式的目录结构,也就对应着一层一层树的展开。
# 路径表述: 在Linux系统里边,整个路径的表述是以斜杠/来进行划分的。这跟Windows里面不一样,
Windows里面的路径是以反斜杠\来划分的。Windows的路径其实是有问题的,因为在底层做字符编码的时候啊,
ASCII码中的反斜杠是用来表示转义字符的。所以在Windows里面要表示反斜杠这个字符,
就需要把它再做一个转义,即两个反斜杠。
挂载
①在前面安装CentOS时,我们首先对硬盘要进行了分区,分成了引导区、交换区等区域。
②接着我们要指定当前硬盘分区的文件系统格式,CentOS7默认的是XFS 64位高性能日志文件,它非常特别擅长处理大文件。
③确定了这个文件格式之后还得确定挂载点。
- ----当前Linux把所有的目录结构都放到了根目录下边,根目录正常情况对应着根分区,但是它并不是说下面的所有内容就一定要放在根分区那块硬盘空间里面。假如我们想在不同的分区放不同的内容,那就需要单独去设置挂载点。比如当时我们进行安装CentOS时候,先去划了一块引导分区,我们希望把Linux在启动的过程中核心的一些引导文件放到这个单独的分区里边来。我们就把它的文件格式先设置好之后,命名为分区一(引导分区),然后直接挂载到boot目录下面去,这样的话就跟后面的内容全部都隔离开了。
- ----剩下的最大的这一块我们通通挂载到了根目录下边,就相当于除了boot目录下面的所有内容放在分区一,其他所有内容都会放到分区二,也就是我们所说的根分区这里。
- ----假如说我现在又有新的需求,比方说我有一个新的用户添加进来了,然后这个用户的所有的内容需要放在某个目录下边,我希望把这个目录单独隔离出来,放在一个单独的硬盘上面。于是我们把这一块硬盘先做一个分区,命名为分区三,指定它的文件格式为XFS,然后在home目录下边新建一个对应的要放置我所有文件的这个目录 。我随便举个例子,比方说就叫a,接下来把这个分区三挂载到a这个目录下面。那么接下来这个目录里边的所有东西都会写到我们这一块儿新的硬盘上。
结论: 我们会发现在上述过程当中,Linux里边的目录结构好像跟底层的物理存放没什么关系。并不是说在一个目录下边的文件之间就会离得近一点,不同目录间的文件离得远一点。我们的目录结构其实是一个逻辑上的组织关系,而具体在硬盘上存在哪儿,我们是通过一开始的分区和挂载点就可以配制出他们之间的映射关系了。所以就是我们一次把这个硬件都配好了之后,接下来就不考虑它到底存在哪儿了,只要了解他的这个逻辑结构就可以。所以有时候又会把Linux的这种目录叫做虚拟目录,因为它并不是真正意义上分区文件的一个存放方式。
二、目录结构
根目录结构
我们打开一个终端,当前我们的目录是一个波浪线,它表示的是当前用户的主目录
我们通过cd /直接跳到根目录下面去。cd就是change directory,表示切换路径,Windows里面也有这个命令。接下来用ls命令看一下根目录下边到底有哪些文件夹。
我们可以发现这两种方式都是展示出根目录下的目录结构
bin、sbin
bin
bin其实是binary的前三个字母,也就是二进制码。二进制就相当于是可以直接执行的机器码,所以这个目录里边存放的是机器直接可以执行的常用命令,比如说我们看到这里就有前面执行过的cd命令。
如果往后找,我们还会看到ls命令。
这里有一个小的细节需要注意,bin目录有一个朝外的小箭头。这表示这个bin目录并不是直接放在当前的根目录下边的。实际上它在usr/bin这里,即它指向的是usr目录下的bin目录。我们会发现跟里边的内容完全一样,所以它就像Windows里边的超链接,一个快捷方式一样。
sbin
s是system,所以这是系统级的二进制命令目录,这里边存放的一般是系统管理员(超级用户)能够使用的一些系统管理工具了。我们当前的发行版叫GNU/Linux,这些其实就是GNU这个开源项目给我们直接提供的一些用户级的工具,有些可能是普通用户都可以用的,有些是只有管理员才可以用的。当然了,这个sbin目录下边也有一个箭头,它也链接到usr下边的目录。
lib、lib64
lib
lib就是library的前三个字母,所以这就是一个库目录,主要是用来放系统和应用程序所需要的一些共享库文件,类似于Windows里面的dll(动态链接库文件)。对应的,lib目录可以等同于Windows中C盘下面的system32,在那个目录下边有非常多的dll文件。假如说把其中一些文件删除的话,那有可能系统整个就崩了,就直接启动不起来了。
lib64
lib64下存放的就是64位相关的一些比较特殊的一些库文件。lib64与lib的关系就像Windows里边的system和system32。
lib和lib64也是链接,又链接到usr下面。
usr
usr目录包含了用户所有的应用程序和所需要的文件数据,它包含了bin、sbin、lib、lib64等文件,Linux把所有用户级别的东西全放到这里来了,不同的Linux发行版可能对具体的内容的设置会有所不同。
我们看到这儿有一个user local。local就是本地,存放用户本地的一些应用程序和相关的文件数据。这个local下边还有一个bin和lib目录,代表这里边还会有大量的内容是当前针对这个用户可以去单独执行的一些东西。
boot
boot目录很明显就是之前我们挂载的那个引导分区里边存放的一些东西。这个目录非常的重要,里边是单独划分了一个分区的。我们看他其实并不大,就是引导启动系统时所需要的一些核心文件,包括一些链接文件以及镜像文件。如果我们想要写自己的用户数据的话,千万不要写到这儿来。
dev
dev是device的前三个字母,所以它是一个设备目录,管理我们所有设备的。设备怎么去管理呢?我们可以点进去看一眼,发现真的是把所有的硬件设备映射到不同的目录不同的文件上去,比如我们这里有cpu,硬盘disk、总线bus…
我们进入cpu文件夹,发现这里面又分了01234567共8个文件夹。为什么有八个呢?这是因为我们在一开始做虚拟机配置的时候,分配有两个cpu,每个cpu有四个内核,所以当前的逻辑核心一共是8个。所以每一个对应的核心都有一个目录来进行管理,里边有对应的文件。这也满足Linux中一切皆文件的理念,所有的硬件都能在dev中找到对应的映射。
etc
etc目录主要放置的是一些系统管理所需要的配置文件和对应的一些子目录。例如,有时候你的一些数据库安装完成之后,对应的配置文件就放到这儿来。
home、root
home就是家的意思,其实在Linux中,每一个用户都有一个自己的主目录,存放着与自己相关的一些个性化的数据文件。这个home下边不会有root的主文件夹,都是普通用户的文件夹。我们当前只有一个普通用户叫xzz,那这个里边当然就只有一个xzz文件夹了。如果我们多创建几个用户,那对应的就会每一个用户都出现一个相应的文件夹放在那里。
那root用户的主目录在哪里呢?就在root文件夹中。
opt
opt是optional的前三个字母,也就是可选目录。可选目录也就是说可有可无,所以这其实就是Linux系统给第三方软件包专门留下的位置。即假如想要额外安装一些软件的话,那约定俗成把那些东西全部都装到这里来。
media、mnt
media就是媒体,主要用来识别一些可移动的媒体设备,如U盘、光驱等。这些设备识别之后,它相当于是一个外部存储了,将他么默认挂载到media目录下面。所以media相当于就是一个可移动媒体设备的挂载点。
跟他并列的另外还有一个mnt目录,这是mount的一个缩写,也是一个挂载目录,可以认为是另外一个media,它跟media基本上差不多。
proc
proc是process的前四个字母,所以说proc是一个进程目录。这是一个虚拟的目录啊,相当于是系统内存里边进程的一个映射,它存放的就是现有的一些硬件和当前进程的一些信息。所以这个目录对于系统来讲是非常重要的,但是对于我们一般用户来讲,你不要动就好了
run
run目录跟process目录有点像,但是它又不太一样啊。run目录是一个运行目录,存放的是当前系统运行以来的所有实时信息,其实是一个临时的文件系统,重启之后它就被干掉了,所以这个东西其实没有那么重要。
srv
srv是service的一个缩写。srv存放的就是跟系统服务相关的一些东西,那对应的这些东西我们也不应该删。假如说你删了之后,本地服务肯定跑不起来了。
sys
很显然这是system的缩写,所以它存放的是系统硬件信息的相关文件,这里面的东西都不能动。
tmp
tmp就是temporary的一个缩写,所以这是临时目录,只是临时存放下东西。
var
var是variable的前三个字母,对应的就是一个可变目录。这个目录里边一般就会存放一些不断会扩充会变化的东西,经常被修改的那些东西都放到这个目录下面来,所以这里一般放各种各样的日志。
Vim编辑器
一、整体介绍和模式转换
图形化界面编辑文件
前面我们已经了解了Linux里的目录结构,而且我们知道了Linux里边一切皆文件,什么都可以看成是文件来进行管理。所以之后我们学习的过程当中要直接去操作文件,那一个文件怎么操作?这里我们先将root主目录下的一个cfg文件拷贝到桌面。
x
然后我想要修改它的内容。我可以直接双击把它打开,然后想修改内容直接在里面敲就行了,最后和Windows一样直接ctrl+s保存。
1、使用文本编辑器的优点
然而桌面环境要占用系统资源,所以为了把性能做到极致,往往服务器是连桌面环境都不装的。那这样的话,在服务器端操作时,我们就需要到shell控制终端里面去进行文档操作。大家可能会觉得到这个文档里边去之后,连文档的界面都没有,该怎样去操作呢?这就需要我们至少得掌握一种在shell里边进行文本编辑的方法,也就是说我们需要熟悉一种文本编辑器。
2、Vi/Vim编辑器
①Vi是Unix操作系统和类Unix操作系统中最通用的文本编辑
②Vim编辑器是从Vi发展出来的一个性能更强大的文本编辑器。可以主动的以字体颜色辨别语法的正确性,方便程序设计。Vim与Vi编辑器完全兼容。
③Vi和Vim其实就是用控制台模拟一个文本编辑窗口,然后可以在里面编辑文本。
3、Emacs与Vim
①Emacs,被称为神之编辑器。是由GNU开源项目倡导者理查德斯托曼用lisp语言写出来的一个解释器。所以emacs可以用来作文本编辑,但是它的功能可以扩展的非常强大,它可以管理文件系统,它可以直接去当成一个email的收发工具,它可以用来上网浏览器等等。可以说它的设计理念是all in one,就是在这样一个工具里边,你可以做任意自己想做的事情。但是它缺点就是体积太庞大了,启动非常缓慢。
②vim,被称为编辑器之神。由Linus创造,其实就是一个简版的emacs,叫做micro emacs。vim就作文本编辑,把文本编辑功能做到极致,速度很快。
③打开计算机的bin目录,可以找到Vi和Vim,所以系统相当于给我们提供了两个工具。
4、Vi与Vim的区别
①使用vi + 文件名打开这个cfg文件。这就是纯粹的白底黑字,非常简略。
②使用vim + 文件名打开这个cfg文件。不同的字符有不同颜色显示。
右下角是光标的位置
这里我们无法直接编辑,这是因为我们处于普通模式。当我们需要进行内容修改时,需要进入编辑模式(插入模式)。还有一个比较特殊的模式叫做命令模式,主要就是在一般模式下可以打一个冒号或者打一个斜杠,然后去进行一些命令操作。
5、模式切换
三种模式切换方式如下
编辑模式:
如果我们修改了一些内容,需要先退出到普通模式,然后进入命令模式去保存。我们输入 **:+w ** 进行保存,w就是write写入。从计算机底层处理的角度来看,这个操作其实相当于把我们更改的这些操作(本来是应该放在一个缓冲区),现在要把缓冲区的内容真正写入硬盘。
如果我不想要这个更改的话,可以在普通模式下按一个u,于是直接就回退到之前了。
最后,如果想要退出回到之前的那个shell终端控制台,可以在命令模式下输入**:+q**。
二、普通模式
普通模式的用途
用Vim打开一个文本就直接进入一般模式了(这是默认的模式)。在这个模式中,可以使用『上下左右』按键来移动光标,可以使用『删除字符』或『删除整行』来处理档案内容, 也可以使用『复制、粘贴』来处理文件数据。
复制粘贴
①单行复制粘贴
按下yy可以复制光标所在行的内容,这里不会出现任何效果。
然后可以在某一行按下p进行粘贴
也可以直接使用数字+p,代表粘贴多少次。我这里按下5p,代表粘贴了5行。
②多行复制粘贴
可以使用数字+yy,比如我们这里要复制8行,使用8yy
然后按p进行粘贴。
行的删除
①按dd就可以删除当前行。
②数字+dd,删除包含当前行在内的下面几行。
行部分内容的复制粘贴
使用y+$,
复制光标到当前行结束的所有内容。($在linux中代表结束)
使用y+^
复制当前行光标之前到光标的内容。(^在linux中代表开头)
使用y+w,w代表word,复制光标所在的单词。
如果光标不在单词首部,则只会复制光标到所在单词结束的那个空格之间的内容。
行部分内容的删除
使用d+w,删除光标所在单词(空格也要删除)。
如果光标不在单词首部,则只会删除光标到所在单词结束的那个空格。
类似于yy+$
和yy+^
,也可以使用 d+$ 和d+ ^删除光标到行尾、行首的内容。
单个字符操作
①按x代表剪切光标所在的字符。
②大写的X可以类似于Windows一样退格删除
③按一个r,可以替换当前字符的内容
④按一个R,进入替换模式(类似于一种特殊的编辑模式),可以依次替换多个字符。这类似于Windows中的Insert模式。
按下[ESC]键为止 【[ESC]】 退出编辑模式回到一般模式
光标移动
①^:移动到行头
②$:移动到行尾
⑥w:向后移动到单词的词头e:向后移动到单词的词尾
⑦b:向前移动到单个单词的词尾
③gg或H:移动到页头
④G或L:移动到页尾
⑤数字+G:移动到目标行
注:如果想移动到某一行但是不知道行号,则可以:set nu,显示行号。
如果想关闭行号,则:set nonu
总结:
三、编辑模式
前言
编辑模式下的操作跟Windows里面编辑文档的操作是完全一样,非常的简单。正常情况下,如果要能更加快速地编辑文档,比如说大段的复制粘贴和删除,最好就在普通模式搞定。在一般模式下,按下『i, I, o, O, a, A』中任何一个字母后就会进入编辑模式。按下这些按键时,在画面的左下方会出现『INSERT或REPLACE』的字样,此时才可以进行编辑。而如果要回到一般模式时, 则必须要按下『Esc』按键即可退出编辑模式。
进入编辑模式光标的位置
①i,在当前光标前面插入内容
②I,在光标所在行最前面插入内容
③a,在当前光标后插入内容
④A,在光标所在行的行尾插入内容
⑤o,在当前光标行的下一行插入内容,同时下面那一行是新插入的
⑥O,在当前光标行的上一行插入内容,同时上面那一行是新插入的
四、命令模式
命令模式
在一般模式中,输入:或/ 就可以进入命令模式。在命令模式中, 可以提供搜寻、读取、存盘、大量取代数据的动作。同时,离开vi、显示行号等动作也是在此模式中达成。
----使用:进入命令模式时,就是完成一些功能
----使用/进入命令模式时,就是进行数据的查找
一些指令
①:w 保存。当我们对文档内容进行修改后想要进行保存,则需要退出到指令模式,执行:w进行保存。
②:q 退出。退出vim编辑器。
③:! 强制执行。当我们修改了文档内容后,直接使用:q退出编辑器会报错。这时可以在后面加上!,即通过命令:q!强制退出,同时修改的内容不会被保存。
④/要查找的词。当我们想要查找一个词在文档的位置时,可以使用这条命令,找到的结果会高亮出来。此时可以通过n移动到下一个查找到的词,可以通过N移动到上一个查找到的词。
⑤:noh。如果我们想取消高亮显示,则可以使用这条指令,可以看出高亮的boot被取消了。
⑥:set nu 显示行号
⑦:set nonu 关闭行号
⑧:%s/old/new/g 替换内容。/g代表替换匹配到的所有内容。
替换操作
①:s/old/new。将查找到的第1个old替换成new。
②:s/old/new/g。上面的指令只能替换掉一个,如果一行中有多个boot都把它们进行替换,就需要在后面加上’/g’。可以看出这一行的boot全部被替换成功。
③:%s/old/new/g。将文档中匹配到的所有的内容都替换掉。
网络配置
前言
我们现在已经了解了Linux的文件系统目录结构,而且还掌握了Vim编辑器的一些基本用法,接下来我们有足够的基础去学习Linux里边各种各样的命令了。我们先来学习一下网络配置和系统管理操作,主要是因为这一部分涉及到的Linux命令比较简单、比较少、容易记忆。后面还会有大量的命令,我们要记的东西还很多,将这部分作为开头进行上手比较方便一点。而且它的实用性很强,也是后面学习的一个基础。
一、网络连接测试
背景
问题引出: 在大数据处理场景下,我们一般要面对的都是很多服务器构成的一个集群。我们一般把这些服务器放在专业机房里面,就是里边放着一排服务器嗡嗡嗡地响,然后外面贴一个机房重地闲人免进。所以我们一般不能直接进去操作服务器,那我们也就无法对服务器做更改、做操作、做配置。现在很多的中小公司甚至不用机房了,直接用云服务器,那我们就更没有办法直接摸到这个实体机器了。那我们怎么操作这些机器呢?怎么样去做配置呢?
回答: 当然了,我们就需要有一个远程的控制电脑,一般情况下用我们自己的个人电脑就可以了。我们需要这个控制电脑能跟服务器集群建立某种连接,然后它们彼此之间能够通信。也就是说我这儿可以给你发指令,然后你那边有什么状态、数据也应该能够返回给我这边的控制台。这样的话我们就可以进行远程登录,可以对服务器进行操控、可以上传文件、可以下载数据。这就是一种完美的控制方案。所以如果说我们想要做这样一种远程操控服务器的方式的话,首先就有一个前提,我得把这个网络连接先配好。要不然的话,我们当前的主机跟服务器集群就没办法通信,就没有办法远程操控。当然了,不光是主机和服务器之间需要连接,服务器之间彼此也得连接在一起。现在的服务器并不是各自为政的,它是一个分布式的集群,彼此之间肯定得有数据交流。
ping
在我们的实验场景里,没有真实的服务器。我们现在就确保我们的物理机和虚拟机之间必须可以完美通信。在之前我们刚刚装好虚拟机的时候,我们直接拿firefox做过一个上网实验,当时我们发现虚拟机是直接能够连上百度的。照这么看的话,这个网络连接其实已经配好了,但是现在我们还是想测一下跟主机之间能不能通信。
ping
这个命令在Windows和Linux下都是通用的,是一个系统命令,它主要就是用来检测两台机器之间是否能够正常发送数据,是否能够正常通信。ping一台主机时,命令为ping 主机的IP地址。所以这里边我们的核心是得知道你要ping的那台机器的IP。当然了,实际在操作的时候,不光可以加IP,你也可以直接加域名或者主机名,比方说我们可以直接ping百度,这是完全没有问题的,这个过程需要做域名转换、域名解析。
获取主机的IP地址
方法一:
打开网络和Internet设置
点击下边的更多网络适配器选项
所有的网络连接在这里一目了然。
我们看到尽管多达到6个,但是其实很多都断开的。我现在连的无线,所以右键点击最右侧的WLAN图标,点击状态。
点击详细信息
这里我们就可以看到192.168.31.222,这就是我当前的IP地址。
方法二:
在命令行输入ipconfig,查询当前IP网络配置相关的东西。我们现在连接的无线,可以看到IP地址就是192.168.31.222
虚拟机ping主机
我们在虚拟机的终端中ping主机,可以看到可以正常通信
获取虚拟机的IP地址
方法一:
点击设置
点击网络,然后点击设置图标
就可以看到虚拟机的IP地址是192.168.128.130
方法二:
在终端中输入ifconfig(其实是network’s interface config的缩写,即网络接口的配置),敲回车。可以看到IP地址是192.168.128.130。下面的127.0.0.1是回环地址。下面还有个virbr0,其实是当前Linux系统里边又创建了一个虚拟网络。也就是说我们本来是在虚拟机里边装的Linux系统,然后在这个Linux系统里边又可以创建一个虚拟网络,然后再接一些虚拟化的设备。
主机ping虚拟机
我们在主机的终端中ping虚拟机,可以看到可以正常通信
问题:
①通过上面的测试,我们发现主机和虚拟机是可以互相连接上的。但是我们有些疑问,就是很显然我们本身主机的IP和虚拟机的IP并不在一个网段里面,那到底是怎么样互相连接上的呢?
②VMware搞了一些事情,它给我们创建出了两个之前没有的虚拟网络VMware Network Adapter VMnet1和VMware Network Adapter VMnet8。顾名思义,这是两个虚拟网卡,因为我们电脑里面根本没有这样的两块网卡。那为什么多出了两个虚拟网卡,还连上了两个虚拟网络,这两个网络又是怎么一回事?
二、网络连接模式
各设备的IP地址
我们先通过上面的方法记录下各个设备的IP地址:
①主机的IP地址:192.168.31.222
②虚拟机的IP地址:192.168.128.130
③VMnet8的IP地址:192.168.128.1。
④VMnet1的IP地址:192.168.232.1。子网掩码是255.255.255.0,可见同一个网段内的设备的IP地址前三个数都必须一样。
各设备IP地址的特点:
①除了虚拟机和VMnet8在同一个网段,其余设备之间都不在同一个网段。可以看到VMnet1跟我们的虚拟机也不在一个网段。
测试:
我们知道在同一个局域网里边的设备可以互相通信,那自然VMnet8和虚拟机之间就可以互相连接互相ping通,可以进行完美通信。我们来测试一下,在Linux里面Ping一下192.168.128.34。发现ping得通
我再Ping一下VMnet1试一下,发现竟然也能够ping通。
问题:为什么虚拟机能够ping通不同网段的设备?
我们还记得,在最初创建虚拟机的时候做过网络连接的配置,当时选的是NAT模式。如果我们忘记的话可以点左边的菜单栏里右键当前我们创建的这个虚拟机名称,然后点设置。
可以看到当前它对应的硬件设置,包括网络适配器(网卡)等。它的连接方式一开始就是设置好的,就是NAT。VMware给我们提供了三种不同的网络连接方式,即桥接模式、NAT模式和仅主机模式。自定义模式就不展开讲解了,需要你自己去创建。我们下面去学习这三种模式就能知道为什么了。
2.1 桥接模式
桥接模式
桥接模式的主要含义就是虚拟机直接连接到外部物理网络的一种模式,这种模式下,虚拟机可以直接访问外部网络,并且对外部网络是可见的。这个时候主机就起一个网桥的作用。这种连接的结构比较简单,如下图所示:
结构组成:
①上面有一朵云,就是Internet,也可以叫外网。一般情况我们要连接上网的时候,Internet下面可能要接一个调制解调器,就是我们所说的猫,这个我们就不画出来了。
②一般家里边或者公司上网的时候都会有一个路由器,我们所有的电脑、手机就可以直接以无线或有线的方式连接在这个路由器上面。
③一般来说,如果你配置了自动获取IP的话,那相当于这个路由器这里还有一个DHCP服务器,这个DHCP就可以自动的去分配我们的IP地址,让IP地址不起冲突。如果当前你不用网络的话,就不占着这个IP地址。当IP比较少,人比较多,但是大家又不会同一时间占用IP的情况下,动态分配IP就是比较好的一种方式。
④这样的话,我们当前所有的电脑和路由器就构建了一个局域网。
⑤现在我们在自己的个人主机PC上面创建了一个虚拟机VM。这个时候我的VM如果想要连到外部网络上,可以采取一种最简单粗暴的方式,就是搭一座桥(一般叫做虚拟网桥,可以理解成一个简单的网络连接扩展设备),我们的PC经过虚拟网桥连接到VM。
⑥在实际情况下,我们要搭一个VM集群。这个时候一座桥分别连几个VM就做不到了,这时就需要一个虚拟的交换机。于是我们主机网卡上虚拟出来的网桥直接连接到虚拟的交换机上,交换机就可以连接所有的设备了。
结构本质:
实际上所有的VM相当于在主机这里绕了一下路,然后通过这条路完美地连上路由器,然后连到外部的外网上。也就是说,所有的虚拟机和我们的PC都是直接连到路由器上,都由路由器来给我们进行IP的分配。也就是说,它们都处于同一个局域网中,所有的PC和所有的VM都是平等的关系。
优点: 假如说我当前在公司里边,很多同事都想要访问我的虚拟机,则可以直接去访问了,非常简单。
缺点:
①局域网内的所有人都可以访问到我这里搭建出来的虚拟机集群了,这可能会带来一些安全性、隐私性的问题。
②VM既然跟我们所有的主机都平等,那它们也要占用当前局域网内的IP。如果当前局域网是一个C类地址,则拓展出来的IP是比较少的,只有1-254,会导致IP很快就不够用。
2.2 NAT模式
NAT模式
NAT的全称是Network Address Transition,即网络地址转换。
虚拟机和主机构建一个专用网络,并通过虚拟网络地址转换(NAT)设备对IP进行转换。虚拟机通过共享主机IP可以访问外部网络,但外部网络无法访问虚拟机
结构如下图所示:
结构组成:
①上面有一朵云,就是Internet外网。
②下面是一个路由器和对应的DHCP服务器
③现在我们在自己的个人主机PC上面搭了一个VM集群。
④VMWare虚拟一个类似于路由器的东西出来。实际它的底层并不是创建了虚拟路由器,它主要是创建了一个NAT服务器做网络地址转换,还有一个DHCP服务器做动态地址分配。
⑤现在我主机的网卡上就要接到虚拟出来的路由这里,然后这个虚拟路由就相当于接入外网了。
结构本质:
- ----这个架构跟我们在公司和家里用一个路由器上网这种方式是非常类似的。外网给我们分配一个IP,然后就接到路由上,这个路由是我们当前整个局域网络连接外网的唯一入口。接下来路由器再给每一个连进来的电脑和移动设备分配一个子网的IP。
- ----同样的,现在我也在当前主机上虚拟了一个路由出来,这也是VM集群连接到外面的唯一入口,然后这个虚拟路由就可以给我们接入的所有虚拟机再去分配对应的子网IP。
- ----所以我们现在就知道为什么当前主机的IP地址和VM虚拟机的IP地址不在同一个网段中却可以进行通信。这是因为虚拟机所在子网的IP地址是主机虚拟出来的。
思考: 内部的这些VM之间是可以互相访问的,但是VM想要访问PC的话那就像PC访问外网一样,由虚拟路由来做地址转换,一转换就知道要访问PC。如果VM要访问外网,就再由真实的路由器来做一次转换。但是PC主机现在反过来却访问不到虚拟子网内部的虚拟机了。这种情况就和外网要访问我们局域网中的设备一样,这是访问不到的,外网只知道路由器的IP地址,根本不会知道路由器为局域网中各个设备虚拟出的IP地址。
解决方案: 我们给PC再虚拟一个网卡出来,这个虚拟网卡就接到我们当前连接各个VM的虚拟子网的虚拟路由器上。这样的话,PC就又跟所有的虚拟机又变成同一个网段了。那这张网卡在当前VMWare里面就把它叫做前面看到的VMnet8,这就是为什么之前我们会看到VMnet8和虚拟机在同一个网段。
2.3 仅主机模式
虚拟机只与主机共享一个专用网络,与外部网络无法通信
结构组成:
整体结果如下
①上面有一朵云,就是Internet外网。
②下面是一个路由器和对应的DHCP服务器
③现在我们在自己的个人主机PC上面搭了一个VM集群。
④主机虚拟出一个交换机,各个VM连接到交换机。
⑤主机虚拟出一个网卡,连接到VM集群上的那个虚拟交换机。
⑥现在虚拟机与主机共享一个专用网络,而且只跟主机共享这一个专用网络,跟外部网络就没有通信的渠道。
结构本质:仅主机模式和NAT模式的区别在于仅主机模式使用一个交换机连接VM集群,而不是使用路由器。使用交换机就代表无法访问外网,只能访问局域网里的设备。所以VM只能访问到同一个局域网内的主机和其它VM,无法访问外网。
2.4 网络配置
虚拟网络编辑器
点击编辑、虚拟网络编辑器
我们开可以看到vmware的网络设置
点击更改设置,开启管理员特权。我们看的NAT模式子网地址是192.168.128.0,我们知道0表示网络地址,前面三位表示当前子网的网段。
我们点击DHCP设置,可以看到自动分配的IP地址是从128到254。
我们点击NAT设置,可以看到网关的IP是192.168.128.2
问题: 为什么这里面网关给的是2,而外边主机中虚拟出来的网卡VMnet8的地址是1?
当前主机虚拟出来的这张网卡跟我们的VM是完全平等的,他们都是接到当前的虚拟出来的路由器上,而真正的网关应该是这个虚拟的路由器。所以虚拟网卡的IP是.1,虚拟路由器的IP是.2。现在虚拟机通过这个虚拟路由器作为网关就可以去上网了,对应的这个虚拟路由器里也有NAT服务,会把我们这里的地址转换成主机的地址,然后主机如果再去访问外网的时候,又会经过上一层的路由器再做一个NAT转换成外部的地址。
三、修改静态IP
问题
看起来NAT模式很完美,可以上外网、主机和虚拟机之间也可以完美通信、彼此连接又安全、IP也不会越来越少。但是可能会有这样一个问题:我们是有DHCP服务器的,当前的IP都是动态分配的。如果我们重启或者对配置做一些更改,IP可能就都变了。对于我们做服务器管理的时候,这可能是非常麻烦的,每一次我们要连上一个服务器都要去看一下现在的IP是多少。如果DHCP段设置太大的话,可能要测试的IP就很多。所以在服务器场景下,我们都希望把一个服务器的IP直接设死就好了。比如我们的服务器的IP地址是192.168.128.1,那以后连接的时候都是使用这个IP,即使用静态IP地址。
解决方案
在Windows里边修改静态IP是比较简单的,右键点击VMnet8,双击TCP/IPv4,设置不要自动获取,自己填上IP。IP地址就是192.168.128.1,子网掩码就是255.255.255.0,默认网关和DNS服务器就是192.168.128.2。
但是上面的操作其实没有必要,因为设置静态IP主要就是为了方便我们连接的时候不用再去查询了,很显然我们是使用主机去远程操控服务器(虚拟机),这个时候把虚拟机设成静态就可以了。接下来我们就看一看怎样在虚拟机里指定静态IP。
图形化界面操作
直接在虚拟网络编辑器里面操作,修改子网IP,我们这里将128修改成100。
然后去NAT设置里面将网关的128也改成100。
主机上的vm net8如果是自动获取IP就不用修改了。
终端控制台操作
通过终端控制台需要去更改配置文件。配置文件在/etc/sysconfig/network-scripts/ifcfg-ens33。这个ens33就是我们在前面通过ifconfig查看的时候,可以直接看到网卡名就是ens33,所以我们当前配置的当然就是ens33。
我们通过VIM进入/etc/sysconfig/network-scripts/ifcfg-ens33,内容如下
①第一行,代表类型是以太网。
②第四行,代表当前的启动协议是DHCP,也就是动态分配IP。那我们想把它改成静态分配IP,直接将dhcp修改成static。
③既然指定成静态了,需要指明IP是多少。接下来我们需要添加几项内容
#IP地址
IPADDR=
#网关
GATEWAY=
#域名解析器
DNS1=
当前的IP地址指定的是129.100,网关是129.2,这跟我们外边虚拟网络编辑器指定的是完全一样的。最后还要对当前网络服务进行重启,因为我们当前只是改了配置文件,网络还是之前的网络。因为现在如果要ifconfig的话我们现在的IP当然还是不变的,100.128。
所以接下来我们还要重启一下网络服务。重启服务的命令service network restart。这个时候我们再使用ifconfig就可以看到IP已经变成了192.168.123.100
所以我们可以把这个IP复制一下,然后到主机Windows里去,再去ping一下,我们现在连接是完全没有问题的。
四、配置主机名
配置主机名的原因
之前我们把IP改成了192.168.123.100,每次访问都要敲这么一长串就会太麻烦了,所以我们往往会给每一个服务器都配一个比较好记且有意义的对应的一个主机名。比方说之后我们要搭建hadoop集群,我们就将主机名改为hadoop100,100主要就是为了后面有个编号方便扩展。
配置当前主机名
如果我们只是想更改当前这台虚拟机的主机名,直接更改一个配置文件就可以。首先可以通过命令hostname查看当前主机的名字,可以看到是xiaozhuzhu100。于是我们通过VIM打开/etc/hostname这个文件,里边写的就是xiaozhuzhu100。
现在我想把主机名改成hadoop1(通过root用户去改),然后保存。
我们退出来之后再通过hostname去看一下主机名,我们会发现没改过来还是xiaozhuzhu100。这是因为我们只是改了一个配置文件,想要让它生效一般情况下需要重启服务器,下一次读取对应的配置文件之后就会更改hadoop100了。
hostnamectl
每次都要重启才能生效太麻烦了,这里有更简单一点的方式,hostnamectl。我们可以看一下,直接敲的话,我们就会看到当前跟主机名有关的一些对应的信息,相对应的一些系统信息也会列在这里。
如果说我们要修改用户名,使用命令hostnamectl set-hostname 用户名。我们这里将用户名修改为spark10,然后通过hostnamectl查看。
我们再去另外一个终端查看,可以看到用户名已经修改过来了。
为了更加方便地搭建Hadoop集群,我们还是把用户名改回来,改成hadoop100
hosts文件
对于我们要搭建一个集群而言,你只把自己的主机名改了,这只是第一步。因为最重要的是你得让别人能够找到你,也就是让别人知道hadoop100这台主机它对应的IP就是192.168.123.100,把这个映射关系保存下来。所以我们需要有一个专门的文件,相当于就是一个通讯录,一般我们的通讯录就是一个名字对应着一个手机号码,那我们现在是一个主机名对应一个IP。假如说之后我们有一个主机叫做hadoop101,它的IP对应的就是192.168.123.101。那假如有一个hadoop102,对应的IP就是192.168.123.102。所以我们把整个通讯录保存下来,接下来我想要找这里边谁的时候,直接输入用户名即可。Windows和Linux里都有这个通信录,它有一个统一的名字就叫做hosts文件。这个文件非常的有名,接下来我们要做的事情就是在hosts文件里边去添加主机名和IP的映射关系。
Linux的hosts文件
Linux的hosts文件所在路径为/etc/hosts。我们打开hosts文件,可以看到这里边有127.0.1,这是当前的回环地址。
接下来我们就直接在下边插入我们想要的那些IP地址和用户名就可以了。我们把自己的IP也写进来,这是因为后边如果有其他的机器想要用这张通讯录的话,直接复制过去就可以了。
Windows的hosts文件
我们修改虚拟机里边的host文件,主要是为了方便他们彼此之间通信更加容易一点。那我们还得考虑我主机也得跟他们通信,主机也得知道他们每个人叫什么名字,IP是多少,所以主机也得修改hosts文件。Windows的host文件在C:\Windows\System32\drivers\etc\hosts。
如果是WIN7系统的话,只要你有超级管理员权限,可以直接去修改。如果是WIN10、WIN11的话,不能直接修改。我们将其打开,将内容添加到后面,然后ctrl + s另存为.txt文件放到桌面上。
然后将桌面这个hosts文件后缀直接去掉,如果文件不显示后缀,则去我的电脑、查看、打开文件扩展名。
复制桌面的这个host文件去替换原目录下的host文件,最后我们就可以直接ping hadoop100了。
注: 一定要小心自己的hosts文件。有一些黑客攻击的时候,他会使用所谓的域名劫持,主要就是要更改你的hosts文件。比方说你要上淘宝买东西,黑客就直接把淘宝的域名对应到他自己搭建的一个服务器上,你的所有信息都会暴露在他面前。
五、远程登陆
SSH
做完了网络的配置,接下来我们可以尝试去进行远程登录,操作一下自己的服务器或虚拟机了。最经典、最简单的远程登录方式是SSH,不管是Windows还是Linux都提供了一种基于SSH协议的远程登录方式。在当前的Windows环境里边,我们直接cmd打开一个命令提示符,直接通过命令ssh root@hadoop100以root身份登录我们的虚拟机。第一次登陆会有一个提示,问你是否需要建立一个认证和授权。我们输入yes,回车。然后输入密码,回车,就登录到远程的虚拟机上了。
我直接ls一下,我们看到的所有的目录和文件就是我们root在虚拟机里边的主文件夹。
我们还可以看刚才我们更改过的配置文件/etc/sysconfig/network-scripts/ifcfg-ens33,跟我们之前更改完了的所有的这些静态地址的配置完全都是一样的。
要退出就直接exit
注: 这种方式尽管简单,但是功能是比较有限。可以使用一些远程登录工具,如Xshell、SSH Secure Shell、SecureCRT、FinalShelll、putty、teamviewer等。如果我们想看到对应的图形化界面的话,还可以用VNC这些工具。所有的这些工具里边,Xshell的稳定性和性能表现最好,我们接下来就以XShell为做一个远程的登录。
XShell
实际工作场景里边,真实的服务器肯定是在机房里边或者是云服务器,我们没有办法直接接触到实体机,所以我们就只好采用一种远程登录的方式登录上去。使用XShell的步骤如下:
①新建一个会话
名称就写成hadoop100,主机名也默认就跟他一样。我们看到了协议就是SSH,所以XShell的底层其实也是SSH协议,只不过给我们提供了一个更加方便的操作界面,类似于一个远程的控制台的仿真器。
不光得有主机名,还得有是以哪个用户的身份去登录。所以这里面我们输入root,然后密码写进去。
我们可能还希望将后边控制台的shell做一些调整,将背景换成白底,然后将字体调整得更大一点。
这个时候我们可以直接做一个连接,我们会看到SSH安全警告弹出来,这是一个未知主机的密钥,我们这里可以直接选择接受并保存,接下来我们就可以免密登录。
我们进来之后,很明显这就跟我们直接在虚拟机上登录的状态是完全一样的,我们现在是一个远程的登录状态,
我们ls一下可以看到当前就是进入到了Root用户的主文件夹。
如果想要断开当前的连接的话,那我们只要点上边的断开连接就可以了。
接下来如果我们还想重新连接的话,直接点所有会话这里,因为我们已经保存了当前它的连接密钥,所以我们直接一双击它就又可以来了啊。
我们这里还可以加一个快捷方式,直接放在上面,这样的话点起来更方便一些。这里一点就断开,一点就又连上
一些问题:
之后我们如果直接以远程连接的方式去进行操控的话,我们可能经常会做一些copy操作。但是我们会发现这个control c、control v是没用的,我们可以在工具、选项这里设置
然后点键盘和鼠标,在这里我们可以选择当前鼠标中间的按键和右键表示什么含义。我们一般情况常见的就是把这个都改成粘贴剪贴板的内容就可以了,这个是最简单的,而且后面我们可以加一个选项,就是下面的这个勾选,将选定的文本自动复制到剪贴板,然后这样的好处就在于我们这个确定之后。接下来我选定当前的IP,唉,那就相当于已经复制了,然后鼠标移到下面来一点右键直接就过来了啊那这样的话,我们之后在做这一个控制台操作的时候就会非常的方便啊。
XFTP
同样的新建会话
进行连接develop100
这里刚开始xftp连接虚拟机以后乱码
解决方法:
https://jingyan.baidu.com/article/2a1383287b0038474b134f41.html
系统管理
一、服务管理
前言
前面我们在修改了IP地址之后,我们执行了一条service network restart命令,将网络进行了重启。这样的一条命令看起来就像说了一句话一样,就是服务-网络-重启,所以一目了然,我们就是要把整个的网络服务做重启。
疑问: 这条指令为什么要倒装过来?为什么不直接使用network service restart呢?这样不是更好理解吗?
回答: 这是因为service本身是Linux里边的一个系统命令,我们可以在当前的/user/sbin里边可以直接找到。
这里边的命令太多,我们可以使用grep筛选出service。具体命令为ls /usr/sbin/ | grep service
我们可以看到在/usr/sbin下面有service这个命令。service命令后面就跟着对应的服务,后边再加上一个restart就表示对这个服务执行重启操作。
服务与进程
进程
说到服务,首先我们要重新理解一下什么叫进程。计算机中一个正在执行的程序就叫一个process(进程)。每个进程在计算机底层都有自己的地址空间,要占用相应的资源。不同的进程是有所区分的,有些进程(如我们经常使用的ls、cd命令)执行完了之后就直接返回了,在内存里停留的时间很短。有一些进程(比如说我们前面启用过的网络)启动起来之后就会一直存在。我们现在要上网,仔细观察的话可以看到界面右上角有一个小图标,这个小图标就表示我们当前的电脑是能够联网的。只要网络进程启动了,它会常驻内存,这个小标就会一直存在。
服务
这种长期存在于内存里的程序,它的功能往往就是要为我们持续地提供某种功能或者是完成某个任务,这就是服务。
Window的服务管理
右键点击我的电脑,点击管理,点击服务和应用程序,点服务。然后就可以看到当前我们配置好的所有的系统服务了。我们可以看到每个服务后面有一个状态,代表是否正在运行。还有启动类型,代表是手动启动还是在整个系统启动的时候就自动触发启动。
Linux的服务管理
- 守护进程
----Linux中的服务要常驻内存,所以一般情况下我们在控制台里看不到具体服务的执行过程的,所有的服务都是在后台运行的。我们的整个系统运行的时候,可能需要很多后台的服务来支撑,这些服务往往都是在系统一启动的时候,直接就跟着启动起来,直到系统关闭的时候才会终止。所有的这些服务就统称为系统服务,而具体执行这些系统服务的进程就叫守护进程。
----守护进程对应的英文就是daemon,所以我们会发现在Linux里边有很多服务以d结尾,表示当前的服务(当前的进程)是一个守护进程。- 服务与守护进程的关系
如果我们想把整个系统的服务跑起来,则需要由一个守护进程来进行管理和操作,这个守护进程守护的就是我们的系统服务。所以可以认为在Linux里边,系统服务和守护进程所说的其实就是一回事儿,之后我们也就不再区分这两者之间的概念。
Centos 6服务管理
Centos 6服务管理命令:
service 服务名 start|stop|restart|status
,即service+服务名+对这个服务的操作。具体来使用的话,那其实就是service,比方说我们是network。服务存放的位置:/etc/init.d/服务名。我们执行
ls /etc/init.d/
,可以发现下边的服务很少,只有netconsole和network。这两个服务是绿色的图标,绿色表示当前文件是一个可执行文件,所以既然它是服务,那一定是一个可执行的文件。
示例:
问题: 这里只有两个服务,那我们想一想,对于一个系统而言,它的系统服务难道就只有这么简单的两个吗?
回答: 显然不是这样的。centos 7更新了这种用法,但centos7对centos6里service的这种调用也做了兼容的,所以我们在Centos 7里面还可以这么用,但是里边剩下的服务就很少了。
Centos 7服务管理
Centos 7服务管理命令:
systemctl start|stop|restart|status 服务名
服务存放的位置: 所有的服务都放在/usr/lib/systemd/system
下面。我们先看看systemd目录下的内容,可以看到systemd本身也是一个命令(服务),里面还有很多systemd守护进程,这是一个很大的家族,也就是说系统在启动的时候有很多对应的服务都要启动起来。除了systemd本身之外,下面还有一个system目录,整个系统服务所有的东西全部都列举在里面了。我们可以看到这里边以service结尾的全都是服务文件,以target结尾的文件是一组服务的集合(也是服务)。
示例:
在centos7里边,我们会发现network它本身还存在于老版本的那个位置。在centos7里边没有把它移出来,主要是因为有了它对应的一个替代的服务,centos7里边默认使用的网络服务叫做NetworkManager。之前我们也接触过NetworkManager,在修改了IP地址后有可能会遇到ping不通的情况,有一种方式就是可以直接关闭掉NetworkManager服务。其实更加推荐的是保留NetworkManager,把之前network这个老版本服务停掉。
我们使用systemctl命令来看看network和NetworkManager服务的状态,可以看到他们都是active状态。
两个网络服务都处于active状态可能会出问题,我们只需要有一个网络服务就可以了,于是我们关闭network。
然后网络图标就消失了,我们上不了网了,甚至连域名解析都没了。
我们在主机端去ping我们的虚拟机也ping不通了。
虽然我们的NetworkManager是出于active状态,我们还是上不了网,这时候就需要重启一下NetworkManager。可以看到可以上网了。
二、系统运行级别
问题
我们已经了解了系统服务基本的管理方法,而且我们知道了在centos6版本之前,主要是直接使用service命令去进行服务管理,而centos7之后就使用systemctl命令去做服务管理,但是我们看到的这些操作都只能去启动/停止/查看一个服务。系统里面有很多服务是开机自启动的,我们知道如果所有的服务全都是开机自启动的话,肯定会拖慢启动速度,于是我们就需要配置服务的开机自启动选项。
1、setup
我们运行一个终端,输入setup命令并敲回车就看到了这样一个交互式的设置工具。我们可以看到系统服务、验证配置这两个工具,我们这里选择系统服务,点击回车进入。
进来之后我们会看到很多不同的系统服务
①每一个服务前面都会有一个方括号。如果里边有一个心就代表当前的服务就是开机自启动,反之则代表不是开机自启动。
②所以这里我们可以看到network是开机自启动的,这也是为什么我们一开始会看到network和network manager这两个网络服务都是active状态。
③如果我们不让服务开机自启动的话,可以选中服务直接按下空格。如果想开机自启动,则再次按空格即可
④上面有一个类似于标题的东西,用尖括号括起来了,分成了两类。
----一类叫做SysV initscripts
。Sys当然就是system,在这个栏目下边只有net console和network。通过这个描述我们可以发现这其实就是老版本的启动方式,在etc的init.d目录下边只有这两个服务,所以它本质上是system v的启动脚本。
----下面这些更多的服务就统称为systemd services
。这些都是systemd的服务,前面我们也在systemd目录下面看到了这些服务。所以我们可以认为centos7新版本里边所有的服务都基于systemd这个守护进程。
2、init进程
# ----早期的Linux版本是基于Unix来进行设计和优化,所以Unix里边对于系统服务的管理也就影响到了Linux里边的做法。Unix里边有一个非常重要的稳定版本叫做SystemV,这个版本里系统第一个启动的用户进程就叫做init,就是初始化initialize的前四个字母。
# ----所有后续的系统服务的守护进程都是由以init进程去调用启动,所以init进程相当于是整个系统服务管理的一个初始的进程。接下来init进程会通过调用init.d目录下的所有脚本来启动相应服务的守护进程。所以,我们这里说的init进程其实是整个系统在Linux内核自身初始化之后,主动启动的第一个用户进程,之后init进程就会根据用户自己定义的系统运行级别去启动不同的服务进程。
# ----init.d目录下的服务启动方式跟我们当前系统运行的级别有关。这样的话,我们当前的系统就可以进入不同的操作环境,就可以拥有不同的操作功能
Centos6系统运行级别
- linux开机启动的步骤:
①首先开机
②开机之后进入到bios的自检和启动过程
③接下来去引导分区/boot里边获取我们当前的引导文件和整个Linux内核里边的一些内容,进行整个系统的初始化,
④初始化完成之后,第一个启动的就是init进程,这就是我们说的用户级别主动启动的第一个进程。
⑤接下来inid进程就要去判断当前系统的运行级别到底是什么样的,根据运行级别启动对应的系统服务。- 系统运行级别:
Linux系统里边的运行级别总共有7种,从0到6,每一种都对应了不同的功能,级别越高支持的功能就越丰富。
①运行级别0:级别0其实是一个停机模式,系统是处于停机状态的,它代表系统启动起来之后直接就关掉了。所以默认情况下系统的运行级别不能设成0。
②运行级别1:运行级别1叫做单用户工作模式。在这种模式下,它只支持以root权限进行登录,而且不能进行远程登录。所以只能是root用户在实体的物理机上去做系统的维护,如一些相关权限更改等比较重要的一些系统管理的操作,有点儿类似于Windows下的安全模式啊。整体来讲,它启动的服务是最少的,相当于是一个最小化的启动,然后去做一些系统级别的管理和更改。
这个其实非常有趣,我们可以在启动的时候直接进入这个启动级别,然后就可以更改根分区的状态。我们知道在开机登陆界面的时候,你是root用户,得输入密码。在输入密码之前,整个根分区全部都是只能读不能写入的,即使你是root用户也不能写入,因为你还没登陆。如果说我们现在是单用户工作状态,进来之后就允许我们直接把根分区做一个重新挂载,然后就可以把它改成可写入状态,这就代表我们可以不用root本身的密码直接就可以进去了。当然了,在进去的时候需要重新设置密码,所以忘记了root密码的话可以用这种方式,而且这种方式只有在实体的这个物理机上操作才可以,所以整体上来讲还是比较安全。
③运行级别2:运行级别2指多用户状态,注意它是没有NFS。NFS指的是网络文件系统,Network File System。所以说运行级别2已经可以允许多个用户同时去登陆了。
④运行级别3:运行级别3整体来讲跟二差不多,它是一个完全的多用户状态,也就是说在运行级别2的基础上加上了NFS的支持。所以对于这个级别三而言,登录进去之后相当于就是控制台命令行模式,进去之后就是一个大黑屏,这其实已经是我们服务器能够直接操控的一个完全体的状态。
⑤运行级别4:运行级别4比较特殊,它是系统未占用的一个保留模式,所以它一般不会用。
⑥运行级别5:运行级别5就是所谓的图形界面的多用户模式。登陆之后,我们直接就可以进入窗口化的图形gui模式了,所以这就是我们当前的环境里边正在执行的这个模式。
⑦运行级别6:运行级别6是重启模式。也就是说,系统一启动马上就做重启,就相当于无限循环不停重启了,所以一般不会把它设置成正常启动的运行级别。- 常用的系统运行级别
①我们可以发现不能配置成运行级别0和6,因为一旦系统启动之后,要不就直接关机要不就开始不停的重启。
②级别4是系统保留的,一般也不会去使用。
③级别1是单用户工作状态,相当于安全模式,出现特殊情况我们才会去用。
④级别2和级别3只是有无网络这一区别,所以级别2相当于和级别3一样。
⑤所以最关键的就两个级别:3和5。
Centos7系统运行级别
Centos7的系统运行级别就彻底做了一个简化,就是3和5,对应的就是一个完全的控制台命令行模式和一个图形化的界面模式。所以Centos7里面的运行级别直接简化成两个关键字,或者说简化成两个target了,我们知道target可以认为就是一组服务的集合,这个集合设定了哪些服务该启动,哪些服务不该启动。
①multi-user.target
,相当于之前的运行级别3
②graphical.target
,相当于之前的运行级别5
Centos7查看当前默认的运行级别:systemctl get-default
。
这里,可以按Tab键,进行从setup退出到控制台的一些操作
Centos6查看当前默认的运行级别:去配置文件/etc/inittab
中查看,我们这里是Centos7,当然这里边就全被注释掉了,就没有对应默认启动级别定义了。
系统运行级别切换:
假如说现在正在运行级别5的状态下,想切到运行级别3下面去,方法如下:
①通过快捷键Ctrl Alt F2直接切入到一个控制台页面来。如果想切回去,按Ctrl Alt F1即可。
②使用命令行:init 3。通过init 5切换回图形化界面。
三、配置服务开机启动和关闭防火墙
了解了系统的运行级别之后,我们就更加清楚所有的服务在不同的运行级别下边是否能够自行启动都是可以配置的。之前我们用setup直接看到了一个图形化的界面操作之后,就可以去指定当前系统级别自启动的一些系统服务。
Centos6配置服务自启动
查看所有服务的自启动情况:
打开一个终端,执行chkconfig --list
命令。
①它会列出我们当前所有的systemV服务,不包含原生systemd服务。这是因为centos6及之前的版本是基于systemV系统,它在启动的时候第一个启动的是init进程,由它来启动所有的服务。而到了centos7版本之后,那最初启动的init就被systemd取代。
②我们知道systemd不光是一个守护进程,它其实是一个系统服务的集合。init进程只能是单一启动,单线程。而systemd可以并行启动,它的启动速度就会快很多,这也就是为什么centos7切换到了systemd服务。
③对于Centos6版本执行chkconfig --list
就只能列出针对systemV里边的所有服务,也就是netconsole和network。我们可以看到服务后边是0到6这7个数字和开/关的定义,这表示不同的系统运行级别这个服务是否是开机自启的
④由于之前我们把netconsole关了,所以全是关。network中,0、1、6级别是关闭的,2、3、4、5是开启的。
图形化界面中开启/关闭所有服务的自启动:
如果我们在setup中将network自动启动关闭
然后再通过chkconfig --list查看network在各个运行级别下的自启动情况。可以看到所有运行级别下都关闭了自启动。
于是我们再去setup中打开,network又恢复原样了。
命令行开启/关闭所有服务的自启动:
通过chkconfig network off
关闭有所有服务的开机自启动。
通过chkconfig network on
开启所有服务的开机自启动。
针对某个级别开启/关闭某个服务的自启动:
通过chkconfig --level 3 network off
命令,我们可以将系统运行级别3下面network服务的自启动关闭。
通过chkconfig --level 3 network on
命令,又可以将其打开。
Centos7配置服务自启动
Centos6的服务管理中,用service命令来做服务的开启和停止,然后又用chkconfig做当前服务的开机自启动配置。用了两个命令就非常麻烦,所以Centos7就统一了。前面我们在Centos7中开启或者停止一个服务的时候用的是systemctl,这个systemctl可以控制当前systemd所有服务的状态,其实就是我们当前系统和服务的管理者。我们之前更改主机名的时候(不用重启电脑)用了一个操作叫做hostnamectl。所以我们可以看到Centos7做系统管理的时候都是ctl这样一个后缀,那只不过这个hostnamectl是专门管理当前的主机名儿,而systemctl就管理所有的服务,包括管理这些服务的开机自启动状态。
查看指定服务的自启动情况:
通过systemctl status NetworkManager命令可以查看NetworkManager服务的状态,包含了开机自启动状态。我们可以看到loaded后面跟了NetworkManager这个服务,然后又跟了enable,这代表是开机自启动的。后面preset代表默认开机自启动情况,可以看到是enable,代表开机自启动。
命令行开启/关闭指定服务的自启动:
通过systemctl disable NetworkManager关闭NetworkManager的开机自启动。
通过systemctl enable NetworkManager开启NetworkManager的开机自启动。
查看所有服务的开机自启动信息:
通过sytemctl list-unit-files
显示所有服务的开机自启动信息。systemd的管理模式下,所有的service、target这些服务打包起来都叫做unit,都是systemctl管理的单元。所以接下来就要把所有的单元都列举出来。
这里面我们可以看到service、对应的pass、mount这些这些都是systemctl管理的单元。其中,enable就是开机自启动,disable就是开机不启动。static指的是现在不能确定它到底是启动还是不启动的,因为当前这个系统服务是跟其它服务相关联的,可能依赖于其他的服务。在这种情况下,自然不能直接去设定到底是自启动还是不自启动了。
配置当前防火墙的开机自启动
①Centos6的防火墙服务
Centos6中的防火墙服务叫做iptables。如果想关防火墙的话,直接使用命令iptables service stop就可以了。
问题: 为什么之前防火墙叫iptables?
回答: 防火墙给我们当前机器的网络连接加了一层保护,这就相当于做了IP名单的筛选机制,所以哪些IP放行,哪些IP拦住。所以它本身就是一张表,对应各个IP是否放行。
②Centos7的防火墙服务
Centos7之后的版本防火墙叫做firefalld,后边这个d就表示这是一个守护进程deamon。
----停止防火墙服务:systemctl stop firewalld.service
----开启防火墙服务:systemctl sart firewalld.service
----关闭防火墙的开机自启动:systemctl disable firewalld.service
----开启防火墙的开机自启动:systemctl enable firewalld.service
四、关机重启
系统关机命令
-
shutdown:默认1分钟后关机
-
shutdown -c:取消指定好的关机操作
-
shutdown now:立即关机
-
shutdown 数字:指定多少分钟后关机
-
shutdown 时间:指定某个时间点关机
sync同步
问题: 为什么Linux里默认shutdown不是马上就关机,而是还要等一分钟。
回答: 这牵扯到Linux里的一个系统特性,就是说在做关机操作之前先要做一个叫sync的操作。sync就是同步的意思,把数据从内存同步到硬盘里面去。
预读和延迟写入: Linux系统为了提高磁盘的读写效率,对磁盘做了预读和延迟写入这两个操作。也就是说,读的时候是预先读取的,而写入的时候是延迟写入的。这样的好处是:比方说我们通过vim打开了一个文档,接下来我做了一些编辑,然后:w做了保存。正常来讲,我们就应该把vim缓冲区的所有数据立即写入到磁盘中,当前的文档就直接保存了。但是在Linux系统里边,我们会发现假如我们时不时的就把当前的系统状态(所有需要保存的内容)全部往硬盘里面去写的话,时时刻刻写的话,显然效率不够高,因为我们知道硬盘读写是很耗费系统性能的。所以Linux的做法是:设置一个缓冲区buffer,有了数据想要写入的时候并不是直接把这个缓冲区直接刷到硬盘里面去,而是等这个缓冲区全满了之后才把所有的东西统一写入到硬盘当中,这就可以提高我们硬盘读写的性能。
sync
如果我做完保存之后就直接关机了,那岂不是这个buffer里面的数据没有刷进去就会被丢掉,这就带来了一些安全隐。或者说出现系统掉电,那这个时候数据就全丢失了。所以这里有一个把当前缓冲区的内容立刻同步到硬盘的一个操作,就叫做sync。所以如果我们养成好习惯的话,这就相当于是一个手动存盘的操作,而等buffer满了之后再写入的话,就相当于系统给我们做的一个定时的自动存盘。
注: 实际上直接做shutdown now
操作,也要先执行sync操作才会关机。
其它一些命令
halt
:立即停机。当前的系统关掉但是不断电,不断电代表可能我们内存里面的数据还能保持着。所以我们可以使用这种方式使系统处于一个比较低水平的维护状态,就还能保持着系统里边的一些东西。
poweroff
:关机,断电。
reboot
:重启,等同于shutdown -r now
。
shutodwn -H
:相当于–halt,停机
shutdown -r
:-r=reboot,重启