Linux引导和服务

2024-01-03 00:58:20

一、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? 刷新一下该文件时间,重新打上标记

而后再退出重启

这样,我们的密码就修改成功了

(五)system服务命令

systemctlstart服务名启动服务
systemctl?stop服务名关闭服务
systemctlstatus服务名查看服务状态
systemctl?reload?服务名重新加载服务
systemctl??restart服务名重启服务
systemctlenable?服务名开机自启
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

文章来源:https://blog.csdn.net/hy199707/article/details/135338177
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。