一·故事背景
今日整体内容是第十天的剩余部分再加上程序管理的开头部分,详细可以回到第十天看新增加内容,现在开始讲解新内容。
二·Linux程序与进程
1·程序,进程,线程的概念
-
程序:是一段静态的代码,它是应用软件执行的蓝本。程序通常保存在磁盘上,由一系列有序指令组成,用于指导计算机执行特定的任务。程序本身不包含任何动态执行的概念,它是静态的实体。
-
进程:是程序的一次动态执行过程。当一个程序被加载到内存并开始执行时,就形成了一个进程。进程是操作系统进行资源分配和调度的基本单位,具有独立的内存空间和系统资源。进程从创建、执行到消亡,对应了从代码加载、执行到执行完毕的一个完整过程。
-
线程:是进程中的一个执行单元,是操作系统能够进行运算调度的最小单位。一个进程可以包含多个线程,这些线程共享进程的内存空间和其他资源,但每个线程都有独立的执行路径和程序计数器。线程自己不拥有独立的存储空间,而是与同一进程的其他线程共享数据。
2·程序和进程的区别
-
程序是静态的,它只是一组指令的集合,不具有任何的运行意义。而进程是程序运行的动态过程;
-
进程和程序并不是一一对应的关系,相同的程序运行在不同的数据集上就是不同的进程;
-
进程还具有并发性和交往性,而程序却是封闭的。
3·进程和线程的区别
-
一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发拥有多个线程,而一个线程同时只能被一个进程所拥有;
-
线程不能单独执行,但是每一个线程都有程序的入口、执行序列以及程序出口,它必须组成进程才能被执行。
三·Linux进程基础
1·进程生命周期
-
父进程复制自己的地址空间(fork) 创建一个新的(子)进程结构。每个新进程分配一个唯一的进程 ID(PID),PID和父进程ID(PPID)是子进程环境的元素,任何进程都可以创建子进程。
-
所有进程都是第一个系统进程的后代:在centos6中,第一个系统进程是init,而在centos7中,第一个系统进程是systemd。
2·父子进程的关系
-
子进程由父进程产生,在linux系统中,使用系统调用fork创建进程。fork复制的内容包括父进程的数据和堆栈段以及父进程的进程环境 。子进程继承父进程的安全性身份、过去和当前的文件描述符、端口和资源特权、环境变量,以及程序代码。
-
运行过程 :子进程运行时父进程休眠。当子进程完成时发出(exit)信号请求,在退出时,子进程已经关闭或丢弃了其资源环境后,剩余释放不掉的资源称之为僵尸进程。父进程在子进程退出时收到信号而被唤醒,清理剩余的结构,然后继续执行其自己的程序代码。
四·程序管理
1·常见的软件包类型
①rpm包:
.rpm为后缀,红帽系列操作系统(RedHat,CentOS,OpenSUSE)主要的软件包封装格式,已经做好默认设置,如安装路径,配置文件存放路径,需要手动的解决依赖关系。(相关命令:rpm,yum,dnf)
②deb包:
.deb为后缀,debian系列操作系统(debian,Ubuntu,kali)主要的软件包封装格式,已经做好默认设置,如安装路径,配置文件存放路径等,需要手动的解决依赖关系。(相关命令:dpkg,apt[-get])
依赖关系:安装软件包所需的基础环境
③二进制包:
一般以.bin为后缀,直接被计算机执行安装。
④源码包:
一般C语言(高级语言中最底层的语言,一般结合汇编进行驱动编写)编写,安装前需要编译为二进制包;配置【如,安装路径,配置文件路径,运行用户,运行组,功能模块】--->编译--->安装;文件比较集中,便于后期进行维护与管理。
2·安装方法
使用独立的rpm包安装
需要下载对应的rpm包,一般在centos系统镜像中存在大量的rpm包
rpm包的命名方法
zip-0-11.el7.x86_64.rpm
软件名.版本号.安装平台.安装架构平台的位数(32位,x86或者64位,x86_64).rpm
rpm命令使用方法
已安装软件包查看选项
|--------|---------------------|-------------------------|
| 选项 | 描述 | 用法 |
| -q | 查看指定rpm包是否安装 | rpm -q 软件名 |
| -qa | 查看系统中所有已安装的软件包 | rpm -qa [| grep 软件名] |
| -qi | 查看已安装软件包的开发信息 | rpm -qi 软件名 |
| -ql | 查看已安装软件包的安装路径及生成的文件 | rpm -ql 软件名 |
| -qf | 查看命令由哪个软件包安装 | rpm -qf 命令的绝对路径 |
| -qc | 查看已安装软件的配置文件 | rpm -qc 软件名 |
| -qd | 查看已安装软件的帮助文档信息 | rpm -qd 软件名 |
未安装软件包查看选项
|--------|--------------------|---------------------|
| 选项 | 描述 | 用法 |
| -qpi | 查看未安装的软件包开发信息 | rpm -pqi 软件包名称(全格式) |
| -qpl | 查看未安装软件包的安装路径及生成文件 | rpm -pql 软件包名称(全格式) |
安装、升级、卸载选项
|----------|-------------------|---------------------------|
| 选项 | 描述 | 用法 |
| -i | 安装软件包 | rpm -ivh /path/软件包名称(全格式) |
| -v | 详细显示安装过程 | / |
| -h | 人性化显示 | / |
| -U | 升级软件包 | rpm -Uvh 软件包名称 |
| -e | 卸载已安装软件包; | / |
| --nodeps | 忽略依赖关系的进行卸载、升级或安装 | / |
特殊安装
|--------|-----------------|-------------|
| 选项 | 描述 | 用法 |
| / | 将所有相关软件包放到同一目录下 | rpm -ivh * |
3·yum(dnf)安装
可以自动解决依赖关系
①yum相关配置文件
a.yum源配置文件
指定yum程序运行时查找软件包的存储路径

b.yum程序配置文件
yum程序运行时的运行配置

c.缓存保存路径

②yum源类型
a.本地yum源
利用本地存在的软件包路径
file://localPath(绝对路径)【路径下要包含"repodata(包含rpm包的元数据)"目录】
b.网络yum源
利用网络存储的软件包路径
http://域名/Path #不常用
ftp://域名/Path #不常用
c.常见开源镜像站
1.阿里云镜像源:
阿里云提供了CentOS 7的归档镜像源,适合继续使用CentOS 7的用户。可以通过以下命令下载并替换原有的YUM源:
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-7.repo
yum clean all
yum makecache
2.清华大学开源镜像站
清华大学开源软件镜像站也提供了CentOS的归档镜像源,可以通过以下命令下载并替换原有的YUM源:
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.tuna.tsinghua.edu.cn/repo/Centos-7.repo
yum clean all
yum makecache
3.中科大镜像站
中国科学技术大学也提供了CentOS的归档镜像源,可以通过以下命令下载并替换原有的YUM源
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.ustc.edu.cn/repo/Centos-7.repo
yum clean all
yum makecache
d.配置本地yum源

4·yum命令语法
yum [options] command [package ...]
|-------------------------------------|---------------|
| 命令 | 描述 |
| install [软件包名] [--downloadonly] | 安装【只下载】 |
| remove [软件包名] | 卸载 |
| list | 查看yum源中的软件包列表 |
| update [软件包名] | 更新所有软件包 |
| yum clean all | 清空元数据缓存 |
| yum makecache | 生成元数据缓存 |
5·源码包(编译)安装
需要依赖gcc和make环境
配置:cd 源码包的解压路径;./configure --prefix=安装路径(/usr/local/nginx)
编译:make
安装:make install
先在github上下载nginx-1.28.0.tar软件包,下载完成后拖动到虚拟机(Rocky9)中

然后进行解压
解压后进入文件夹内
可以查看帮助
此时提醒,没安装编译器
使用命令下载gcc make环境(若无法成功,将昨天放在yum.repos.d内的4个文件拿出来即可)
然后回到原地址运行命令
此时报错,缺少pcre环境,进行下载
再次运行后依然报错,说明此时prec版本不对,再次尝试pcre-utils,pcre-devel,若都不是需要网上查找

此时再次报警,需要安装zlib,再次下载zlib-devel(大概率)

此时输出结果为
在当前目录输入make进行编译
输入make instal进行安装
最后使用软连接将nginx命令放到sbin目录下(命令优化)此时就有了nginx命令

五·Linux操作系统启动流程详解
1·概述
Linux启动流程是从按下电源键到用户登录的完整过程,分为传统BIOS+MBR和现代UEFI+GPT两种模式。主流系统(如CentOS 7+/Ubuntu 18.04+)通常使用 UEFI + GRUB2 + systemd 组合。
2·启动流程核心阶段
a.电源与固件阶段
-
UEFI/BIOS初始化
-
硬件自检(POST, Power-On Self-Test)
-
UEFI特点:图形化界面、支持GPT分区、独立于OS的Shell环境
-
定位启动设备:读取NVRAM中的启动项(
efibootmgr
命令可管理)
-
b.引导加载程序(Bootloader)
-
GRUB2 核心作用
-
配置文件路径:
/boot/grub2/grub.cfg
(由grub2-mkconfig
生成) -
关键配置参数:
-
set root=(hd0,gpt1) # 指定/boot所在分区
linux /vmlinuz-5.4.0 root=/dev/sda2 ro # 内核路径及挂载参数
initrd /initramfs-5.4.0.img # 初始化内存文件系统
用户交互
-
按
e
临时编辑启动参数(如单用户模式systemd.unit=rescue.target
) -
按
c
进入GRUB命令行
c.内核初始化
-
内核解压与初始化
-
加载
vmlinuz
:压缩的内核镜像 -
initramfs
作用:-
包含根文件系统挂载前的驱动(如LVM、RAID)
-
提供
dracut
工具集(可通过dmesg | grep initramfs
查看日志)
-
-
挂载根文件系统(
/
)为只读模式
-
d.systemd 初始化进程
-
首个用户态进程
-
PID=1,替代传统
init
-
核心任务:
-
解析
/etc/systemd/system/default.target
(默认运行级别) -
并行启动服务单元(Unit)
-
激活
sysinit.target
(系统初始化)、basic.target
(基础服务)
-
-
关键操作命令
systemctl get-default # 查看默认target
systemctl set-default multi-user.target # 设置默认为命令行模式
journalctl -b # 查看本次启动日志


六·systemd管理机制
init进程是所有进程的父进程,systemd实际上是一种管理init的软件。只能管理rpm安装的
units存储路径
/usr/lib/systemd/system
基于unit概念实现,常见的unit类型
单元类型 | 扩展名 | 说明 |
---|---|---|
Service | .service | 描述一个系统服务 |
Target | .target | 描述一组systemd的单元 |
Socket | .socket | 描述一个进程间通信的套接字 |
Device | .device | 描述一个内核识别的设备文件 |
Mount | .mount | 描述一个文件系统的挂载点 |
Automount | .automount | 描述一个文件系统的自动挂载点 |
Swap | .swap | 描述一个内存交换设备或交换文件 |
Path | .path | 描述一个文件系统中文件或目录 |
Timer | .timer | 描述一个定时器(用于实现类似cron的调度任务) |
Snapshot | .snapshot | 用于保存一个systemd的状态 |
Scope | .scope | 使用systemd的总线接口以编程的方式创建外部进程 |
Slice | .slice | 描述居于Cgroup的一组通过层次组织的管理系统进程 |
1·运行级别
运行级别与target对应关系
运行级别 | Systemd的target | 说明 |
---|---|---|
0 | poweroff.target | 关机状态,使用该级别时将会关闭主机 |
1 | rescue.target | 单用户模式,不需要密码验证即可登录系统,多用于系统维护 |
2 | multi-user.target | 用户定义/域特定运行级别。默认等同于3 |
3 | multi-user.target | 字符界面的完整多用户模式,大多数服务器主机运行在此级别 |
4 | multi-user.target | 用户定义/域特定运行级别。默认等同于3 |
5 | graphical.target | 图形界面的多用户模式,提供了图形桌面操作环境 |
6 | reboot.target | 重新启动,使用该级别时将会重启主机 |
查看运行级别
runlevel
N|运行级别数字 当前运行级别数字

N表示none,上一个登陆级别。
切换运行级别
init 运行级别数字

查看默认运行级别
systemctl get-default

设置默认运行级别
systemctl set-default 运行级别target

2·systemctl命令的使用
systemctl 服务控制类型 服务名称[.service]
|------------|---------------------|--------------------------------------------------|
| 选项 | 描述 | 结果 |
| start | 启动 | / |
| stop | 停止 | / |
| restart | 重启 | 会停止服务 |
| reload | 重载 | 不停止服务,加载配置文件 |
| status | 查看状态 | Active: active (running) Active: inactive (dead) |
| is-enabled | 查看是否开机自启动 | disabled关闭开机自启动 enabled开启开机自启动 |
| --now | 配合enable与disable使用; | 在进行开机自启或不自启的同时进行打开或关闭指定服务 |
-t 指定unit类型
Unit Commands
list-units
列出所有unit,一般与-t结合

服务排错命令

七·总结
这只是程序管理的开始,后续会继续补充剩余内容,本次需要记忆的命令是yum相关的命令还有rpm一系列的命令,以后会经常使用。
今日补充了后续内容,主要是源码包的安装,操作流程及其一些问题的发生,最后是systemctl命令的使用,命令要熟记。