Linux引导和服务
目录
一、Linux系统引导过程
(一)BIOS/UEFI启动
(二)MBR或GPT引导
(三)引导加载器阶段
(四)加载Linux内核
(五)启动初始化进程(init)
(六)Linux7个启动级别
1.设置启动级别
2.查看当前级别
二、服务
(一)systemd服务
(二)修复mbr分区
1.加盘
2.备份
3.模拟破坏
4.进入急救模式
5.还原数据
(三)修复grub文件及程序
1.模拟破坏文件
2.重启进入急救模式
3.切换根目录
4.重新安装grub2程序
5.重新生成配置文件
6.退出重启
编辑(四)修改密码
情况一
情况二
1.进入内核编辑
2.重新挂载
3.切根
4.修改密码
(五)system服务命令
一、Linux系统引导过程
Linux系统的引导过程可以分为以下几个主要步骤:

(一)BIOS/UEFI启动
当计算机开机时,首先会执行基本输入输出系统(BIOS)或统一可扩展固件接口(UEFI)。这些固件会进行自检POST(Power On Self Test),检测硬件是否正常。然后根据CMOS设置中的启动顺序寻找第一个启动设备。
(二)MBR或GPT引导
对于传统的BIOS引导方式,找到的第一个启动设备的主引导记录(MBR)会被加载到内存中执行。对于UEFI引导方式,则查找并执行ESP分区中的EFI引导程序。
(三)引导加载器阶段
MBR中的引导加载器通常是GRUB(GRand Unified Bootloader)或其他类似的工具。GRUB从硬盘加载自己的内核模块,并显示启动菜单(如果有多个操作系统可供选择)。用户可以选择要启动的操作系统和内核版本。UEFI引导下,引导加载器是存放在ESP分区的EFI应用程序,如GRUB2的UEFI版。
(四)加载Linux内核
用户选择操作系统后,GRUB将指定的Linux内核文件加载到内存中,并传递必要的启动参数(如root=...、kernel=...等)。内核开始初始化其自身以及依赖的硬件资源。
(五)启动初始化进程(init)
内核完成初步的硬件配置后,会启动init进程(现在大多数现代Linux发行版使用systemd替代了传统的SysV init作为初始化系统)。init进程负责进一步的系统启动任务,包括挂载根文件系统、启动其他系统服务、设置网络配置、启动图形界面(如果适用)等。
(六)Linux7个启动级别
作用:切换系统运行级别
语法:init 0-6
Linux 7 个启动级别:
0.系统停机模式,系统默认运行级别不能设置为0,否则不能正常启动,机器关的
1.单用户模式,root 权限,用于系统维护,禁止远程登陆,就像 Windows 下的安全模式登录
2.多用户模式,没有NFS 和网络支持
3.完整的多用户文本模式,有NFS 和网络,登陆后进入控制台命令行模式
输入“init 3”进入文本模式

4.系统未使用,保留一般不用,在一些特殊情况下可以用它来做一些事情。例如在笔记本电脑的电池用尽时,可以切换到这个模式来做一些设
5.图形化模式,登陆后进入图形 GUI模式,XWindow系
登录root 用户,输入“init 5” 切换回图形模式

6.重启模式,默认运行级别不能设为6否则不能正常启动。运行init 6机器就会重启
1.设置启动级别
设置默认的运行界别centos7不再使用"etc/inittab 文件进行默认的启动级别配置,而使用比 sysvinit 的运行级更为自由的 target 替代。
第3运行级用 multi-user.target 替代。
设置默认启动第三个级别
输入systemctl set-default multi-user.target

第5运行级用 graphical.target 替代。
设置回第五级别(图形界面)
输入systemctl set-default graphical.target

2.查看当前级别
输入runlevel 或者 systemctl get-default进行查看

二、服务
(一)systemd服务
在Linux系统中,systemd(System Daemon)是一个系统和服务管理器,用于替代传统的SysV init初始化系统。它负责系统的启动、运行时服务管理以及关机过程,并且提供了许多高级特性,如并行化启动服务、按需激活服务、依赖关系处理等。
systemd的服务主要体现在其unit文件上,这些配置文件通常位于/etc/systemd/system或 /usr/lib/systemd/system/ 目录下,扩展名为 .service 的文件表示一个服务单元。每个服务单元的配置文件定义了如何启动、停止和管理该服务。
| 单元类型 | 扩展名 | 说明 |
| Service | .service | 扩展名 |
| Socket | .socket | 描述一个进程间通信的套接字 |
| Device | .device | 描述一个内核识别的设备文件 |
| Mount | .mount | 描述一个文件系统的挂载点 |
| Automoun | .automount | 描述一个文件系统的自动挂载点 |
| Swap | .swap | 描述一个内存交换设备或目录 |
| Timer | .timer | 描述一个定时器 (用于实现类似cron的调度任务) |
| Path | .path | 描述一个文件系统中文件或目录(path路径) |
| Snapshot | .snapshot | 用于保存一个systemd的状态(snapshot快照) |
| Scope | .scope | 使用systemd的总线接口以编程的方式创建外部进程 |
| Slice | .slice | 描述居于Cgroup的一组通过层次组织的管理系统进程 |
| Target | .target | 描述一组systemd的单元 (target目标) |
(二)修复mbr分区
1.加盘
新加一块盘,挂载


2.备份
备份分区表以及mbr

3.模拟破坏
输入hexdump -C -n 512 /dev/sda 查看一下该文件的前512个字节

输入:dd if=/dev/zero of=/dev/sda count=1 bs=512
这条命令的意思是在/dev/sda前512个字节写0,就相当于破坏了该文件的十六进制代码

4.进入急救模式
按照下列顺序进入急救模式



进入单用户模式

5.还原数据
创建目录:mkdir bak
挂载:mount /dev/sdb /bak

还原:dd if=bak/ of=/dev/sda (count=1 bs=512)
因为这个文件只有512字节,所以次数和字节可以不用输入,默认全部复制一次

使用hexudump 查看一下字节

还原后输入reboot重启,就可以正常使用了
(三)修复grub文件及程序
1.模拟破坏文件
先模拟破坏grub.cfg 配置文件
输入mv /boot/grub2/grub.cfg /opt,在grob2目录下直接输入文件名就可以

2.重启进入急救模式
它会进入grub界面

重启后在读条时进入急救模式,这个要求手速比较快,大概在0.5秒作用

或者选择开机模式,打开电脑时进入固件

设置启动加载方式第一项为光盘启动

按F10保存退出

以CD-ROM 模式进入

3.切换根目录
从光盘的根切换到自己的系统根
chroot /mnt/sysimage

4.重新安装grub2程序
把grub2程序重新安装在sda磁盘
grub2 -install /dev/sda

5.重新生成配置文件
grub2-mkconfig -o /boot/grub2/grub.cfg

6.退出重启
先输入exit退出到光驱的根下 再输入reboot重启
(四)修改密码
如果root密码遗忘了,需要进入急救界面修改密码
情况一
有光驱的情况下进行修改密码
直接切换到系统根,输入passwd修改密码

而后退出(exit)、重启(reboot)
情况二
无光驱情况下
1.进入内核编辑

在Linux开头行末尾处加上rd.break,添加后按ctrl + x执行

2.重新挂载
输入mount -o remount,rw /sysroot 添加权限


3.切根

4.修改密码

如果你的selinux没有关闭,则需要输入touch /.autorelabel 刷新一下该文件时间,重新打上标记
而后再退出重启

这样,我们的密码就修改成功了
加密grub防止别人进入单用户模式破解root密码
输入grub-setpasswd

再按e键进入单用户模式的话就需要输入密码了

(五)system服务命令
| systemctl | start | 服务名 | 启动服务 |
| systemctl | stop | 服务名 | 关闭服务 |
| systemctl | status | 服务名 | 查看服务状态 |
| systemctl | reload | 服务名 | 重新加载服务 |
| systemctl | restart | 服务名 | 重启服务 |
| systemctl | enable | 服务名 | 开机自启 |
| systemctl | enable --now | 服务名 | 开机自启,并立即启动 |
| systemctl | disable | 服务名 | 开机不自启 |
| systemctl | disable --now | 服务名 | 开机不自启,并立即关闭 |

程序如果要被systemd管理,需要在/usr/lib/systemd/system/下生成一个配置文件
如果用yum安装或者是rpm安装会自动生成配置文件,不需要手动加入,systemd会自动安装
使用yum安装httpd

它会自动生成一个配置文件

使用编译安装的话,需要手动配置文件
比如我们编译安装一个nginx,如何安装,我们之前在Linux安装、卸载程序中演示过

这时候需要手动写一个配置文件
新建一个配置文件,输入:vim /usr/lib/systemd/system/nginx.service
注意要以.service结尾
在新文件内输入以下内容

输入完毕后保存退出
而后需要重新加载systemd守护进程(daemon)的配置文件
输入systemctl daemon-reload
