服务控制是指在操作系统中管理服务(system services)的过程,这些服务是执行指定系统功能的程序、例程或进程,以便支持其他程序,尤其是底层(接近硬件)程序。以下通过Linux系统中的systemd和sshd服务来详细举例解释服务控制:
一、systemd系统初始化程序
systemd是Linux系统(如RadHat、CentOS等)的系统初始化程序,它是系统开始的第一个进程,PID为1。systemd负责启动系统时初始化系统环境,管理服务(启动、停止、重启等),以及处理系统运行级别等。
常用命令
systemctl
: 现代Linux系统中用来管理系统服务的命令。service
: 在较老的Linux发行版中用来管理系统服务的命令。
注意:service指令管理的服务在/etc/init.d查看
service常用操作
(1)使用service
启动服务:
service [服务名称] start
例如,启动Apache服务:
service apache2 start
(2)使用service
停止服务:
service [服务名称] stop
例如,停止Apache服务:
service apache2 stop
(3)使用service
重启服务:
service [服务名称] restart
例如,重启Apache服务:
service apache2 restart
(4)使用service
查看服务状态:
service [服务名称] status
例如,查看Apache服务状态:
service apache2 status
二、使用systemctl命令控制服务
systemctl是systemd的命令行工具,用于控制和管理系统服务。以下是一些常用的systemctl命令及其解释:
1.查看服务状态:
systemctl status 服务名称
例如,查看sshd服务的状态:
systemctl status sshd
2.启动服务:
systemctl start 服务名称
例如,启动sshd服务:
systemctl start sshd
3.停止服务:
systemctl stop 服务名称
例如,停止sshd服务:
systemctl stop sshd
4.重启服务:
systemctl restart 服务名称
例如,重启sshd服务:
systemctl restart sshd
5.重新加载服务配置:
当服务配置文件发生更改时,可以使用此命令重新加载配置,而无需停止和重新启动服务。
systemctl reload 服务名称
例如,重新加载sshd服务配置:
systemctl reload sshd
6.启用或禁用服务开机自启:
systemctl enable 服务名称 # 启用开机自启
systemctl disable 服务名称 # 禁用开机自启
例如,启用sshd服务开机自启:
systemctl enable sshd
7.查看所有服务的状态:
systemctl list-units
8.查看所有服务的开机状态:
systemctl list-unit-files
9.查看服务是否开机时自启
systemctl is-enabled 服务名
三、Linux操作系统运行级别
Linux操作系统具有7个运行级别,每个级别代表系统不同的运行状态和功能。以下是这些运行级别的详细解释和举例:
1. 运行级别0:系统停机状态
- 描述:这是一个关机状态,系统不会启动。默认情况下,系统不会设置为这个运行级别,否则它将无法正常启动。
- 举例:如果尝试将系统的运行级别设置为0,系统将立即关机。
2. 运行级别1:单用户工作状态
- 描述:系统以单用户模式运行,只有root用户有权访问系统,用于系统维护。远程登录是被禁止的。
- 举例:当系统出现问题需要维护时,管理员可以切换到此级别进行修复,因为只有root用户有权限访问,所以可以保证系统的安全性。
3. 运行级别2:多用户状态(没有NFS)
- 描述:系统处于多用户模式,但没有网络文件系统(NFS)支持。
- 举例:在一些不需要网络支持的场景下,系统可以运行在此级别。
4. 运行级别3:完整的多用户文本模式(有NFS)
- 描述:系统处于完全的多用户模式,有网络支持,并且登录后用户会进入控制台命令行模式。
- 举例:这是大多数Linux服务器和桌面系统的默认运行级别,用户可以通过命令行界面进行各种操作。
5. 运行级别4:系统未使用,保留
- 描述:这个运行级别通常不被使用,但在某些特殊情况下可能会用到。
- 举例:在笔记本电脑电池耗尽时,可能会切换到这个级别来做一些设置。
6. 运行级别5:图形GUI模式
- 描述:系统使用X11控制台,登录后用户会进入图形用户界面(GUI)模式,如X Window系统。
- 举例:在大多数Linux桌面系统中,当用户登录时,会看到一个图形化的桌面环境,这就是运行级别5。
7. 运行级别6:系统正常关闭并重启
- 描述:这是系统的重启状态。默认情况下,系统不会设置为这个运行级别,否则它将无法正常启动,而是一直重启。
- 举例:如果尝试将系统的运行级别设置为6,系统将立即重启。
运行级别的原理和配置
- 原理:Linux系统的运行级别是通过/etc/rc.d/init.d/目录下的服务脚本和/etc/rc.d/下的rcN.d目录来实现的。每个rcN.d目录对应一个运行级别,并包含指向/etc/rc.d/init.d/中服务脚本的符号链接。系统会根据指定的运行级别进入对应的rcN.d目录,并按照文件名顺序启动或停止服务。
- 配置:系统管理员可以使用init命令来切换运行级别,例如“init 3”将系统切换到运行级别3。同时,也可以使用runlevel命令来查看当前系统的运行级别。
四、切换运行级别
一、使用init命令
init命令是Linux标准初始化系统的命令,可以用来切换运行级别。使用init命令时,需要指定目标运行级别的数字。例如:
- 切换到运行级别0(关机):
sudo init 0
- 切换到运行级别1(单用户模式):
sudo init 1
- 切换到运行级别2(文本模式,无网络):
sudo init 2
- 切换到运行级别3(文本模式,有网络):
sudo init 3
- 切换到运行级别5(图形模式):
sudo init 5
- 切换到运行级别6(重启):
sudo init 6
二、使用systemctl命令
systemctl命令是systemd初始化系统的命令,在最新版本的Linux发行版中被广泛使用。使用systemctl命令时,需要指定目标运行级别的名称。例如:
- 切换到运行级别0(关机):
sudo systemctl poweroff
- 切换到运行级别1(单用户模式):
sudo systemctl rescue
- 切换到运行级别3(文本模式,有网络):
sudo systemctl isolate multi-user.target
(注意,虽然这里写的是multi-user.target,但它通常对应运行级别3,而不是运行级别2,因为运行级别2在现代Linux系统中已经不太常用了) - 切换到运行级别5(图形模式):
sudo systemctl isolate graphical.target
- 切换到运行级别6(重启):
sudo systemctl reboot
需要注意的是,systemctl命令中的isolate选项用于将系统切换到指定的运行级别,并保持在该级别,直到系统被明确指示切换到另一个级别。
三、使用telinit命令
telinit命令与init命令类似,也可以用来改变运行级别,但更加灵活。telinit命令可以接受单数参数,表示直接切换到指定的运行级别。例如:
- 切换到运行级别3:
telinit 3
- 切换到运行级别6(重启):
telinit 6
四、查看当前运行级别
要查看当前系统的运行级别,可以使用runlevel命令或who -r命令。例如:
- 使用runlevel命令:
runlevel
,该命令会显示当前运行级别和上一个运行级别的信息。 - 使用who -r命令:
who -r
,该命令也会显示当前系统的运行级别信息。
五、修改默认运行级别
要修改系统的默认运行级别,即系统启动时自动进入的运行级别,可以通过以下方法实现:
- 使用systemctl set-default命令:例如,要将默认运行级别设置为多用户模式(运行级别3),可以使用
sudo systemctl set-default multi-user.target
命令。然后重新启动系统,系统将启动到新设置的运行级别。 - 修改/etc/inittab文件(适用于某些Linux发行版):打开/etc/inittab文件,找到类似于
id:3:initdefault:
的行,将其中的数字3修改为你想要的运行级别,然后保存文件并退出编辑器。重新启动系统后,系统将启动到新设置的运行级别。但需要注意的是,不是所有的Linux发行版都使用/etc/inittab文件来配置默认运行级别。
综上所述,切换Linux系统的运行级别可以通过多种命令来实现,具体选择哪种方法取决于你的Linux发行版和具体需求。在切换运行级别之前,请确保你了解每个运行级别的含义和可能的影响,以避免对系统造成不必要的损害。