宏内核(monolithic kernel):又称单内核和强内核,Unix,Linux把所有系统服务都放到内核里,所有功能集成于同一个程序,分层实现不同功能,系统庞大复杂,Linux其实在单内核内核实现了模块化,也就相当于吸收了微内核的优点。
一、引导过程
1.Linux操作系统引导过程
1.开机自检
通过bios程序检查硬件是否正常,然后根据bios中的启动项设置,去找内核文件,如果硬件出现问题则会卡在开机界面提示不同报错。
boot开机启动顺序:你可以把内核文件放在何处?
1硬盘 2移动设备,u盘,移动硬盘,光驱 3网络启动
2.mbr
运行放在MBR扇区里的启动 GRUB引导程序,MBR引导:第一阶段grub引导及加载分区表
mbr:因为grub太大,第一个扇区存不下,所有的grub程序,所以分成2部分引导硬件找到内核文件
3.grup
grub菜单:第二阶段grub加载内核文件到系统内存中运行起来,内核文件置:/boot/grub2/grub.cfg(centos 7)(根据grup配置文件(grup.cfg)中记录的位置,去找到内核文件(高级语言))
4.加载内核(kernel)
把内核运行在内存中,加载内核:加载完毕进入操作系统
内核接过系统控制权以后,将完全掌控整个 Linux 操作系统的运行过程。在 CentOS 系统中,默认的内核文件位于“/boot/vmlinuz-3.10.0-514.el7.x86_64”。 总结:把内核和镜像文件系统加载到内存中 可以使用
5.启动进程(init进程初始化)
启动操作系统后需要启动进程,启动第一个祖宗进程
为了完成进一步的系统引导过程,Linux内核首先将系统中的“/sbin/init”程序加载到内 存中运行(运行中的程序称为进程),init 进程负责完成一系列的系统初始化过程,最后等待用户进行登录 总结:加载硬件驱动程序,内核把init进程加载到内存中运行。
centos7:systemd
传统init依赖于串行执行Shell 脚本启动服务,导致效率低下,系统启动速度较慢 , 排对
init 串行启动后续的程序:一个一个按顺序启动
systemd能够将更多的服务进程并行启动,并且具有提供按需启动服务的能力,使得启动更少进程,从而提高系统启动速度 大家一起
init 串行启动后续的程序:一个一个按顺序启动
systemd是并行启动程序:全部一起启动
文字描述:
二、操作系统运行级别
(一)0关机
init 0是关机 系统默认运行级别不能设置为0,否则不能正常启动,机器关的
(二)1单用户 类似windows的急模式
init 1是单用户安全模式
root 权限,用于系统维护,禁止远程登陆,就像 Windows 下的安全模式登录
(三) 2、3 、4都是字符界面
init 2、init 3 、init 4都是字符界面,但init 4(没用过),init2少些功能(nfs)所以常用的是init 3级别
(四) 5 图形界面 init 5是图形化界面
(五) 重启 init 6是重启
runlevel 查看当前运行级别
输入runlevel 或者 systemctl get-default进行查看运行级别
三、服务
1、systemd介绍
在Linux系统中,systemd(System Daemon)是一个系统和服务管理器,用于替代传统的SysV init初始化系统。它负责系统的启动、运行时服务管理以及关机过程,并且提供了许多高级特性,如并行化启动服务、按需激活服务、依赖关系处理等。
引入:rpcbind程序如果启动,会监听111端口;如果rpcbind没有启动,systemd会代为监听
systemd:是系统级的程序,代为管理系统上的程序
systemd保姆级
yum及rpm安装的软件可以直接使用systemctl去启动 关闭 重启 开机自启等功能
编译安装 不可以直接使用systemctl命令去管理程序 需要手写一个配置文件
systemd unit(单元) ,systemd方便管理程序,将程序按照特定的功能分成了很多单元(服务单元,文件路径、网络单元、挂载……)
2.systemd 单元类型
3.systemd新特性
systemd新特性
-
系统引导时实现服务并行启动
-
按需启动守护进程
-
自动化的服务依赖关系管理
-
同时采用socket式与D-Bus总线式激活服务
-
socket与服务程序分离
-
向后兼容sysv init脚本
-
使用systemctl 命令管理,systemctl命令固定不变,不可扩展,非由systemd启动的服务,
-
systemctl无法与之通信和控制
-
系统状态快照
systemd 核心概念:unit
unit表示不同类型的systemd对象,通过配置文件进行标识和配置;文件中主要包含了系统服务、监听socket、保存的系统快照以及其它与init相关的信息
在systemd中不同类型的systemd对象被统一称为单元,是让系统知道该如何进行操作和管理资源的主要对象,所以systemd有许多单元类型。
systemd单元文件最初默认存放在/lib/systemd/system目录中,每当安装新的软件都会自动在这个目录中添加一个配置文件。
systemctl 命令用于管理各种类型的systemd单元,可以使用“systemctl -t help”命令来查询systemd支持的单元类型。
四、实验
实验1:模拟破坏mbr和分区表 然后修复
修复mbr分区故障
故障原因
- 病毒、木马的等造成的破坏;
- 不正确的分区操作、磁盘读写误操作等。
-
MBR位于第一块硬盘( /dev/sda) 的第一个物理扇区处,总共512字节
故障现象
- 找不到引导程序,启动中断;
- 无法加载操作系统,开机后黑屏。
-
使用dd命令模拟将MBR损坏,复制512字节到/dev/sda中进行覆盖MBR dd if=/dev/zero of=/dev/sda count=1 bs=512
解决思路
- 准备添加另一块硬盘作为备份;
- 应提前做好备份文件;
- 以安装光盘引导进入急救模式;
- 从备份文件中恢复
1、在覆盖前需要使用dd进行备份,如果没有备份,那这个系统就挂了。
怎么备份?备份需要使用dd命令将/dev/sda中的前512字节复制到一个新的硬盘中,
新的硬盘需要进行分区、格式化、挂载(建议永久挂载),挂载在新创建的目录下面。
2、进入linux中的急救模式,
(在重启前需要在DVD中的设置镜像,不然就无法进去急救模式)。
3、在shell环境中,新创建一个目录,然后将这个硬盘挂载在这个目录下
因为硬盘在前面已经复制过MBR的备份进去,所以它里面还是存在的,
最后将这个目录下的文件使用dd复制到/dev/sda中,重启即可。
实验步骤:
加盘:
备份:
模拟破坏:
然后进入急救模式修复:3 2 1
实验2:修复grub文件及程序
故障原因
- MBR中的GRUB引导程序遭到破坏grub.conf文件丢失、引导配置有误
故障现象
- 系统引导停滞,显示“grub>”提示符
- 解决思路
- 尝试手动输入引导命令
- 进入急救模式,重写或者从备份中恢复grub.conf
- 向MBR扇区中重建grub程序
模拟破坏:
在虚拟机里点如下图
鼠标要在虚拟机里,进入急救模式
grub2-install /dev/sda #重新安装gurb2程序在sda磁盘上
grub2-mkconfig -o /boot/grub2/grub.cfg #重新生成grub菜单配置文件
exit退出自己系统
reboot重启
实验3:破解密码
Centos 7遗忘root用户密码,需要进入急救界面修改密码
故障原因
- 遗忘root用户的密码
故障现象
- 无法进行需要root权限的管理操作
- 若没有其他可用帐号,将无法登录系统
有光驱:
进入急救模式:3 2 1
无光驱:
首先在系统加载内核时按任意键盘停止倒计时,一般习惯使用上下键,然后如下图 按e
将光标移动到linux行开头行的最后,添加 rd.break
mount –o remount,rw /sysroot #进入后修改根目录的权限
chroot /sysroot #切换到根命令
五、服务程序管理
1.介绍
什么是服务程序?
1.一旦运行一直运行,不会退出
2.一般是后台运行,不会影响前台的操作
2.管理服务程序
开启
关闭
重启
重新加载配置文件
开机自启
开机不自启
1.runlevel命令——只能查看切换运行级别与当前运行级别
2.chkconfig命令
chkconfig 必须保证 服务脚本 在 /etc/init.d/目录中有可执行权限的文件(服务管理脚本(case语句))才能执行
3.systemctl命令
systemctl 命令用于管理各种类型的systemd单元 ( centos 7)
systemctl start 服务名 | 启动服务 |
systemctl stop 服务名 | 关闭服务 |
systemctl status 服务名 | 查看服务状态 |
systemctl reload 服务名 | 重新加载服务 |
systemctl restart 服务名 | 重启服务 |
systemctl enable 服务名 | 开机自启 |
systemctl enable --now 服务名 | 开机自启,并立即启动 |
systemctl disable 服务名 | 开机不自启 |
systemctl disable --now 服务名 | 开机不自启,并立即关闭 |
基本格式: systemctl [控制类型] 服务1、服务2(可多个)
yum及rpm安装的软件可以直接使用systemctl去启动 关闭 重启 开机自启等功能
编译安装 不可以直接使用systemctl命令去管理程序 需要手写一个配置文件
实验:编译安装nginx用systemctl 进行管理
在/lib/systemd/system目录下创建一个对应服务的.service文件
如果有报错加,没有忽略
输入完毕后保存退出,而后需要重新加载systemd守护进程(daemon)的配置文件,输入systemctl daemon-reload