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目标 

三、排除启动类故障

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. 服务管理相关命令使用


一、操作系统引导过程

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 nginx    #启动ngixn
systemctl status nginx   #查看状态
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.mzph.cn/news/592548.shtml

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

相关文章

基于YOLOv8深度学习的人脸面部表情识别系统【python源码+Pyqt5界面+数据集+训练代码】深度学习实战

《博主简介》 小伙伴们好,我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~ 👍感谢小伙伴们点赞、关注! 《------往期经典推…

js文件上传 分片上传/断点续传/极速秒传

(极速秒传)利用md5判断上传的文件是否存在 MD5信息摘要算法,一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。 每一个文件都会生成…

对接第三方接口鉴权(Spring Boot+Aop+注解实现Api接口签名验证)

前言 一个web系统,从接口的使用范围也可以分为对内和对外两种,对内的接口主要限于一些我们内部系统的调用,多是通过内网进行调用,往往不用考虑太复杂的鉴权操作。但是,对于对外的接口,我们就不得不重视这个…

Elasticsearch:结合 ELSER 和 BM25 文本查询的相关搜索

Elastic Learned Spare EncodeR (ELSER) 允许你执行语义搜索以获得更相关的搜索结果。 然而,有时,将语义搜索结果与常规关键字搜索结果相结合以获得最佳结果会更有用。 问题是,如何结合文本和语义搜索结果? 首先,让我…

Java异常篇----第二篇

系列文章目录 文章目录 系列文章目录前言一、 Excption与Error包结构二、Thow与thorws区别三、Error与Exception区别?四、error和exception有什么区别前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女…

1213:八皇后问题 深度优先搜索算法

1213:八皇后问题 时间限制: 1000 ms 内存限制: 65536 KB 【题目描述】 在国际象棋棋盘上放置八个皇后,要求每两个皇后之间不能直接吃掉对方。 【输入】 (无) 【输出】 按给定顺序和格式输出所有八皇后问题的解(见样例)。 题目…

Spring源码之依赖注入(二)

书接上文 文章目录 一. Autowire底层注入逻辑1. 属性注入逻辑 一. Autowire底层注入逻辑 前面我们分析了Spring时如何找到某个目标类的所有注入点这一个核心逻辑,但还没又对核心注入方法inject进行详细分析,下面我们就来详细分析Spring拿到所有的注入点…

【CASS精品教程】CASS11计算城镇建筑密度

CASS中可以很方便计算建筑密度。 文章目录 一、建筑密度介绍二、CASS计算建筑密度1. 绘制宗地范围2. 绘制建筑物3. 计算建筑密度三、注意事项一、建筑密度介绍 建筑密度(building density;building coverage ratio),指在一定范围内,建筑物的基底面积总和与占用地面积的比…

纠删码ReedSolomon

随着大数据技术的发展,HDFS作为Hadoop的核心模块之一得到了广泛的应用。为了数据的可靠性,HDFS通过多副本机制来保证。在HDFS中的每一份数据都有两个副本,1TB的原始数据需要占用3TB的磁盘空间,存储利用率只有1/3。而且系统中大部分…

Spring Boot 2.7.11 集成 GraphQL

GraphQL介绍 GraphQL(Graph Query Language)是一种用于API的查询语言和运行时环境,由Facebook于2012年创建并在2015年公开发布。与传统的RESTful API相比,GraphQL提供了更灵活、高效和强大的数据查询和操作方式。 以下是GraphQL…

Spring技术内幕笔记之SpringMvc

WebApplicationContext接口的类继承关系 org.springframework.web.context.ContextLoader#initWebApplicationContext 对IOC容器的初始化 SpringMvc如何设计 DispatcherServlet类继承关系 MVC处理流程图如下: DispatcherServlet的工作大致可以分为两个部分&#xf…

NFC物联网开发智能衣橱解决方案

智能衣橱是智能家居的重要内容,现代家居市场对家居智能化控制尤为重视。但是,传统家居生产功能和模式已经无法满足智能化时代的需求,所以家居智能化成为家居行业发展的主要需求。与传统衣橱对比,智能衣橱的功能强大方便人们的生活…

Android--Jetpack--WorkManager详解

2024已经到来,愿你安睡时,山河入梦。愿你醒来时,满目春风。愿你欢笑时,始终如一。愿你行进时,前程似锦,坦荡从容。 编程语言的未来? 目录 一,定义 二,特点 三&#xff0c…

‘vue-cli-service‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件。这个问题如何解决?

这个错误信息 vue-cli-service 不是内部或外部命令,也不是可运行的程序或批处理文件 表示 vue-cli-service 命令在你的系统上未被识别。这通常是因为 Vue CLI 没有被正确安装或其路径没有被加入到系统的环境变量中。以下是几个解决这个问题的步骤: 确认 …

LinkedList与ArrayList的比较

1.LinkedList 基于双向链表,无需连续内存 随机访问慢(要沿着链表遍历) 头尾插入删除性能高 占用内存多 2.ArrayList 基于数组,需要连续内存 随机访问快(指根据下标访问) 尾部插入、删除性能可以&…

从0搭建github.io网页

点击跳转到🔗我的博客文章目录 从0搭建github.io网页 文章目录 从0搭建github.io网页1.成果展示1.1 网址和源码1.2 页面展示 2.new对象2.1 创建仓库 3.github.io仓库的初始化3.1 千里之行,始于足下3.2 _config.yml3.3 一点杂活 4.PerCheung.github.io.p…

Linux 命令echo

命令作用 输出一行字符串在shell中,可以打印变量的值输出结果写入到文件在显示器上显示一段文字,起到提示的作用 语法 echo [选项] [字符串] 参数 字符含义-n不自动换行-e解释转义字符-E不解释转义字符 如果-e有效,则识别以下序列&…

SpringBoot 项目如何生成 swagger 文档

推荐使用 springdoc-openapi 的理由 1、springdoc-openapi 是 spring 官方出品,与 springboot 兼容更好(springfox 兼容有坑) 2、springdoc-openapi 社区更活跃,springfox 已经 2 年没更新了 3、springdoc-openapi 的注解更接近 …

(一)Matlab数值计算基础

目录 1.1Matlab命令组成 1.1.1基本符号 1.1.2功能符号 1.1.3常用命令 1.1Matlab命令组成 1.1.1基本符号 #提示运算符,表示软件处于准备就绪状态。在提示符号后输入一条命令或者一段程序后按Enter键,软件将给出相应的结果 >> *…

【Proteus仿真】【Arduino单片机】汽车尾气检测报警系统

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真Arduino单片机控制器,使用按键、LCD1602液晶、蜂鸣器模块、CO、NOx、HC和PM2.5气体传感器等。 主要功能: 系统运行后,LCD1602显示CO、NOx、HC和…