Linux引导过程与服务控制

目录

一、操作系统引导过程

1. 过程图示

2. 步骤解析

2.1 bios

2.2 mbr

2.3 grup

2.4 加载内核文件

3. 过程总结

4. centos6和centos7启动区别

5. 小结

二、服务控制及切换运行级别

1. systemd核心概念

2. 运行级别

3. 运行级别所对应的Systemd目标 

4. Systemd unit单元类型

5. 小结——service文件

三、排除启动类故障

1. 案例一:修复mbr和分区表

1.1 新增硬盘,将备份文件备份到新盘

1.2 模拟破坏

1.3 查看分区表 (十六进制)

1.4 进入急救模式修复

1.5 查看分区表,正常重启 

2. 案例二:修复grup文件及程序

2.1 模拟破坏

2.2 进入急救模式

2.3 切换根

2.4 重新安装grup2程序

2.5 重新生成配置文件

3. 案例三:破解密码

3.1 有光驱

3.1.1 切根

3.1.2 passwd

3.2 无光驱

3.2.1 进入系统,选择内核界面

3.2.2 进入单用户模式

3.2.3 重新挂载,添加读写权限

3.2.4 修改密码,添加标记

四、开机自启配置

1. centos6配置chkconfig开机自启nginx

2. centos7配置systemd开机自启nginx

3. 服务管理相关命令使用

4. 服务程序


一、操作系统引导过程

1. 过程图示

2. 步骤解析

2.1 bios

检测硬件是否正常,根据bios中的启动项设置去寻找内核文件;boot是开机启动程序,可以把内核文件放在:

  • 硬盘
  • 移动设备,u盘移动硬盘,光驱
  • 网络启动

2.2 mbr

也可以称为grupd第一阶段,因为grup太大第一个扇区存不下所有的grup程序,所以分为两部分,mbr的前446个字节 指引硬件找到内核

2.3 grup

根据grup配置文件中记录的位置,去找到内核文件;mbr之后的扇区,让上一阶段中的bootloader(引导加载器,引导硬件去找到内核,操作系统的核心)能识别下一阶段所在的分区上的文件系统

2.4 加载内核文件

把内核运行到内存中,启动第一个“祖宗”进程

[root@localhost ~]# pstree
systemd─┬─ModemManager───2*[{ModemManager}]├─NetworkManager───2*[{NetworkManager}]├─VGAuthService├─2*[abrt-watch-log]├─abrtd├─accounts-daemon───2*[{accounts-daemon}]├─alsactl├─anacron───run-parts─┬─awk│                     └─man-db.cron───mandb├─at-spi-bus-laun─┬─dbus-daemon───{dbus-daemon}│                 └─3*[{at-spi-bus-laun}]├─at-spi2-registr───2*[{at-spi2-registr}]├─atd
……

systemd进程是系统级的程序,代为管理系统上的程序。比如:rpcbind启动会监听111端口,在sleep状态下,如果有需要,systemd会将其唤醒。 

3. 过程总结

加电后bios程序会自检硬件,硬件无故障,会根据第一启动项去找内核,一般来说第一启动项是硬盘;找到硬盘后,会根据mbr的指引找到完整的grup程序,再根据grup的配置文件找到内核文件的具体位置,然后将内核文件加载到内存中运行,内存加载好后会启动第一个程序。

4. centos6和centos7启动区别

  • centos6:init,串行启动后续的进程,一个一个按顺序启动
  • centos7:systemctl,是并行启动程序,全部一起启动

5. 小结

在centos7中,yum及rpm安装的软件可以直接使用systemctl(centos6中使用chkconfig)去启动、关闭、重启、开机自启等功能;编译安装不可以直接使用systemctl命令去管理程序,需要手写配置文件,路径命名:/usr/lib/systemd/system/程序.service

二、服务控制及切换运行级别

1. systemd核心概念

为了完成进一步的系统引导过程,Linux内核首先将系统中的“/sbin/init”程序加载到内 存中运行(运行中的程序称为进程),init 进程负责完成一系列的系统初始化过程,最后等待用户进行登录。systemd即为system daemon,是linux下的一种init软件。在systemd中不同类型的systemd对象被统一称为单元(unit:描述这个软件是做什么的,以及基本信息),是让系统知道该如何进行操作和管理资源的主要对象,所以systemd有许多单元类型。systemd方便管理程序,将程序按照特定的功能分成了很多单元。

2. 运行级别

  • 0:关机
  • 1:单用户,类似于windows的急救模式
  • 2:字符界面,缺少一些功能,如:nfs
  • 3:字符界面
  • 4:字符界面,保留,没用过
  • 5:图形界面
  • 6:重启 

runlevel:查看当前运行级别(如输出3 5,表示之前是级别3,现在是级别5)

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

systemctl set-default :设置默认级别

如何调整默认级别?

利用init n命令,仅能临时修改运行级别。若想永久修改,需修改默认的运行级别设置。则需要修改配置文件:Centos7 系统之前的版本是通过/etc/inittab文件来定义系统,而 CentOS7 用的是target,centos7修改默认启动级别如下:

[root@localhost ~]# systemctl set-default multi-user.target
#设置默认第三启动级别
[root@localhost ~]# systemctl set-default graphical.target
#设置默认第五启动级别

3. 运行级别所对应的Systemd目标 

运行级别Systemd的target说明
0target关机状态,使用该级别时将会关闭主机
1rescue.target单用户模式,不需要密码验证即可登录系统,多用于系统维护
2multi-user.target用户定义/域特定运行级别。默认等同于3
3multi-user.target字符界面的完整多用户模式,大多数服务器主机运行在此级别
4multi-user.target用户定义/域特定运行级别。默认等同于3
5graphical.target图形界面的多用户模式,提供了图形桌面操作环境
6reboot.target重新启动,使用该级别时将会重启主机

4. Systemd unit单元类型

单元类型扩展名说明
Service.service描述一个系统服务软件
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.target描述一组systemd的单元

5. 小结——service文件

 service文件包含:[Unit]、[Service]、[Install]

三、排除启动类故障

1. 案例一:修复mbr和分区表

1.1 新增硬盘,将备份文件备份到新盘

[root@localhost ~]# mount /dev/sdb1 /mnt
[root@localhost ~]# dd if=/dev/sda of=/mnt/mbr count=1 bs=512  #备份mbr第一个扇区
记录了1+0 的读入
记录了1+0 的写出
512字节(512 B)已复制,0.000177847 秒,2.9 MB/秒

1.2 模拟破坏

[root@localhost ~]# dd if=/dev/zero of=/dev/sda count=1 bs=512  #zero空格写0
记录了1+0 的读入
记录了1+0 的写出
512字节(512 B)已复制,0.000353442 秒,1.4 MB/秒

1.3 查看分区表 (十六进制)

[root@localhost ~]# hexdump -C -n 512 /dev/sda
00000000  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00000200

1.4 进入急救模式修复

1.5 查看分区表,正常重启 

2. 案例二:修复grup文件及程序

2.1 模拟破坏

[root@localhost ~]# cd /boot/grub2
[root@localhost grub2]# ls
device.map  fonts  grub.cfg  grubenv  i386-pc  locale
[root@localhost grub2]# mv grub.cfg /opt                #移除配置文件

2.2 进入急救模式

tip:重启读条迅速按一次Esc,后续参考1.4选项

2.3 切换根

2.4 重新安装grup2程序

2.5 重新生成配置文件

3. 案例三:破解密码

3.1 有光驱

3.1.1 切根

同上步骤读条迅速按Esc,选择CD-ROM,“321”选项,输入命令chroot  /mnt/syssimage切根

3.1.2 passwd

直接输入命令passwd修改密码,完成后exit,重启reboot

3.2 无光驱

3.2.1 进入系统,选择内核界面

3.2.2 进入单用户模式

3.2.3 重新挂载,添加读写权限

3.2.4 修改密码,添加标记

四、开机自启配置

注:以下案例均已默认编译安装了nginx

1. centos6配置chkconfig开机自启nginx

[root@localhost ~]# cd /etc/init.d/
[root@localhost init.d]# vim nginx                       #写入配置
[root@localhost init.d]# chmod +x nginx                  #添加权限
[root@localhost init.d]# chkconfig --add nginx           #将服务加入chkconfig
[root@localhost init.d]# chkconfig --level 35 nginx on   #开启3和5级别自动启动
[root@localhost init.d]# service nginx start             #启动服务
[root@localhost init.d]# ss -natp | grep 80
LISTEN     0      128          *:80                       *:*                   users:(("nginx",pid=5032,fd=6),("nginx",pid=5031,fd=6))
[root@localhost init.d]# chkconfig --list                #查看服务
注:该输出结果只显示 SysV 服务,并不包含              
原生 systemd 服务。SysV 配置数据
可能被原生 systemd 配置覆盖。 要列出 systemd 服务,请执行 'systemctl list-unit-files'。查看在具体 target 启用的服务请执行'systemctl list-dependencies [target]'。netconsole     	0:关	1:关	2:关	3:关	4:关	5:关	6:关
network        	0:关	1:关	2:开	3:开	4:开	5:开	6:关
nginx          	0:关	1:关	2:关	3:开	4:关	5:开	6:关

配置脚本如下:

#!/bin/bash 
#chkconfig: - 99 20                        #-代表运行级别全不开,第99个启动,第20个关闭
#description:Nginx Service Control Script 
PROG="/ky35/nginx/sbin/nginx" 
PIDF="/ky35/nginx/logs/nginx.pid" case "$1" in              #如果命令里面有start,调用变量RPOG
start) $PROG 
;; 
stop) 
kill -s QUIT $(cat $PIDF) 
;; 
restart) 
$0 stop $0 start
;; 
reload) 
kill -s HUP $(cat $PIDF) 
;;
*) echo "Usage: $0 {start|stop|restart|reload}" 
exit 1 
esac 
exit 0

2. centos7配置systemd开机自启nginx

vim /usr/lib/systemd/system/nginx.service
[Unit]     #单元
Description=The nginx HTTP and reverse proxy server
#描述软件的功能,web服务[Service]  #服务
PIDFile=/apps/nginx/logs/nginx.pid
# 方便使用pid号进行操作,明进程的 pid 号
ExecStart=/apps/nginx/sbin/nginx
#使用绝对路径启动
ExecStop=/usr/bin/kill -s TERM $MAINPID
#杀死进程              发信号
ExecReload=/apps/nginx/sbin/nginx -s reload
#重新加载                       发信号 重新加载[Install]  #安装
WantedBy=multi-user.target
安装子字符界面
systemctl daemon-reload           #重新加载配置
systemctl start 服务              #启动
systemctl status 服务             #查看状态
systemctl stop 服务               #关闭
systemctl restart 服务            #重启
systemctl reload 服务             #重新加载
systemctl enable 服务             #开机自启动
systemctl diaable 服务            #开机不自启
systemctl enable --now 服务       #开机自启,并立即启动
systemctl disenable --now 服务    #开机不自启,并立即关闭
nginx -s stop                     #关闭

3. 服务管理相关命令使用

  • centos6:

service 服务程序 start:开启

service 服务程序 stop:关闭

service 服务程序 restart:重启

service 服务程序 reload:重新加载

service 服务程序 status:状态

  • centos7 :

systemctl start 服务名(1,2,3……):开启,后面可以跟多个服务

systemctl stop 服务名:关闭

systemctl restart 服务名:重启(关闭开启的过程)

systemctl reload 服务名:重新加载

systemctl status 服务名:状态

4. 服务程序

① 一旦运行一直运行不会退出

②  一般是后台运行,不会影响前台的操作

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/232468.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机环境安全

操作系统安全----比如windows,linux 安全标识--实体唯一性 windows---主体:账户,计算机,服务 安全标识符SID-Security Identifier 普通用户SID是1000,管理用SID是500 linux---主体:用户,用户组&#xf…

云原生学习系列之基础环境准备(单节点安装kubernetes)

一、环境要求 操作系统CentOS 7.x-86_x64 硬件配置:内存2GB或2G,CPU 2核或CPU 2核,需要在虚拟机中提前设置好,不然后续会报错 二、系统初始化 1、设置主机名 # 在master节点执行 hostnamectl set-hostname master01 2、配置主…

论文浅尝 | 以词-词关系进行分类的统一命名实体识别

笔记整理:曹旭东,东南大学硕士,研究方向为知识图谱构建、自然语言处理 链接:https://arxiv.org/abs/2112.10070 1. 动机 在以前的工作中,命名实体识别(NER)涉及的主要问题有三种类型&#xff0c…

TypeScript 从入门到进阶之基础篇(六) 类型(断言 、推论、别名)| 联合类型 | 交叉类型

系列文章目录 TypeScript 从入门到进阶系列 TypeScript 从入门到进阶之基础篇(一) ts基础类型篇TypeScript 从入门到进阶之基础篇(二) ts进阶类型篇TypeScript 从入门到进阶之基础篇(三) 元组类型篇TypeScript 从入门到进阶之基础篇(四) symbol类型篇TypeScript 从入门到进阶…

5G-A,一根蓄满能量的弹簧

光阴转瞬,恍然间2024已经来到身边。经历了2023年全球AI技术大爆发,以及智能汽车、虚拟现实、自主科技等诸多领域取得关键进展。想必大家希望知道在新一年中有哪些值得期待的科技增长空间。 如果是这样,那么不妨将目光投向5G-A。 与其他科技领…

Python基础-07(for循环、range()函数)

文章目录 前言一、for循环1.for循环结构2.参数 end(使其输出时变为横向) 二、range()函数1.range(常数)2.range(起始值,结束值)3.range(起始值,结束值,步长)4.例子 总结 前言 此章介绍循环结构中最常用的循环&#xf…

React使用动态标签名称

最近在一项目里(React antd)遇到一个需求,某项基础信息里有个图标配置(图标用的是antd的Icon组件),该项基础信息的图标信息修改后,存于后台数据库,后台数据库里存的是antd Icon组件…

SpringDoc注解解析

一、什么是SpringDoc SpringDoc注解的使用,它是基于OpenAPI 3和Swagger 3的现代化解决方案,相较于旧版的Swagger2(SpringFox),SpringDoc提供了更简洁、更直观的注解方式。 二、SpringDoc的注解分类 2.1 作用于类的注解 1. Tag 用于说明…

Github 2024-01-07 开源项目日报 Top10

根据Github Trendings的统计,今日(2024-01-07统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目4Jupyter Notebook项目2Go项目2C#项目1Starlark项目1非开发语言项目1Java项目1 跨平台应用程序UI框…

list1.Sort((m, n) => m.Id - n.Id); id是double类型的为什么回报错

问题产生的地方 原因 对于 double 类型的属性,不能直接使用减法运算符进行比较。减法运算符只能用于数值类型,而 double 是浮点数类型。 要在 double 属性上进行排序,可以使用 CompareTo 方法或者使用自定义的比较器。 更改 要在 double 属性…

服务器GPU温度过高挂掉排查记录

服务器GPU挂掉 跑深度学习的代码的时候发现中断了。通过命令查看: nvidia-smi显示 Unable to determine the device handle for GPU 0000:01:00.0: Unknown Error。感觉很莫名其妙。通过重启大法之后,又能用一段时间。 shutdown -r now但是过了一个小…

【AIGC-图片生成视频系列-7】MoonShot:实现多模态条件下的可控视频生成和编辑

目录 一. 贡献概述 二. 方法详解​编辑 三. Zero-Shot主题定制视频生成 四. 文本到视频生成 五. 直接使用图像ControlNet 六. 图像动画比较 七. 视频编辑 八. 针对视频生成中多模态 Cross-Attn的消融实验 九. 对视频生成中多模态 Cross-Attn的消融实验 十. 论文 十一…

[C#]C# OpenVINO部署yolov8图像分类模型

【官方框架地址】 https://github.com/ultralytics/ultralytics.git 【算法介绍】 YOLOv8 抛弃了前几代模型的 Anchor-Base。 YOLO 是一种基于图像全局信息进行预测的目标检测系统。自 2015 年 Joseph Redmon、Ali Farhadi 等人提出初代模型以来,领域内的研究者们…

【Leetcode】230. 二叉搜索树中第K小的元素

一、题目 1、题目描述 给定一个二叉搜索树的根节点 root ,和一个整数 k ,请你设计一个算法查找其中第 k 个最小元素(从 1 开始计数)。 示例1: 输入:root = [3,1,4,null,2], k = 1 输出:1示例2: 输入:root = [5,3,6,2,4,null,null,1], k = 3 输出:3提示: 树中…

正则表达式 详解,10分钟学会

大家好,欢迎来到停止重构的频道。 本期我们讨论正则表达式。 正则表达式是一种用于匹配和操作文本的工具,常用于文本查找、文本替换、校验文本格式等场景。 正则表达式不仅是写代码时才会使用,在平常使用的很多文本编辑软件,都…

初中数学:三角函数

初中的三角函数,只学习直角三角形中的几个特殊角度对应的函数值。 1、锐角三角函数定义: 锐角角A的正弦(sin),余弦(cos)和正切(tan),余切(cot)以及正割(sec),余割(csc)都叫做角A的锐角三角函数。 正弦(sin):对边比斜边,即sinAa/…

论文阅读:通过时空生成卷积网络合成动态模式(重点论文)

原文链接 github code 介绍视频 视频序列包含丰富的动态模式,例如在时域中表现出平稳性的动态纹理模式,以及在空间或时域中表现出非平稳的动作模式。 我们证明了时空生成卷积网络可用于建模和合成动态模式。 该模型定义了视频序列上的概率分布&#xff0…

Linux驱动开发(1)-最简单的字符设备驱动开发例子

1.简介 字符设备驱动:按照字节流进行读写操作的设备,例如点灯、按键、IIC、SPI、LCD。 Linux系统中一切皆文件,驱动加载成功,就会在/dev目录生成文件,对文件操作,则可实现对硬件操作。应用程序运行在用户…

使用sentinel作为熔断器

什么是sentinel Sentinel,中文翻译为哨兵,是为微服务提供流量控制、熔断降级的功能,它和Hystrix提供的功能一样,可以有效的解决微服务调用产生的“雪崩”效应,为微服务系统提供了稳定性的解决方案。随着Hytrxi进入了维…

springboot + vue3实现增删改查分页操作

springboot vue3实现增删改查分页操作 环境最终实现效果实现功能主要框架代码实现数据库后端前端 注意事项 环境 jdk17 vue3 最终实现效果 实现功能 添加用户,禁用,启用,删除,编辑,分页查询 主要框架 后端 spri…