LINUX基础第八章:引导过程和服务控制

目录

一.引导过程

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扇区故障

新建磁盘

将备份文件备份到新盘

模拟破坏

​编辑重启Linux系统,进入急救模式

​编辑

​编辑​编辑​编辑进行操作

​编辑查看效果并重启

​编辑总结

2.修复GRUB引导故障

实验操作过程

先模拟破坏grub.cfg配置文件

​编辑重启进入急救模式

先切换根目录

​编辑重新安装grub程序

重新生成配置文件

​编辑退出并重启

总结

3.破解密码

3.1有光驱

3.2无光驱

进入内核界面

​编辑进入单用户模式

​编辑修改密码

重新输入密码登录即可成功

总结

4.系统服务控制

控制类型

服务程序的特点

服务控制命令

Centos6

Centos7

 5.使用Systemd编译安装nginx程序

编译安装

开启Nginx服务并测试

编辑nginx服务项

开启Nginx服务并测试


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

nit是串型启动后续的程序,程序之间有依赖关系,程序按顺序依次启动

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说明
0target关机状态,使用该级别时将会关闭主机
1rescue.target单用户模式,不需要密码验证即可登录系统,多用于系统维护
2muliti-user.target

用户定义/域特定运行级别。默认等同于3

3muliti-user.target字符界面的完整多用户模式,大多数服务器主机运行在此级别
4muliti-user.target用户定义/域特定运行级别。默认等同于3
5graphical.target图形界面的多用户模式,提供了图形桌面操作环境
6reboot.target重新启动,使用该级别时将会重启主机

runlevel  查看当前运行级别

3代表从哪个级别过来的;5代表当前级别

  • 查看默认运行级别

systemctl get-default

  • 设置默认级别

systemctl set-default

  • 设置混合模式

systemctl set-default multi-user.target

其中,multi-user.target 代表字符界面;graphical.target 代表图形界面

二.服务控制

1.修复MBR扇区故障

故障原因

  • 病毒、木马等造成的破坏
  • 不正确的分区操作、磁盘读写误操作

故障现象

  • 找不到引导程序,启动中断
  • 无法加载操作系统,开机后黑屏

解决思路

  • 应提前做好备份文件
  • 以安装光盘引导进入急救模式
  • 从备份文件中回复

新建磁盘

[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

将备份文件备份到新盘

模拟破坏

模拟破坏sda磁盘;if=/dev/zero代表不断往sda盘内写0

hexdump -C -n /dev/sda   可以查看输入后的效果

重启Linux系统,进入急救模式

进行操作

查看效果并重启

总结

第一步,新建磁盘,将备份文件备份到新盘

第二步,备份分区表及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字节

实验操作过程

进入急救模式与MBR修复一致

先模拟破坏grub.cfg配置文件
重启进入急救模式

与MBR分区抢修一致

先切换根目录

从光盘的根目录切换到当前系统的根

重新安装grub程序

重新生成配置文件
退出并重启

总结

第一步,先模拟破坏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无光驱

进入内核界面

进入单用户模式
修改密码

重新输入密码登录即可成功
总结

第一步,进入系统在选择内核界面,选择第一个选项按E键进入内核操作界面

第二步,光标移动到Linux开头行最后,添加rd.break,Ctrl + x 进入单用户界面

第三步,重新挂载

mount -o remount,rw /sysroot       #重新挂载 添加读写权限

第四步,切换到真正的根目录

chroot /sysroot

第五步,修改密码

passwd

第六步,退出并重启

exit→reboot

延伸:如果开启了selinux的话需要重新打上标记

4.系统服务控制

systemctl  控制类型  服务名称

控制类型

控制名含义
start启动
stop停止
reload重新加载
staus查看服务状态
  • Centos6    chkconfig
  • Centos7    systemd

0123456代表级别

0代表关机;1代表单用户;234代表字符界面(2没有nfs;4没有用过);5图形化界面;6重启

服务程序的特点

  • 一旦运行,一直运行
  • 一般是后台运行,不会影响前台操作

服务控制命令

Centos6
Service服务程序start开启
stop关闭
restart重启
reload重新加载配置文件
status查看服务状态

在/etc/init.d写一个同名文件的脚本(必须要有执行权限)

chkconfig  --add  服务名称

chkconfig  --level  35  服务程序  on    开机自启

chkconfig  --level  35  服务程序  off  关闭开机自启

Centos7
systemctlstart服务名开启服务(可以同时启动12345多个程序服务)
stop关闭服务
restart查看服务状态
reload重新加载配置文件
status重启服务

systemctl enable 服务名                开机自启

systemctl enable --now 服务名      开机自启并立即启动

systemctl disable 服务名               开机不自启

systemctl disable --now 服务名     开机不自启并立即关闭

如果用yum安装以及rpm安装 会自动生成一个配置文件 不需要我们手动加入systemd会自己添加

 5.使用Systemd编译安装nginx程序

编译安装

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进行上述操作

开启Nginx服务并测试

编辑nginx服务项

开启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.

  • 11
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值