从零开始的云计算生活——第十一天,知识延续,程序管理。

一·故事背景

今日整体内容是第十天的剩余部分再加上程序管理的开头部分,详细可以回到第十天看新增加内容,现在开始讲解新内容。

二·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 #不常用

https://域名/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

    • 核心任务:

      1. 解析/etc/systemd/system/default.target(默认运行级别)

      2. 并行启动服务单元(Unit)

      3. 激活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命令的使用,命令要熟记。

相关推荐
李天琦2 小时前
git查看commit属于那个tag
linux·git·云计算
^Rocky6 小时前
uniapp 实现腾讯云 IM 消息已读回执
uni-app·云计算·腾讯云
Estar.Lee6 小时前
腾讯云开发者社区文章内容提取免费API接口教程
android·云计算·腾讯云·api·免费api·api大全
亚林瓜子6 小时前
AWS API Gateway 配置WAF(中国区)
云计算·gateway·aws·waf
_可乐无糖6 小时前
AWS WebRTC:获取ICE服务地址(part 3):STUN服务和TURN服务的作用
云计算·webrtc·aws
阿里云大数据AI技术11 小时前
Fusion引擎赋能:流利说如何用阿里云Serverless Spark实现数仓计算加速
大数据·人工智能·阿里云·spark·serverless·云计算
SaaS_Product13 小时前
企业网盘百科:企业网盘的概念定义?
云计算·产品经理
Akamai中国19 小时前
使用 Akamai 分布式云与 CDN 保障视频供稿传输安全
分布式·安全·云计算·音视频
husertuo20 小时前
Shell基础命令
linux·华为·云计算
国际云1 天前
腾讯云国际站性能调优
运维·服务器·数据库·云计算·腾讯云