Linux入门教程:P6->系统管理

本系列文章为尚硅谷武晟然老师的Linux入门教程学习笔记,前面的系列文章链接如下
Linux入门教程:P3->Linux文件系统
Linux入门教程:P4->Vim编辑器
Linux入门教程:P5->网络配置

一、Linux服务管理

前言

前面我们在修改了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命令去做服务管理,但是我们看到的这些操作都只能去启动/停止/查看一个服务。系统里面有很多服务是开机自启动的,我们知道如果所有的服务全都是开机自启动的话,肯定会拖慢启动速度,于是我们就需要配置服务的开机自启动选项。


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这个守护进程。


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
在这里插入图片描述
Centos6查看当前默认的运行级别:去配置文件/etc/inittab中查看,我们这里是Centos7,当然这里边就全被注释掉了,就没有对应默认启动级别定义了。
在这里插入图片描述
系统运行级别切换:
假如说现在正在运行级别5的状态下,想切到运行级别3下面去,方法如下:
①通过快捷键Control alt F2直接切入到一个控制台页面来。如果想切回去,按Control 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,重启

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

知初与修一

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值