007 Linux 引导过程与服务控制

Linux 引导过程与服务控制

1. Linux 系统引导过程

Linux 系统的引导过程是从计算机开机到用户登录界面出现的一系列有序步骤,确保系统硬件被正确初始化、内核加载并运行,最终启动用户态进程。

1.1 开机自检(BIOS/MBR

BIOS(:传统的固件接口,开机后首先运行,负责检测 CPU、内存、硬盘等硬件设备是否正常,随后读取硬盘的第一个扇区(MBR,主引导记录)中的引导程序。

MBR:现代固件接口,功能更强大,支持更大容量磁盘(GPT 分区表)、图形化界面和安全启动(Secure Boot),会从 EFI 系统分区中加载引导管理器(如 GRUB)。

1.2 引导加载程序(GRUB)

GRUB是大多数 Linux 发行版默认的引导加载程序,位于 MBR 或 EFI 系统分区,主要功能包括:

显示引导菜单,允许用户选择要启动的操作系统(如多个 Linux 内核版本或 Windows)。

加载选定的 Linux 内核到内存,并将内核参数传递给内核(如 root 分区位置、启动级别等)。

加载初始 RAM 磁盘(initramfs/initrd),这是一个临时文件系统,包含启动过程中必需的驱动程序(如硬盘控制器驱动),帮助内核识别并挂载根文件系统。

1.3 内核初始化

内核被加载到内存后,会完成以下工作:

初始化硬件设备(CPU、内存、网络卡等),建立进程管理、内存管理等核心功能。

解压并挂载初始 RAM 磁盘,加载根文件系统所需的驱动程序。

找到并挂载根文件系统(/),切换到根文件系统运行。

1.4 启动初始化系统(Systemd)

内核完成初始化后,会启动用户空间的第一个进程(PID=1),现代 Linux 系统中通常是 Systemd,它负责:

启动系统服务(如网络服务、SSH 服务等)。

初始化系统环境(设置主机名、挂载文件系统等)。

启动登录管理器(如 GDM、LightDM),最终显示用户登录界面。

2. Systemd 服务管理

Systemd 是 Linux 系统的初始化系统和服务管理器,取代了传统的 SysV init,通过统一的框架管理系统启动、服务、设备等,提高了系统的启动速度和管理效率。

2.1 基本概念

单元(Unit):Systemd 管理的最小单元,包括服务(.service)、套接字(.socket)、目标(.target,类似传统运行级别)等,每种单元对应不同的系统资源。

服务(Service):最常用的单元类型,代表后台运行的程序(如 httpd、sshd),通过.service 文件定义启动、停止等行为。

2.2 常用命令

systemctl start 服务名:启动指定服务,例如systemctl start sshd启动 SSH 服务。

systemctl stop 服务名:停止指定服务,例如systemctl stop httpd

systemctl restart 服务名:重启服务(先停止再启动),例如systemctl restart mysql

systemctl reload 服务名:重新加载服务配置文件(不停止服务),适用于支持热加载的服务,例如systemctl reload nginx

systemctl enable 服务名:设置服务开机自启动,例如systemctl enable hpptd

systemctl disable 服务名:取消服务开机自启动,例如systemctl disable postfix

systemctl status 服务名:查看服务状态(运行中、停止、失败等),例如systemctl status crond,输出包含服务是否活跃、最近日志等信息。

2.3 目标(Target)管理

Target 用于模拟传统的运行级别,定义系统的运行状态:

multi-user.target:多用户命令行模式(类似 runlevel 3),无图形界面。

graphical.target:图形化界面模式(类似 runlevel 5),依赖 multi-user.target。

poweroff.target:关机状态,reboot.target:重启状态。

切换目标的命令:systemctl isolate 目标名,例如systemctl isolate multi-user.target切换到命令行模式。

3. 程序与进程的关系

程序和进程是 Linux 系统中与执行任务相关的两个核心概念,二者既紧密关联又存在区别。

3.1 程序(Program)

程序是存储在磁盘上的可执行文件(如二进制文件、脚本文件),包含一系列指令和数据,是静态的实体,不占用系统资源(除磁盘空间外)。例如/bin/ls是一个程序,用于列出目录内容。

3.2 进程(Process)

进程是程序的一次动态执行过程,当程序被加载到内存中运行时,就成为一个进程,它拥有独立的内存空间、CPU 时间片、进程 ID(PID)等系统资源,是动态变化的。例如运行ls命令时,系统会创建一个对应的进程,执行完成后进程终止。

3.3 关系总结

  • 程序是进程的静态模板,进程是程序的动态实例,一个程序可以对应多个进程(如多次运行ls会产生多个独立进程)。
  • 进程在生命周期中会经历创建(fork)、运行、暂停、终止等状态,而程序始终以文件形式存在。

4. 查看进程信息(ps,top,pgrep)

查看进程信息是系统管理的重要操作,有助于监控系统状态、排查故障。

4.1 ps 命令

ps(Process Status)用于静态查看当前进程的快照,常用选项:

  • ps aux:显示系统中所有进程的详细信息,包括:
    • USER:进程所有者;PID:进程 ID;%CPU:CPU 使用率;%MEM:内存使用率;VSZ:虚拟内存大小;RSS:物理内存占用;TTY:进程关联的终端;STAT:进程状态(如 R 运行、S 睡眠、Z 僵尸);START:启动时间;COMMAND:进程对应的命令。
  • ps -ef:以全格式显示进程信息,包含 PPID(父进程 ID),便于查看进程间的父子关系,例如ps -ef | grep sshd查找与 sshd 相关的进程。
  • ps -l:显示当前终端关联的进程信息,侧重进程的优先级、状态等细节。

4.2 top 命令

top 用于动态实时监控进程状态,默认每 3 秒刷新一次,界面分为两部分:

  • 系统统计信息:包括系统时间、运行时间、登录用户数、负载平均值(1/5/15 分钟)、CPU 使用率(用户态、系统态、空闲等)、内存和交换分区使用情况。
  • 进程列表:按 CPU 使用率排序(默认),可通过按键交互(如P按 CPU 排序、M按内存排序、k终止进程、q退出)。

4.3 pgrep 命令

pgrep 用于根据进程名或其他属性查找进程 ID,语法:pgrep [选项] 模式,例如:

pgrep sshd:返回所有名为 sshd 的进程 ID。

pgrep -u root:返回 root 用户启动的所有进程 ID。

pgrep -l nginx:同时显示进程名和 ID(-l选项)。

4.4 pstree命令

以树形结构列出进程信息

pstree 命令默认情况下只显示各进程的名称, 结合以下常用的参数使用:

  • -p:选项使用时可以同时列出对应的PID号

  • -u:选项可以列出对应的用户名

  • -a:选项可以列出完整的命令信息

5. 进程的启动方式

Linux 中进程的启动方式多样,可根据场景选择手动启动、自动启动或按需启动。

5.1 手动启动

前台启动:在终端直接输入命令,进程会占用当前终端,例如ping www.baidu.com,按下Ctrl+C可终止进程。

后台启动:在命令后加&,进程在后台运行,终端可继续输入其他命令,例如nohup ./long_run.sh &nohup确保进程在终端关闭后仍运行),后台进程的输出默认会显示在终端,可重定向到文件(如command > output.log 2>&1 &)。

5.2 自动启动

系统服务:通过 Systemd 的enable命令设置服务开机自启动(如systemctl enable sshd),进程随系统引导自动运行。

用户登录启动:在用户的~/.bashrc~/.profile等配置文件中添加命令,用户登录时自动执行(如启动自定义脚本)。

定时任务:通过cronat命令(见 6.4、6.5)设置进程在指定时间自动启动。

5.3 按需启动

套接字激活:Systemd 的.socket 单元可监听网络端口或文件描述符,当有请求时自动启动对应的服务进程(如sshd.socket检测到 SSH 连接请求时启动sshd.service),减少系统资源占用。

6. 进程的前后台调度(jobs,kill,at,cron)

进程的前后台调度允许用户灵活控制进程的运行状态,包括切换前后台、终止进程、定时执行等。

6.1 jobs 命令

jobs 用于查看当前终端后台运行的进程(作业),输出包括作业号([] 中的数字)、状态(Running/Stopped)和命令,例如:

jobs:列出所有后台作业。

jobs -l:显示作业号对应的 PID。

6.2 前后台切换

将前台进程转入后台:在前台进程运行时按下Ctrl+Z,进程会暂停并转入后台,状态为 Stopped,例如运行vi file.txt后按Ctrl+Z,可通过jobs查看作业号。

将后台进程调至前台fg %作业号,例如fg %1将 1 号作业调至前台继续运行。

恢复后台暂停的进程bg %作业号,例如bg %1让 1 号作业在后台恢复运行(状态变为 Running)。

6.3 kill 命令

kill 用于向进程发送信号,控制进程行为(如终止、暂停),基本语法:kill [信号] PID

9(SIGKILL):强制终止进程(无法被忽略),例如kill -9 5678强制杀死 5678 进程。

结合pkill命令可按进程名发送信号,例如pkill -9 nginx终止所有 nginx 进程。

6.4 at 命令

at 用于安排进程在指定的未来时间执行一次,语法:at 时间,输入命令后按Ctrl+D确认,例如:

at 16:30 2025-08-17:2025年8月17日16:30 执行命令。

at now + 10 minutes:10 分钟后执行命令,例如输入echo "Hello" > /tmp/at_test.txt,10 分钟后会生成该文件。

atq:查看等待执行的 at 任务;

atrm 任务号:删除指定 at 任务。

6.5 cron 命令

cron 用于设置周期性执行的任务(定时任务),适用于需要重复执行的操作(如日志备份、系统清理)。

6.5.1 基本语法

cron 任务通过 crontab 文件定义,格式为:分 时 日 月 周 命令,各字段含义:

:0-59;:0-23;:1-31;:1-12;:0-7(0 和 7 都代表周日)。

特殊符号:*(任意值)、/(间隔,如*/5表示每 5 单位)、-(范围,如1-5)、,(列表,如1,3,5)。

6.5.2 常用命令

crontab -e:编辑当前用户的 cron 任务,例如添加50 7 * * * /usr/bin/systemctl start httpd
表示每天7:50启动httpd服务

crontab -l:查看当前用户的 cron 任务。

crontab -r:删除当前用户的所有 cron 任务。

系统级别的 cron 任务存放在/etc/crontab/etc/cron.d/目录,需指定执行用户(如0 0 * * * root /clean.sh)。

如果没有执行任务,可以在/var/log/cron查看,可输入tail -f /var/log/cron

总结

Linux 系统引导过程分为四步:开机自检阶段,BIOS 检测硬件并定位引导程序;引导加载程序(GRUB)负责加载内核和初始 RAM 磁盘;内核初始化硬件并挂载根文件系统;最终启动 Systemd 初始化系统,完成服务启动和环境设置。

Systemd 作为现代服务管理器,通过单元(尤其是.service)管理服务,提供 start、stop、enable 等命令控制服务状态,目标(Target)模拟传统运行级别,实现系统状态切换。

程序是静态的可执行文件,进程是程序的动态执行实例,一个程序可对应多个进程。查看进程的工具中,ps 静态显示进程快照,top 动态监控系统和进程状态,pgrep 按条件查找进程 ID。

进程启动方式包括手动(前台 / 后台)、自动(服务自启动、用户登录启动、定时任务)和按需启动(套接字激活)。前后台调度通过 jobs 查看后台作业,结合 fg、bg 切换进程状态;kill 命令发送信号控制进程(如终止、重载);at 用于单次定时任务,cron 则处理周期性任务,满足不同场景的进程调度需求。

这些内容全面覆盖了 Linux 系统从启动到进程管理的关键环节,为系统管理和运维提供了坚实的理论与操作基础。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值