一、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服务命令
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