《Linux基础知识-2》

Linux基础知识-2

4. Linux 进程管理

进程管理是 Linux 系统管理中至关重要的一部分,涉及监控、控制和优化系统中运行的各类进程。有效的进程管理不仅能提升系统性能,还能确保系统的稳定性和安全性。以下将详细介绍 Linux 进程管理的各个方面,并通过具体示例加以说明。

4.1 进程概念与生命周期

理解进程的基本概念和生命周期,对于有效地管理和控制系统中的任务至关重要。

4.1.1 什么是进程?
定义与基本概念

进程是操作系统中程序执行的实例。它是系统进行资源分配和调度的基本单位,每个进程都有自己的地址空间、执行代码、数据、文件描述符和其他资源。进程可以看作是一个正在运行的程序,具有独立的执行流和生命周期。

基本特点:

独立性:每个进程独立运行,拥有自己的内存空间。
动态性:进程在生命周期中会经历创建、执行、等待和终止等状态。
并发性:多个进程可以同时在系统中运行,提高资源利用率。
异步性:进程的执行顺序不固定,取决于调度策略和系统资源。

进程与线程的区别

进程线程都是操作系统中执行任务的基本单位,但它们有以下区别:

特性 进程 线程
独立性 高,每个进程有独立的内存空间 低,同一进程的线程共享内存空间
资源消耗 较大,需要独立的资源 较小,共享进程的资源
通信方式 通过进程间通信(IPC)进行 通过共享内存进行
创建与销毁 相对复杂且耗时 简单且快速
崩溃影响 可能影响整个进程 只影响当前线程,不影响同一进程的其他线程

示例:

假设有一个 Web 服务器程序,该程序可以启动多个进程或线程来处理多个客户端请求。

多进程模式:每个客户端请求由一个独立的进程处理,进程之间相互独立,互不干扰。
多线程模式:所有客户端请求由多个线程在同一进程中处理,线程之间共享内存,通信更高效,但一个线程的崩溃可能影响整个进程。

进程的资源与隔离

每个进程在系统中运行时,会占用一定的资源,包括:

CPU 时间:用于执行进程的指令。
内存:进程的代码段、数据段和堆栈。
文件描述符:用于访问文件、设备和网络资源。
信号:用于进程间的通信和控制。

资源隔离确保了一个进程无法直接访问或修改另一个进程的资源,增强了系统的稳定性和安全性。操作系统通过内存管理和权限控制来实现资源隔离。

示例:

用户 alice 启动了一个文本编辑器进程 gedit,该进程只能访问和修改用户 alice 的文件,无法直接访问其他用户的文件或系统关键文件。

4.1.2 进程的状态与 PID
进程状态(运行、睡眠、停止、僵尸)

进程在其生命周期中会经历不同的状态:

运行(Running):进程正在使用 CPU 或准备使用 CPU。
可中断睡眠(Interruptible Sleep):进程等待某个事件(如 I/O 完成),可以被信号中断。
不可中断睡眠(Uninterruptible Sleep):进程等待某个事件,无法被信号中断,通常用于等待硬件事件。
停止(Stopped):进程被信号暂停,通常由调试工具或用户发送。
僵尸(Zombie):进程已终止,但其父进程尚未回收其资源。

状态转移示例:

创建:进程被创建,进入运行状态。
等待:进程执行过程中需要等待某些事件,进入睡眠状态。
唤醒:事件发生,进程被唤醒,重新进入运行状态。
终止:进程完成任务,进入僵尸状态,等待父进程回收资源。

进程标识符(PID)与父进程ID(PPID)

每个进程在系统中都有一个唯一的 进程标识符(PID),用于标识和管理进程。父进程ID(PPID) 是创建该进程的父进程的 PID。

示例:

用户 alice 启动一个终端,终端进程的 PID 为 1000。在该终端中启动一个 gedit 进程,gedit 的 PID 为 1001,其 PPID 为 1000

查看进程的 PID 和 PPID:

ps -ef | grep gedit

输出示例:

alice     1001  1000  0 Apr27 ?        00:00:05 gedit

1001:PID
1000:PPID

查看进程状态的工具(ps, top, htop

1. ps 命令

ps(process status)用于显示当前系统中的进程信息。

基本用法:

ps

常用选项:

ps aux:显示所有用户的所有进程,详细信息。
ps -ef:类似于 ps aux,使用不同的格式。

示例:

ps aux | grep ssh

输出示例:

root       1320  0.0  0.1  22500  4100 ?        Ss   Apr27   0:01 /usr/sbin/sshd
alice     1450  0.0  0.2  32768  8200 pts/0    Ss   Apr27   0:00 bash
alice     1500  0.0  0.1  35600  4200 pts/0    R+   Apr27   0:00 ps aux
alice     1501  0.0  0.0  10320   840 pts/0    S+   Apr27   0:00 grep ssh

2. top 命令

top 提供实时的进程信息和系统资源使用情况,适用于监控和管理系统性能。

基本用法:

top

3. htop 命令

htoptop 的增强版,提供更友好的界面和更多的交互功能。需要手动安装。

安装 htop

sudo apt-get install htop      # Debian/Ubuntu
sudo yum install htop          # CentOS/RHEL
sudo pacman -S htop            # Arch Linux

基本用法:

htop

界面优势:

彩色显示,易于阅读。
支持鼠标操作。
提供更多的排序和筛选选项。

4.2 查看进程信息

查看和分析进程信息是进程管理的基础,帮助系统管理员了解系统状态、资源使用和潜在的问题。

4.2.1 ps – 显示当前进程

ps 命令用于显示系统中的当前进程信息,支持多种选项和格式。

基本用法

命令语法:

ps [options]

示例:

显示当前用户在当前终端中的进程:

ps

输出示例:

  PID TTY          TIME CMD
 1450 pts/0    00:00:00 bash
 1500 pts/0    00:00:00 ps
常用选项(如 ps aux, ps -ef

1. ps aux

显示所有用户的所有进程,包含详细信息。

命令:

ps aux

输出示例:

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.1  22500  4100 ?        Ss   Apr27   0:01 /sbin/init
root       1320  0.0  0.1  22500  4100 ?        Ss   Apr27   0:01 /usr/sbin/sshd
alice     1450  0.0  0.2  32768  8200 pts/0    Ss   Apr27   0:00 bash
alice     1500  0.0  0.1  35600  4200 pts/0    R+   Apr27   0:00 ps aux
alice     1501  0.0  0.0  10320   840 pts/0    S+   Apr27   0:00 grep ssh

2. ps -ef

类似于 ps aux,使用不同的格式显示所有进程。

命令:

ps -ef

输出示例:

UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 Apr27 ?        00:01:00 /sbin/init
root      1320     1  0 Apr27 ?        00:01:00 /usr/sbin/sshd
alice     1450  1320  0 Apr27 pts/0    00:00:00 bash
alice     1500  1450  0 Apr27 pts/0    00:00:00 ps -ef
alice     1501  1500  0 Apr27 pts/0    00:00:00 grep ssh
输出格式与解释

ps auxps -ef 提供的输出包含多个字段,每个字段代表进程的不同属性。

常见字段解释:

USER:进程所有者。

PID:进程标识符。

%CPU:进程使用的 CPU 百分比。

%MEM:进程使用的内存百分比。

VSZ:进程使用的虚拟内存大小(KB)。

RSS:进程使用的实际物理内存大小(KB)。

TTY:进程关联的终端。

STAT

:进程状态代码。

R:运行
S:睡眠
D:不可中断睡眠
T:停止
Z:僵尸

START:进程启动时间。

TIME:进程使用的累计 CPU 时间。

COMMAND:启动进程的命令及参数。

示例:

ps aux | grep nginx

输出示例:

root      2001  0.0  0.1  50000  3000 ?        Ss   Apr27   0:00 nginx: master process /usr/sbin/nginx
www-data 2002  0.0  0.2  60000  4000 ?        S    Apr27   0:00 nginx: worker process
www-data 2003  0.0  0.2  60000  4000 ?        S    Apr27   0:00 nginx: worker process
4.2.2 top – 实时查看系统资源

top 提供实时的系统资源使用情况和进程信息,是监控系统性能的重要工具。

基本用法

命令:

top

启动界面示例:

top - 10:30:15 up 5 days,  3:45,  2 users,  load average: 0.15, 0.10, 0.05
Tasks: 150 total,   1 running, 149 sleeping,   0 stopped,   0 zombie
%Cpu(s):  2.0 us,  1.0 sy,  0.0 ni, 96.0 id,  1.0 wa,  0.0 hi,  0.0 si,  0.0 st
MiB Mem :   7972.0 total,   1200.0 free,   3000.0 used,   3772.0 buff/cache
MiB Swap:   2048.0 total,   2048.0 free,      0.0 used.   4000.0 avail Mem

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
 1500 alice     20   0  35600   4200   840 R   0.0  0.1   0:00.00 ps
 1501 alice     20   0  10320    840    560 S   0.0  0.0   0:00.00 grep
界面与交互操作

top 的交互界面中,可以通过键盘命令执行多种操作:

P:按 CPU 使用率排序。
M:按内存使用率排序。
T:按运行时间排序。
k:杀死进程,需要输入 PID。
r:改变进程优先级(renice)。
q:退出 top

示例操作:

按内存使用率排序:

M 键,将进程按内存使用率从高到低排序。

杀死一个进程:

k 键,输入目标进程的 PID,例如 1501,并按回车。

更改进程优先级:

r 键,输入目标进程的 PID,例如 1500,然后输入新的优先级值(例如 10)。

自定义显示内容(排序、过滤)

top 允许用户自定义显示内容,以更好地监控特定的进程或资源。

常用自定义操作:

添加/移除列:

f 键,进入字段管理界面,可以添加或移除显示的列。

更改排序列:

o 键,输入要排序的字段名称,例如 %CPU%MEM

筛选进程:

/ 键,输入要筛选的关键词,例如 ssh,仅显示包含该关键词的进程。

示例操作:

添加 COMMAND 列:

f 键,使用箭头键导航到 COMMAND,按 d 键添加该列。

%MEM 排序:

o 键,输入 %MEM,按回车。

筛选显示 bash 相关进程:

/ 键,输入 bash,按回车。

4.2.3 htop – 更友好的进程监控工具

htoptop 的增强版,提供更直观的界面和更多的功能,适用于需要更高效和友好的进程监控的场景。

安装与基本用法

安装 htop

sudo apt-get install htop      # Debian/Ubuntu
sudo yum install htop          # CentOS/RHEL
sudo pacman -S htop            # Arch Linux

启动 htop

htop
界面优势与功能

htop 提供彩色显示、图形化的 CPU 和内存使用情况、更直观的进程树、支持鼠标操作等优势。

界面示例:

  PID USER      PRI  NI  VIRT   RES   SHR S CPU% MEM%   TIME+  Command
 1500 alice      20   0 35600  4200   840 R  0.0  0.1   0:00.00 ps aux
 1501 alice      20   0 10320   840   560 S  0.0  0.0   0:00.00 grep ssh
常用快捷键与操作

F1:帮助。
F2:设置。
F3:搜索。
F4:筛选。
F5:树状视图。
F6:选择排序列。
F9:杀死进程。
F10:退出 htop

示例操作:

搜索进程:

F3 键,输入 nginx,按回车,htop 将高亮显示包含 nginx 的进程。

杀死进程:

使用箭头键选中目标进程,按 F9,选择信号(如 SIGTERM),按回车终止进程。

切换到树状视图:

F5 键,htop 将以树状结构显示进程,便于查看父子进程关系。

4.2.4 pgrep – 根据名称查找进程

pgrep 是一个用于根据名称或其他属性查找进程的命令,返回匹配进程的 PID。它简化了进程查找和管理的过程。

基本用法

命令语法:

pgrep [选项] 模式

示例:

查找所有名称包含 ssh 的进程:

pgrep ssh

输出示例:

1320
2001

表示有两个进程名称包含 ssh,其 PID 分别为 13202001

常用选项(如 -u, -l, -f

1. -u:指定用户

查找指定用户的进程:

pgrep -u alice bash

输出示例:

1450
1600

2. -l:显示进程名称

显示进程的 PID 及名称:

pgrep -l ssh

输出示例:

1320 sshd
2001 ssh-agent

3. -f:匹配完整命令行

匹配完整的命令行,而不仅仅是进程名称:

pgrep -f "nginx: worker process"

输出示例:

2002
2003
应用场景

批量终止进程:结合 kill 命令批量终止特定名称的进程。
监控特定进程:定期检查某个服务是否在运行。
脚本自动化:在脚本中自动查找和管理进程。

示例:批量终止所有 nginx 进程

kill $(pgrep nginx)

注意事项:

使用 pgrep 时确保模式足够精确,避免匹配不必要的进程。
对于关键系统进程,谨慎终止,以免影响系统稳定性。

4.3 进程管理与控制

进程管理与控制包括终止、暂停、恢复和后台执行进程等操作,确保系统资源的有效利用和任务的顺利完成。

4.3.1 kill – 终止进程

kill 命令用于发送信号给进程,通常用于终止不响应的进程。

基本用法(按 PID)

命令语法:

kill [信号] PID

默认信号:

如果未指定信号,默认发送 SIGTERM(15),请求进程正常终止。

示例:终止 PID 为 1500 的进程

kill 1500

输出:

无输出,命令执行成功表示信号已发送。

验证进程是否终止:

ps -p 1500

如果进程已终止,输出将为空。

信号的使用(如 SIGTERM, SIGKILL

信号用于控制进程的行为,常见信号包括:

SIGTERM(15):请求进程终止,进程可以捕获并进行清理操作。
SIGKILL(9):强制终止进程,无法被捕获或忽略。
SIGSTOP:暂停进程执行。
SIGCONT:继续执行被暂停的进程。

发送不同信号的示例:

发送 SIGTERM

kill -SIGTERM 1500

或使用信号编号:

kill -15 1500

发送 SIGKILL

kill -SIGKILL 1500

或使用信号编号:

kill -9 1500

示例操作:

假设进程 1500 是一个挂起的应用程序,无响应。

尝试正常终止:

kill 1500

如果进程未响应,强制终止:

kill -9 1500
常见实例与注意事项

实例 1:终止一个僵尸进程

僵尸进程无法被 kill 命令终止,因为它已经完成执行,只等待其父进程回收资源。解决方法是终止父进程,让系统自动回收僵尸进程。

# 查找僵尸进程
ps aux | grep 'Z'

# 假设僵尸进程的 PPID 为 1320
kill -HUP 1320

实例 2:暂停和恢复进程

虽然 kill 主要用于发送终止信号,但也可以发送暂停(SIGSTOP)和恢复(SIGCONT)信号。

# 暂停进程 1500
kill -SIGSTOP 1500

# 恢复进程 1500
kill -SIGCONT 1500

注意事项:

权限:只有进程所有者或超级用户才能发送信号。
谨慎使用 SIGKILL:强制终止进程可能导致数据丢失或系统不稳定,应尽量先尝试 SIGTERM
避免终止关键系统进程:终止如 initsystemd 等关键进程可能导致系统崩溃。

4.3.2 pkill – 按名称终止进程

pkill 是一个更方便的工具,用于根据进程名称或其他属性发送信号,简化进程管理。

基本用法

命令语法:

pkill [选项] 模式

示例:终止所有名称包含 nginx 的进程

pkill nginx

说明:

默认发送 SIGTERM 信号,请求进程正常终止。

常用选项(如 -u, -f, -SIG

1. -u:指定用户

终止指定用户的进程:

pkill -u alice bash

2. -f:匹配完整命令行

匹配完整的命令行内容:

pkill -f "python script.py"

3. -SIG:指定信号

发送特定信号:

pkill -SIGKILL nginx

或使用信号编号:

pkill -9 nginx
应用场景与示例

场景 1:终止所有 python 进程

pkill python

场景 2:终止特定用户的进程

终止用户 bob 的所有 ssh 进程:

pkill -u bob ssh

场景 3:发送 SIGSTOP 信号暂停进程

pkill -SIGSTOP nginx

注意事项:

模式匹配的准确性:确保模式足够精确,以避免终止不相关的进程。
权限:与 kill 类似,只有进程所有者或超级用户才能发送信号。
谨慎使用高权限信号:如 SIGKILL,避免对系统稳定性造成影响。

4.3.3 killall – 终止所有匹配进程

killall 命令用于终止所有名称匹配指定模式的进程,适用于同时管理多个相同类型的进程。

基本用法

命令语法:

killall [选项] 进程名

示例:终止所有 nginx 进程

killall nginx

说明:

默认发送 SIGTERM 信号,请求进程正常终止。

常用选项与参数

1. -u:指定用户

终止指定用户的进程:

killall -u alice bash

2. -s:指定信号

发送特定信号:

killall -s SIGKILL nginx

或使用信号编号:

killall -9 nginx

3. -I:忽略大小写

忽略进程名称的大小写:

killall -I Nginx

4. -w:等待进程终止

等待所有进程终止后再返回:

killall -w nginx
应用场景与注意事项

场景 1:重启 Web 服务器

killall -9 nginx
service nginx start

场景 2:终止特定用户的进程

killall -u bob firefox

注意事项:

避免误杀进程:确保进程名准确,避免终止系统关键进程。
权限控制:只有进程所有者或超级用户才能终止进程。
信号选择:优先使用 SIGTERM,必要时使用 SIGKILL

4.3.4 暂停、恢复和后台执行进程

在命令行中运行的前台进程可以通过快捷键和命令进行暂停、恢复和后台执行,提升任务管理的灵活性。

使用 Ctrl+Z 暂停进程

当一个进程在前台运行时,可以通过按下 Ctrl+Z 将其暂停,进程进入后台的停止状态。

示例:

gedit

操作:

按下 Ctrl+Z,输出如下:

[1]+  Stopped                 gedit
使用 bg 将进程放到后台

将已暂停的进程恢复执行,并在后台继续运行。

命令:

bg

示例操作:

bg

输出示例:

[1]+ gedit &
使用 fg 将进程恢复到前台

将后台运行的进程恢复到前台,使其继续与用户交互。

命令:

fg

示例操作:

fg

输出示例:

gedit
使用 jobs 查看后台任务

jobs 命令用于列出当前终端的所有后台任务及其状态。

命令:

jobs

输出示例:

[1]+  Running                 gedit &
[2]-  Stopped                 vim
实例操作

示例 1:暂停并后台运行进程

启动一个长时间运行的进程,如 gedit

gedit

Ctrl+Z 暂停进程:

[1]+  Stopped                 gedit

将进程放到后台继续运行:

bg
[1]+ gedit &

示例 2:查看并恢复后台任务

查看后台任务:

jobs
[1]+  Running                 gedit &
[2]-  Stopped                 vim

vim 恢复到前台:

fg %2
vim

注意事项:

终端关闭影响:后台任务在终端关闭后可能被终止,除非使用 nohupscreen 等工具。
资源占用:后台进程仍然占用系统资源,应根据需要合理管理。

4.3.5 nohup – 让进程在退出后继续运行

nohup(no hang up 的缩写)用于启动一个进程,使其在用户退出终端或关闭会话后仍然继续运行。常用于运行长时间执行的任务。

基本用法

命令语法:

nohup command [args] &

示例:启动一个长时间运行的脚本 backup.sh,使其在用户注销后继续运行

nohup ./backup.sh &

操作结果:

生成 nohup.out 文件,记录进程的标准输出和标准错误。
进程在后台运行,独立于终端会话。

常见应用场景(如长时间运行的任务)

数据备份:启动备份脚本,确保备份任务在用户注销后继续运行。
服务器进程:启动需要持续运行的服务器进程,如 Web 服务器、数据库服务器。
批处理任务:执行需要较长时间完成的批处理任务,如数据分析、文件转换。

示例操作:

启动 backup.sh 脚本,并将输出重定向到 backup.log

nohup ./backup.sh > backup.log 2>&1 &

验证进程是否在运行

ps aux | grep backup.sh

注意事项:

输出重定向:默认情况下,nohup 将输出重定向到 nohup.out,可以通过 > 手动指定输出文件。
后台运行:使用 & 将进程放到后台,避免占用当前终端。
进程监控:结合 ps, top, htop 等工具监控 nohup 进程的状态。

实例与注意事项

实例 1:启动并监控一个 Python 脚本

nohup python3 long_task.py > long_task.log 2>&1 &

解释:

nohup:确保进程在终端关闭后继续运行。
python3 long_task.py:执行 Python 脚本。
> long_task.log:将标准输出重定向到 long_task.log
2>&1:将标准错误重定向到标准输出。
&:将进程放到后台运行。

实例 2:终止 nohup 启动的进程

查找进程 PID

ps aux | grep long_task.py

终止进程

kill PID

注意事项:

保持输出可用:定期检查输出日志文件,确保任务按预期运行。
权限:确保有足够的权限启动和管理 nohup 进程。
资源管理:监控 nohup 进程的资源使用,避免占用过多系统资源。

4.4 守护进程与服务

守护进程是系统后台运行的服务进程,负责处理各种系统任务,如网络服务、定时任务、日志记录等。理解守护进程的概念和管理方法,是系统管理的重要技能。

4.4.1 什么是守护进程?
定义与特点

**守护进程(Daemon)**是指在后台运行、不与任何终端交互的进程,通常在系统启动时自动启动,并在整个系统运行期间持续运行,提供各种系统服务。

主要特点:

后台运行:不与用户直接交互,通过日志或配置文件提供信息。
持久性:通常随系统启动而启动,并在系统关闭前一直运行。
独立性:与其他进程相互独立,常作为系统服务运行。

常见守护进程示例(如 sshd, httpd, cron

sshd:提供 SSH 服务,允许远程登录和命令执行。
httpd / nginx:提供 Web 服务,处理 HTTP 请求。
cron:定时任务调度服务,执行预定的任务脚本。
syslogd:系统日志服务,收集和记录系统日志。
mysqld:MySQL 数据库服务,管理数据库操作。

守护进程的创建与管理

守护进程通常由系统启动脚本或服务管理工具(如 systemd)创建和管理。开发自定义守护进程时,需要遵循特定的创建规范,如分离终端、创建新会话、关闭文件描述符等。

创建守护进程的基本步骤:

分离终端:确保守护进程不与任何终端关联。
创建新会话:调用 setsid() 创建新会话,脱离控制终端。
更改工作目录:通常更改到根目录,避免占用挂载点。
重定向文件描述符:将标准输入、输出和错误重定向到 /dev/null 或日志文件。
处理信号:捕获和处理必要的信号,确保守护进程稳定运行。

示例:

以下是一个简单的 C 程序示例,展示如何创建一个守护进程:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>

int main() {
   
   
            
    pid_t pid;

    // 创建子进程
    pid = fork();
    if (pid < 0) exit(EXIT_FAILURE);
    if (pid > 0) exit(EXIT_SUCCESS);

    // 创建新会话
    if (setsid() < 0) exit(EXIT_FAILURE);

    // 捕获并忽略信号
    signal(SIGCHLD, SIG_IGN);
    signal(SIGHUP, SIG_IGN);

    // 再次 fork 子进程
    pid = fork();
    if (pid < 0) exit(EXIT_FAILURE);
    if (pid > 0) exit(EXIT_SUCCESS);

    // 更改工作目录
    chdir("/");

    // 重置文件权限掩码
    umask(0);

    // 关闭所有打开的文件描述符
    for (int x = sysconf(_SC_OPEN_MAX); x >= 0; x--) {
   
   
            
        close(x);
    }

    // 打开日志文件
    open("/var/log/mydaemon.log", O_CREAT | O_WRONLY | O_APPEND, 0600);

    // 守护进程的主循环
    while (1) {
   
   
            
        // 执行任务
        sleep(30);
    }

    exit(EXIT_SUCCESS);
}

说明:

创建子进程并终止父进程,确保守护进程与终端分离。
创建新会话和进程组,进一步分离进程。
更改工作目录到根目录,避免占用挂载点。
关闭所有文件描述符,确保守护进程不与任何文件关联。
打开日志文件,用于记录守护进程的活动。
主循环中执行守护进程的核心任务。

4.4.2 systemdinit 系统

现代 Linux 发行版主要使用 systemd 作为初始化系统和服务管理器,而传统的 init 系统仍在一些老旧系统中使用。理解这两者的基本概念和功能,有助于更有效地管理系统服务。

init 系统的基本概念与功能

init 是 Unix 系统中的第一个用户空间进程,负责系统启动过程中的初始化工作,如挂载文件系统、启动系统服务等。传统的 init 系统使用运行级别(runlevels)来管理系统状态,每个运行级别对应不同的服务集。

常见运行级别:

运行级别 描述
0 关机
1 单用户模式
2 多用户模式,无网络
3 多用户模式,有网络
4 用户自定义
5 多用户模式,有图形界面
6 重启

管理服务:

通过编辑 /etc/init.d/ 目录下的脚本,控制服务的启动和停止。

示例:启动 ssh 服务

sudo /etc/init.d/ssh start
systemd 的基本概念与功能

systemd 是现代 Linux 系统中的初始化系统和服务管理器,取代了传统的 init 系统,提供了更高效和灵活的服务管理方式。systemd 使用单元(unit)文件来定义和管理服务、挂载点、设备等资源。

主要特点:

并行启动:加快系统启动速度。
依赖管理:自动处理服务间的依赖关系。
统一管理:通过统一的命令和接口管理所有系统资源。
日志管理:集成 journald 提供统一的日志记录。

systemdinit 的比较
特性 init systemd
启动速度 较慢,顺序启动 较快,并行启动
服务依赖管理 手动管理,依赖关系复杂 自动管理,依赖关系清晰
日志管理 依赖外部日志系统 集成 journald,统一日志记录
单一工具 多种工具分别管理服务 单一命令(systemctl)管理所有服务
配置方式 脚本化配置 单元文件配置
功能扩展 功能有限 功能丰富,支持快照、定时任务等高级功能
systemd 的优势与特点

高效并行启动:通过并行启动服务,显著提高系统启动速度。
统一管理工具:使用 systemctl 命令统一管理所有服务和资源。
动态管理:支持动态添加、删除和修改服务配置,无需重启系统。
丰富的功能:支持服务监控、自动重启、资源限制、容器管理等高级功能。
集成日志:通过 journald 提供统一和结构化的日志记录,便于日志分析和管理。

示例:启动和管理 nginx 服务

# 启动 nginx 服务
sudo systemctl start nginx

# 停止 nginx 服务
sudo systemctl stop nginx

# 重启 nginx 服务
sudo systemctl restart nginx

# 查看 nginx 服务状态
sudo systemctl status nginx

# 启用 nginx 服务开机自启
sudo systemctl enable nginx

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容