鸟哥linux私房菜基础篇
Contents
鸟哥linux私房菜
第16章 程序管理和 SELinux 初探
工作管理
在 linux 中与终端相关联的进程称为工作。 在一个终端中可以有多个后台工作, 但是只有一个前台工作。 并且这些工作的标准输出和标准错误输出,都是输出在屏幕上。
你可以在命令后面加上一个&
将一个工作放到后台运行, 也可以使用 ctrl+Z
将一个正在前台运行的工作放到后台执行。 并且每个工作都会配分工作号。
下面是一些工作相关的命令:
|
|
如果你想要你退出终端后,工作继续执行, 你可以使用nohub 命令。
|
|
第五部分: Linux 系统管理员
第17章 认识系统服务
在 linux 中常驻在内存汇中,提供一些功能的进程称为守护进程(daemon)。 linux 有两种方式来管理这些守护进程的程序, 一个称为 init
和 systemd
. 不过前者目前已经废弃。
使用 init 管理服务
使用 init 管理守护进程有下面的特点:
服务的管理方式
init 所有的守护进程的启动脚本都放到 /etc/ini.d
下面, 都是由shell写成的脚本程序, 你可以使用下面的命令管理守护进程:
- 启动:/etc/init.d/daemon start
- 关闭:/etc/init.d/daemon stop
- 重新启动:/etc/init.d/daemon restart
- 状态观察:/etc/init.d/daemon status
服务启动的分类
init 有两种方式来启动守护进程:stand alone
和 super daemon
两种方式:
- 独立启动模式 (stand alone):服务独立启动,该服务直接常驻于内存中,提 供本机或用户的服务行为,反应速度快。
- 总管程序 (super daemon):由特殊的 xinetd 或 inetd 这两个总管程序提供socket 对应或 port 对应的管理。当没有用户要求某 socket 或 port 时, 所需要的服务是不会被启动的。若有用户要求时, xinetd 总管才会去唤醒相对应的服务程序。当该要求结束时,这个服务也会被结束掉~ 因为通过 xinetd 所总管,因此这个家伙就被称为 super daemon。好处是可以通过 super daemon 来进行服务的时程、连线需求等的控制,缺点是唤醒服务需要一点时间的延迟。
服务的依赖性问题
有些服务存在一些依赖问题, 机该服务依赖另外一个服务提供的功能。 那么在启动这个服务之前, 就必须启动另外一个服务。 这些关系都需要你自己进行手动处理。
执行等级分类
在linux 中内置了各种各样的服务, 你或许不需要启动所有的服务。 linux 系统提供了7个不同的运行级别, 分别是 0, 1,2,…,6, 比较重要的是 1)单人模式、3)纯文本模式、5)文字加图形界面。 不同的运行级别需要执行的服务是不同, 其各个等级的需要执行的脚本分别放在/etc/rc[0-7].d
中, 这些目录中都是连接到 /etc/init.d
中的连接文件, 其名字为(SXXdaemon
, S
表示启动该服务, XX
脚本的启动顺序, daemon
是服务名字。 根据XX
就能够依次执行程序, 解决程序相互依赖问题。
添加任务到执行等级中
当你要添加服务到执行等级中, 也就是创建名为 SXXXdaemon
的连接文件中时, 可以使用下面的命令:
- 默认启动
checkconfig daemon on
- 默认不启动
checkconfig daemon off
- 观察任务行为
checkconfig --list daemon
切换执行级别
当你要从纯命令行 (runlevel 3) 切换到图形界面 (runlevel 5), 不需要手动启 动、关闭该执行等级的相关服务,只要“ init 5 ”即可切换,init 这小子会主动去分析/etc/rc.d/rc[35].d/ 这两个目录内的脚本, 然后启动转换 runlevel 中需要的服务~就完成整体的 runlevel 切换。
使用 systemd 管理服务
服务启动脚本的存放目录
在 systemd 将过去daemon的执行脚本称为 unit, 这些unit 又根据功能被分为 type
. 基本的类型又系统服务, scoket 服务, 以及提供类似不同的运行级别的 target 类型等。 其配置文件放在下面的目录下:
- /lib/systemd/system 每个服务的启动脚本, 类似以前
/etc/init.d
. - /run/systemd/system 系统在运行过程中产生的服务脚本, 优先级别比
/usr/lib/systemd/system
高 - /etc/systemd/system 系统管理员根据主机系统的需求创建的执行脚本, 类似以前的
/etc/rc[d].d/SXX
的功能, 其都是连接到/lib/systemd/system
中文件的连接文件, 其优先级别比/run/sysntemd/system
高。
服务的分类
在 systemd
中服务被称为 unit
, 而 unit
又被分为不同的type
, 如何区别不同的type
呢? 答案是通过执行的脚本的后缀:
扩展类型 | 主要的服务功能 |
---|---|
.service | 一般的服务类型, 主要是系统服务 |
.socket | 内部程序通过 socket 交换数据的服务,通常是用于 IPC功能, 或者收集系统的监控信息之类 |
.target | 执行环境类型, 一组服务的集合, 类似 /etc/rc_[0-9].d |
.mount .automount | 文件系统挂载相关的服务 |
.path | 用来检查某些文件或者目录的服务类型 |
.timer | 循环执行的服务类型 |
通过systemd管理服务
systemctl [command] [unit]
其中 Command
有下面的参数:
- start: 立刻重启后面的服务
- stop: 立刻关闭后面的服务
- restart: 立刻关闭后面的服务, 然后启动后面的服务(stop 和start)
- reload: 在不关闭后面的服务, 然后重新载入配置文件, 让配置文件生效
- enable:设置后面的服务开启启动
- disable: 禁止后面的服务开启启动
- is-active: 当前服务是否在运行中
- is-enable:后面的服务是否是开机启动
正在执行的进程有下面的状态:
- active (running):正有一只或多只程序正在系统中执行
- active (exited):仅执行一次就正常结束的服务,目前并没有任何程序在系统中执行。
- active (waiting):正在执行当中,不过还再等待其他的事件才能继续处理。
- nactive:这个服务目前没有运行的意思
服务的默认状态有:
- enabled:这个 daemon 将在开机时被执行
- disabled:这个 daemon 在开机时不会被执行
- static:这个 daemon 不可以自己启动 (enable 不可),不过可能会被其他的 enabled 的服务来唤醒 (相依属性的服务)
- mask:这个 daemon 无论如何都无法被启动!因为已经被强制注销 (非删除)。可
通过 systemctl unmask 方式改回原本状态(mask 实际上就是让脚本连接到
/dev/null
文件。
通过systemctl 管理不同的运行环境
target
类似 init 中的运行级别, 下面是一些对照
systemd targets | SystemV runlevel | target aliases | Description |
---|---|---|---|
default.target | This target is always aliased with a symbolic link to either multi-user.target or graphical.target. systemd always uses the default.target to start the system. The default.target should never be aliased to halt.target, poweroff.target, or reboot.target. | ||
graphical.target | 5 | runlevel5.target | Multi-user.target with a GUI |
4 | ssrunlevel4.target | Unused. Runlevel 4 was identical to runlevel 3 in the SystemV world. This target could be created and customized to start local services without changing the default multi-user.target. | |
multi-user.target | 3 | runlevel3.target | All services running, but command-line interface (CLI) only |
2 | runlevel2.target | Multi-user, without NFS, but all other non-GUI services running | |
rescue.target | 1 | runlevel1.target | A basic system, including mounting the filesystems with only the most basic services running and a rescue shell on the main console |
emergency.target | S | Single-user mode—no services are running; filesystems are not mounted. This is the most basic level of operation with only an emergency shell running on the main console for the user to interact with the system. | |
halt.target | Halts the system without powering it down | ||
reboot.target | 6 | runlevel6.target | Reboot |
poweroff.target | 0 | ss | runlevel0.target Halts the system and turns the power off |
下面是一些执行环境相关的操作:
- systemctl get-default 获取当前默认执行环境
- systemctl set-default unit.target 设置默认的执行环境
- systemctl isolate unit.target 切换执行环境
- systemctl list-dependencies [–reverse]获取服务之间的依赖关系。
systemctl isolate multi-user.target
切换到纯文本的执行环境systemctl isolate graphical.target
切换到图形化的执行环境
Author mkfoyw
LastMod 2021-07-21