目录
一、Linux程序与进程
1、程序,进程,线程的概念
名称 | 概念 |
---|---|
程序 | 是一组指令及参数的集合,按照既定的逻辑控制计算机运行用来完成特定任务,是静态的。 |
进程 | 是运行着的程序,是操作系统执行的基本单位,是程序运行的过程, 是动态的,是有生命周期及运行状态的。是操作系统分配内存、CPU时间片等资源的基本单位。 |
线程 | 是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。 |
2、程序和进程的区别
程序是静态的,它只是一组指令的集合,不具有任何的运行意义。而进程是程序运行的动态过程 |
---|
进程和程序并不是一一对应的关系,相同的程序运行在不同的数据集上就是不同的进程 |
进程还具有并发性和交往性,而程序却是封闭的 |
3、进程和线程的区别
一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发拥有多个线程,而一个线程同时只能被一个进程所拥有 |
---|
线程不能单独执行,但是每一个线程都有程序的入口、执行序列以及程序出口,它必须组成进程才能被执行 |
二、Linux进程基础(生命周期)
1、进程生命周期
①.父进程复制自己的地址空间创建一个新的(子)进程结构。每个新进程分配一个唯一的进程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、安装方法
①.使用独立的rmp包安装: 需要下载对应的rpm包,一般在centos系统镜像中存在大量的rpm包
②.rpm包命名方法
zip-0-11.el7.x86_64.rpm
软件名.版本号.安装平台.安装架构平台的位数(32位,x86或者64位,x86_64).rpm
③.rpm命令使用方法
已安装软件包查看选项
选项 | 作用 |
---|---|
-q | 查看指定rpm包是否安装;rpm -q 软件名 |
-qa(all) | 查看系统中所有已安装的软件包;rpm -qa [ |
-qi(infomation) | 查看已安装软件包的开发信息;rpm -qi 软件名 |
-ql(list) | 查看已安装软件包的安装路径及生成的文件;rpm -ql 软件名 |
-qf(find) | 查看命令由哪个软件包安装;which 命令字 rpm -qf 命令的绝对路径;常用于:系统中没有对应指令且不知道由哪个软件包安装生成 |
-qc | 查看已安装软件的配置文件;rpm -qc 软件名;一般情况下,使用rpm安装的应用程序的配置文件都存储在/etc/[应用程序的名称] |
-qd | 查看已安装软件的帮助文档信息;rpm -qd 软件名 |
未安装软件包查看选项
选项 | 作用 |
---|---|
-qpi | 查看未安装的软件包开发信息;rpm -pqi 软件包名称(全格式) |
-qpl | 查看未安装软件包的安装路径及生成文件;rpm -pql 软件包名称(全格式) |
安装、升级、卸载选项
选项 | 作用 |
---|---|
-i(install) | 安装软件包;rpm -ivh /path/软件包名称(全格式) |
-v(verify) | 详细显示安装过程 |
-h(human) | 人性化显示 |
-u(update) | 升级软件包;rpm -Uvh 软件包名称 |
-e(exclude) | 卸载已安装软件包 |
--nodeps | 忽略依赖关系的进行卸载、升级或安装 |
特殊安装
rpm -ivh * 将所有相关软件包放到同一目录下
3、yum(dnf)安装
可自动解决依赖文件
3.1、yum相关配置文件
类型 | 描述 | 语法 |
---|---|---|
yum源配置文件 | 指定yum程序运行时查找软件包的存储路径 | /etc/yum.repos.d |
yum程序配置文件 | yum程序运行时的运行配置 | /etc/dnf/dnf.conf |
缓存保存路径 | /var/cache/dnf |
3.2、yum源类型
类型 | 描述 | 语法 |
---|---|---|
本地yum源 | 利用本地存在的软件包路径 | file://localPath(绝对路径)路径下要包含“repodata(包含rpm包的元数据)”目录 |
网络yum源 | 利用网络存储的软件包路径 | 1.http://域名/Path (不常用)2.https://域名/Path 3.ftp://域名/Path (不常用) |
常见网络yum源 | 1.网易yum源2.阿里云yum源3.epel源 |
配置本地yum源
①mount /dev/sr0 /mnt
⑥yum makecache |
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
nginx编译安装
1.tar xf nginx-1.28.0.tar.gz
2.cd nginx-1.28.0
3. ./configure --prefix=/usr/local/nginx
发现依赖缺失
解决依赖
4.yum install -y pcre-devel或者untils
5.yum install -y zlib-devel
配置完成后
6. ./configure --prefix=/usr/local/nginx
在源码包下生成Makefile文件
7.make 编译
8.make install 安装
命令合并
./configure --prefix=/usr/local/nginx18 && make && make install
9.验证
cd /usr/local/nginx1.12
10.命令优化
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
四、Linux操作系统启动流程详解
1、概述
Linux启动流程是从按下电源键到用户登录的完整过程,分为传统BIOS+MBR和现代UEFI+GPT两种模式。
主流系统(如CentOS 7+/Ubuntu 18.04+)通常使用 UEFI + GRUB2 + systemd组合。
2、启动流程核心阶段
阶段 | 描述 | 作用 |
---|---|---|
电源与固件阶段 | UEFI/BIOS初始化 | 1.硬件自检(POST, Power-On Self-Test)2.UEFI特点:图形化界面、支持GPT分区、独立于OS的Shell环境3.定位启动设备:读取NVRAM中的启动项(efibootmgr 命令可管理) |
引导加载程序 | 1.GRUB2 核心作用2.用户交互 | 配置文件路径:/boot/grub2/grub.cfg (由grub2-mkconfig 生成) |
内核初始化 | 内核解压与初始化 | 1.加载vmlinuz :压缩的内核镜像2.initramfs 作用:包含根文件系统挂载前的驱动(如LVM、RAID);提供dracut 工具集(可通过dmesg |grep initramfs 查看日志)3.挂载根文件系统(/ )为只读模式 |
初始化进程 | 首个用户态进程 | 1.PID=1,替代传统init 2.核心任务:①.解析/etc/systemd/system/default.target (默认运行级别)②.并行启动服务单元(Unit)③.激活sysinit.target (系统初始化)、basic.target (基础服务) |
用户登录阶段 | 1.终端登录2.图形化登录 | 1.getty 服务生成终端(/etc/systemd/system/getty.target.wants/ ; 调用login 验证用户身份2.Display Manager(如GDM、LightDM)启动X/Wayland会话 |
五、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的一组通过层次组织的管理系统进程 |
运行级别
运行级别与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 当前运行级别数字 |
切换运行级别 | init 运行级别数字 |
查看默认运行级别 | systemctl get-default |
设置默认运行级别 | systemctl set-default 运行级别target |