目录
一、引导过程
1.开机自检BIOS
2.MBR引导
3.GRUB菜单
4.加载Linux内核
5.init进程初始化
6.Centos启动过程总结
7.系统初始化进程
7.1init进程
7.2Systemd
7.2.1Systemd单元类型
7.2.2运行级别所对应的Systemd目标
二、服务控制
1.修复MBR扇区故障
1.1实验操作过程
1.1.1新建磁盘
1.1.2将备份文件备份到新盘
1.1.3模拟破坏
1.1.4重启Linux系统,进入急救模式
1.1.5进行操作
1.1.6查看效果并重启
1.1.7实验总结
2.修复GRUB引导故障
2.1实验操作过程
2.1.1先模拟破坏grub.cfg配置文件
2.1.2重启进入急救模式
2.1.3先切换根目录
2.1.4重新安装grub程序
2.1.5重新生成配置文件
2.1.6退出并重启
2.1.5实验总结
3.破解密码
3.1有光驱
3.2无光驱
3.2.1进入内核界面
3.2.2进入单用户模式
3.2.3修改密码
3.2.4重新输入密码登录即可成功
3.2.5 实验总结
4.系统服务控制
4.1控制类型
4.2服务程序的特点
4.3服务控制命令
4.3.1Centos6
4.3.2Centos7
5.使用Systemd编译安装nginx程序
5.1编译安装
5.2进入systemd编辑nginx程序启动项
5.3编辑nginx服务项
5.4开启Nginx服务并测试
5.5延伸:故障案例
kernel 实现进程管理、内存管理、网络管理、驱动程序、文件系统、安全功能等功能
内核设计流派
宏内核(monolithic kernel):又称单内核和强内核,Unix,Linux把所有系统服务都放到内核里,所有功能集成于同一个程序,分层实现不同功能,系统庞大复杂,Linux其实在单内核内核实现了模块化,也就相当于吸收了微内核的优点。
微内核(micro kernel):Windows,Solaris,HarmonyOS简化内核功能,在内核之外的用户态尽可能多地实现系统服务,同时加入相互之间的安全保护,每种功能使用一个单独子系统实现,将内核功能移到用户空间,性能差。
一、引导过程
1.开机自检BIOS
服务器主机开机后,根据主板BIOS的设置对cpu、内存、显卡等设备进行基础检测,检测成功后根据预设的启动程序移交系统控制权,大多时候会移交系统控制权,大多时候会移交给本机硬盘。
总结:如果是网络启动的话会开启pxe。
检测硬件是否正常然后根据BIOS中的启动项,去找操作系统
2.MBR引导
当从本机硬盘中启动系统时,首先根据硬盘第一个扇区中 MBR(Master Boot Record, 主引导记录)的设置,将系统控制权传递给包含操作系统引导文件的分区;或者直接根据 MBR 记录中的引导信息调用启动菜单(如 GRUB)。
总结:运行放在MBR扇区里的启动 GRUB引导程序
统一启动加载器:MBR、GRUB
因为GRUB太大,在第一个扇区放不下,所以GRUB分为两部分
MBR是指引硬件找到内核文件
3.GRUB菜单
对于 Linux 操作系统来说,GRUB(GRand Unified Bootloader,统一启动加载器)是 使用最为广泛的多系统引导器程序。系统控制权传递给 GRUB 以后,将会显示启动菜单给 用户选择,并根据所选项(或采用默认值)准备加载 Linux 内核文件,然后将系统控制权转交给 内核。需要注意的是,CentOS 7 采用的是 GRUB2 启动引导器。
总结:GRUB引导程序通过读取GRUB配置文件/boot/grub2/grub.cfg,来获取内核和镜像文件系统的设置和路径位置
根据GRUB配置文件(grub.cfg)中记录的位置去找到内核文件(高级语言)
4.加载Linux内核
linux内核是一个预先编译好的内设二进制文件,介于各种硬件资源与系统程序之间,负责资源分配与调度,内核接过系统控制权后转交给内核后,将完全掌握整个linux操作系统的运行过程,在cenos中默认的内核文件放置位置在/boot/vmlinuz-3.10.0-514.el7.x86_64”。
总结:把内核和镜像文件系统加载到内存中 可以使用;把内核运行在内存中
5.init进程初始化
为了完成进一步的系统引导过程,linux内核首先将系统中的“/sbin/init”程序加载到内存运行(运行中的程序称为进程),init进程完成一系列的初始化过程,最后才会让用户登录
总结:加载硬件驱动程序,内核把init进程加载到内存中运行
第一个主进程
6.Centos启动过程总结
Centos7和Centos6的区别
1.普通用户的uid号范围不同
2.系统初始化进程Centos6是init,Centos7是systemd
开机启动的完整总结:
第一步加电后会BIOS程序会自检硬件,硬件无故障后,会根据第一启动项去找内核,一般来说第一启动项是硬盘,找到硬盘后,会根据MBR的指引找到完整的GRUB程序,再根据GRUB的配置文件找到内核文件的具体位置,然后将内核文件加载到内存中运行,内存加载好后会启动第一个程序。
7.系统初始化进程
7.1init进程
由Linux内核加载运行/sbin/init程序
init进程是系统中第一个进程
init进程的PID(进程标记)号永远为1
7.2Systemd
Systemd是Linux操作系统的一种init软件,是系统级程序,代为管理系统上的服务程序
Centos7中采用全新的Systemd启动方式,取代传统的SysVinit
Centos7中运行的第一个init进程是/lib/systemd/systemd
init是串型启动后续的程序,程序之间有依赖关系,程序按顺序依次启动
systemd是并行启动程序,所有程序一起启动
引入:rpcbind程序如果启动,会监听111端口;如果rpcbind没有启动,systemd会代为监听
systemd是保姆级程序,如果是yum或者编译安装的软件,都可以直接使用systemctl命令去启动、关闭、重启、开机自启等功能;但是如果是编译安装的话,需要手写一个配置文件才可以使用systemctl命令去管理程序。
7.2.1Systemd单元类型
单元类型 | 扩展名 | 说明 |
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的单元 |
Systemd unit(单元)是为了Systemd方便便利程序,将程序按照特定的功能分成了很多单元;其中服务单元最主要的是写配置文件
7.2.2运行级别所对应的Systemd目标
运行级别 | Systemd的target | 说明 |
0 | target | 关机状态,使用该级别时将会关闭主机 |
1 | rescue.target | 单用户模式,不需要密码验证即可登录系统,多用于系统维护 |
2 | muliti-user.target | 用户定义/域特定运行级别。默认等同于3 |
3 | muliti-user.target | 字符界面的完整多用户模式,大多数服务器主机运行在此级别 |
4 | muliti-user.target | 用户定义/域特定运行级别。默认等同于3 |
5 | graphical.target | 图形界面的多用户模式,提供了图形桌面操作环境 |
6 | reboot.target | 重新启动,使用该级别时将会重启主机 |
runlevel 查看当前运行级别
3代表从哪个级别过来的;5代表当前级别
- 查看默认运行级别
systemctl get-default
- 设置默认级别
systemctl set-default
- 设置混合模式
systemctl set-default multi-user.target
其中,multi-user.target 代表字符界面;graphical.target 代表图形界面
二、服务控制
1.修复MBR扇区故障
故障原因
- 病毒、木马等造成的破坏
- 不正确的分区操作、磁盘读写误操作
故障现象
- 找不到引导程序,启动中断
- 无法加载操作系统,开机后黑屏
解决思路
- 应提前做好备份文件
- 以安装光盘引导进入急救模式
- 从备份文件中回复
1.1实验操作过程
1.1.1新建磁盘
[root@localhost ~]#fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
Device does not contain a recognized partition table
使用磁盘标识符 0x38fd3e00 创建新的 DOS 磁盘标签。
命令(输入 m 获取帮助):n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
分区号 (1-4,默认 1):
起始 扇区 (2048-41943039,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-41943039,默认为 41943039):
将使用默认值 41943039
分区 1 已设置为 Linux 类型,大小设为 20 GiB
命令(输入 m 获取帮助):w
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盘。
[root@localhost ~]#scan
[root@localhost ~]#lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 60G 0 disk
├─sda1 8:1 0 5G 0 part /boot
└─sda2 8:2 0 54G 0 part
├─centos-root 253:0 0 50G 0 lvm /
└─centos-swap 253:1 0 4G 0 lvm [SWAP]
sdb 8:16 0 20G 0 disk
└─sdb1 8:17 0 20G 0 part
sr0 11:0 1 4.2G 0 rom /run/media/root/CentOS 7 x86_64
1.1.2将备份文件备份到新盘
1.1.3模拟破坏
模拟破坏sda磁盘;if=/dev/zero代表不断往sda盘内写0
hexdump -C -n /dev/sda 可以查看输入后的效果
1.1.4重启Linux系统,进入急救模式
1.1.5进行操作
1.1.6查看效果并重启
1.1.7实验总结
第一步,新建磁盘,将备份文件备份到新盘
第二步,备份分区表及MBR
dd if=/dev/sda of=/mnt/mbr count=1 bs=512
第三步,模拟破坏
dd if=/dev/zero of=/dev/sda count=1 bs=512
第四步,进入急救模式
重启ESC进入急救模式选择Troubleshooting→Rescue a Centos system→Continue
第五步,新建文件夹、挂载、恢复
mkdir bak
mount /dev/sdb1 bak
dd if=/bak/mbr.bak of=/dev/sda count=1 bs=512
第六步,退出重启
exit→reboot
2.修复GRUB引导故障
故障原因
- MBR中的GRUB引导程序遭到破坏
- grub.conf文件丢失,引导配置有误
故障现象
- 系统引导停滞,显示“grub>”提示符
解决思路
- 尝试手动输入引导命令
- 进入急救模式,重写或者从备份中恢复grub.conf
- 向MBR扇区中重建grub程序
grub只需备份446字节
2.1实验操作过程
进入急救模式与MBR修复一致
2.1.1先模拟破坏grub.cfg配置文件
2.1.2重启进入急救模式
与MBR分区抢修一致
2.1.3先切换根目录
从光盘的根目录切换到当前系统的根
2.1.4重新安装grub程序
2.1.5重新生成配置文件
2.1.6退出并重启
2.1.5实验总结
第一步,先模拟破坏grub.cfg配置文件
mv /boot/grub2/grub.cfg /opt
第二步,重启进入急救模式选择Troubleshooting→Rescue a Centos system→Continue
第三步,先切换根目录,从光盘的根切换到当前系统的根
chroot /mnt/sysimage
第四步,重新安装grub程序在sda磁盘
grub2-install /dev/sda
第五步,重新生成配置文件
grub2-mkconfig -o /boot/grub2/grub.cfg
第六步,退出重启
exit→reboot
3.破解密码
3.1有光驱
最后exit退出
reboot重启
Xshell连接成功即为成功
3.2无光驱
3.2.1进入内核界面
3.2.2进入单用户模式
3.2.3修改密码
3.2.4重新输入密码登录即可成功
3.2.5 实验总结
第一步,进入系统在选择内核界面,选择第一个选项按E键进入内核操作界面
第二步,光标移动到Linux开头行最后,添加rd.break,Ctrl + x 进入单用户界面
第三步,重新挂载
mount -o remount,rw /sysroot #重新挂载 添加读写权限
第四步,切换到真正的根目录
chroot /sysroot
第五步,修改密码
passwd
第六步,退出并重启
exit→reboot
延伸:如果开启了selinux的话需要重新打上标记
4.系统服务控制
systemctl 控制类型 服务名称
4.1控制类型
控制名 | 含义 |
start | 启动 |
stop | 停止 |
reload | 重新加载 |
staus | 查看服务状态 |
Centos6使用chkconfig;Centos7使用systemd
0123456代表级别
0代表关机;1代表单用户;234代表字符界面(2没有nfs;4没有用过);5图形化界面;6重启
4.2服务程序的特点
1.一旦运行,一直运行
2.一般是后台运行,不会影响前台操作
4.3服务控制命令
4.3.1Centos6
Service | 服务程序 | start | 开启 |
stop | 关闭 | ||
restart | 重启 | ||
reload | 重新加载配置文件 | ||
status | 查看服务状态 |
在/etc/init.d写一个同名文件的脚本(必须要有执行权限)
chkconfig --add 服务名称
chkconfig --level 35 服务程序 on 开机自启
chkconfig --level 35 服务程序 off 关闭开机自启
4.3.2Centos7
systemctl | start | 服务名 | 开启服务(可以同时启动12345多个程序服务) |
stop | 关闭服务 | ||
status | 查看服务状态 | ||
reload | 重新加载配置文件 | ||
restart | 重启服务 |
systemctl enable 服务名 开机自启
systemctl enable --now 服务名 开机自启并立即启动
systemctl disable 服务名 开机不自启
systemctl disable --now 服务名 开机不自启并立即关闭
如果用yum安装以及rpm安装 会自动生成一个配置文件 不需要我们手动加入systemd会自己添加
5.使用Systemd编译安装nginx程序
5.1编译安装
cd /opt
wget http://nginx.org/download/nginx-1.18.0.tar.gz
tar xf nginx-1.18.0.tar.gz
cd nginx-1.18.0
yum -y install gcc pcre-devel openssl-devel zlib-devel openssl openssl-devel
#请使用网络源
mkdir /cxk/nginx -p
./configure --prefix=/cxk/nginx
make
make install
ln -s /apps/nginx/sbin/nginx /usr/sbin/nginx
#做软链接 可以补全
####以上操作可以直接新建vim.test.sh进行操作
###然后使用bash test.sh进行上述操作
5.2进入systemd编辑nginx程序启动项
5.3编辑nginx服务项
5.4开启Nginx服务并测试
[root@localhost nginx-1.18.0]#systemctl start nginx.service
##开启nginx服务
[root@localhost nginx-1.18.0]#systemctl status nginx.service
##查看nginx服务状态信息
● nginx.service - The nginx HTTP and reverse proxy server
Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; vendor preset: disabled)
Active: active (running) since 二 2024-01-02 22:04:16 CST; 6s ago
Main PID: 5970 (nginx)
CGroup: /system.slice/nginx.service
├─5970 nginx: master process /ghd/nginx/sbin/nginx
└─5971 nginx: worker process
1月 02 22:04:16 localhost.localdomain systemd[1]: Started The nginx HTTP and r....
1月 02 22:04:16 localhost.localdomain systemd[1]: Starting The nginx HTTP and ....
Hint: Some lines were ellipsized, use -l to show in full.
[root@localhost nginx-1.18.0]#systemctl stop nginx.service
##终止nginx服务
[root@localhost nginx-1.18.0]#systemctl status nginx.service
##查看nginx服务状态信息
● nginx.service - The nginx HTTP and reverse proxy server
Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; vendor preset: disabled)
Active: inactive (dead)
1月 02 22:04:16 localhost.localdomain systemd[1]: Started The nginx HTTP and r....
1月 02 22:04:16 localhost.localdomain systemd[1]: Starting The nginx HTTP and ....
1月 02 22:04:29 localhost.localdomain systemd[1]: Stopping The nginx HTTP and ....
1月 02 22:04:29 localhost.localdomain systemd[1]: Stopped The nginx HTTP and r....
Hint: Some lines were ellipsized, use -l to show in full.
5.5延伸:故障案例
Testsrv或其他服务启动(这个服务设置了35级别的自启)如果出了问题,启动系统时会卡在界面,无法进入系统(系统进入休眠状态)
解决办法:
tip1:进入其他级别(可以进入124级别)然后把服务自启关掉
如果是Centos6的话可以使用configure --f命令修复,之后重启即可
如果是Centos7的话使用systemd命令进行修复
tip2:进入急救模式(按Esc进入选择内核界面,按E选择内核进入,找到Linux那一行在末尾输入rd.break之后再按Ctrl + x 进入单用户模式),然后杀掉这个自启服务