目录
一、引导过程
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服务并测试
kernel 实现进程管理、内存管理、网络管理、驱动程序、文件系统、安全功能等功能
内核设计流派
宏内核(monolithic kernel):又称单内核和强内核,Unix,Linux把所有系统服务都放到内核里,所有功能集成于同一个程序,分层实现不同功能,系统庞大复杂,Linux其实在单内核内核实现了模块化,也就相当于吸收了微内核的优点。
微内核(micro kernel):Windows,Solaris,HarmonyOS简化内核功能,在内核之外的用户态尽可能多地实现系统服务,同时加入相互之间的安全保护,每种功能使用一个单独子系统实现,将内核功能移到用户空间,性能差。
服务器主机开机后,根据主板BIOS的设置对cpu、内存、显卡等设备进行基础检测,检测成功后根据预设的启动程序移交系统控制权,大多时候会移交系统控制权,大多时候会移交给本机硬盘。
总结:如果是网络启动的话会开启pxe。
检测硬件是否正常然后根据BIOS中的启动项,去找操作系统
当从本机硬盘中启动系统时,首先根据硬盘第一个扇区中 MBR(Master Boot Record, 主引导记录)的设置,将系统控制权传递给包含操作系统引导文件的分区;或者直接根据 MBR 记录中的引导信息调用启动菜单(如 GRUB)。
总结:运行放在MBR扇区里的启动 GRUB引导程序
统一启动加载器:MBR、GRUB
因为GRUB太大,在第一个扇区放不下,所以GRUB分为两部分
MBR是指引硬件找到内核文件
对于 Linux 操作系统来说,GRUB(GRand Unified Bootloader,统一启动加载器)是 使用最为广泛的多系统引导器程序。系统控制权传递给 GRUB 以后,将会显示启动菜单给 用户选择,并根据所选项(或采用默认值)准备加载 Linux 内核文件,然后将系统控制权转交给 内核。需要注意的是,CentOS 7 采用的是 GRUB2 启动引导器。
总结:GRUB引导程序通过读取GRUB配置文件/boot/grub2/grub.cfg,来获取内核和镜像文件系统的设置和路径位置
根据GRUB配置文件(grub.cfg)中记录的位置去找到内核文件(高级语言)
linux内核是一个预先编译好的内设二进制文件,介于各种硬件资源与系统程序之间,负责资源分配与调度,内核接过系统控制权后转交给内核后,将完全掌握整个linux操作系统的运行过程,在cenos中默认的内核文件放置位置在/boot/vmlinuz-3.10.0-514.el7.x86_64”。
总结:把内核和镜像文件系统加载到内存中 可以使用;把内核运行在内存中
为了完成进一步的系统引导过程,linux内核首先将系统中的“/sbin/init”程序加载到内存运行(运行中的程序称为进程),init进程完成一系列的初始化过程,最后才会让用户登录
总结:加载硬件驱动程序,内核把init进程加载到内存中运行
第一个主进程
Centos7和Centos6的区别
1.普通用户的uid号范围不同
2.系统初始化进程Centos6是init,Centos7是systemd
开机启动的完整总结:
第一步加电后会BIOS程序会自检硬件,硬件无故障后,会根据第一启动项去找内核,一般来说第一启动项是硬盘,找到硬盘后,会根据MBR的指引找到完整的GRUB程序,再根据GRUB的配置文件找到内核文件的具体位置,然后将内核文件加载到内存中运行,内存加载好后会启动第一个程序。
由Linux内核加载运行/sbin/init程序
init进程是系统中第一个进程
init进程的PID(进程标记)号永远为1
Systemd是Linux操作系统的一种init软件,是系统级程序,代为管理系统上的服务程序
Centos7中采用全新的Systemd启动方式,取代传统的SysVinit
Centos7中运行的第一个init进程是/lib/systemd/systemd
init是串型启动后续的程序,程序之间有依赖关系,程序按顺序依次启动
systemd是并行启动程序,所有程序一起启动
引入:rpcbind程序如果启动,会监听111端口;如果rpcbind没有启动,systemd会代为监听
systemd是保姆级程序,如果是yum或者编译安装的软件,都可以直接使用systemctl命令去启动、关闭、重启、开机自启等功能;但是如果是编译安装的话,需要手写一个配置文件才可以使用systemctl命令去管理程序。
单元类型 | 扩展名 | 说明 |
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方便便利程序,将程序按照特定的功能分成了很多单元;其中服务单元最主要的是写配置文件
运行级别 | 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 代表图形界面
故障原因
故障现象
解决思路
[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 可以查看输入后的效果
第一步,新建磁盘,将备份文件备份到新盘
第二步,备份分区表及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
故障原因
故障现象
解决思路
grub只需备份446字节
进入急救模式与MBR修复一致
与MBR分区抢修一致
从光盘的根目录切换到当前系统的根
第一步,先模拟破坏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
最后exit退出
reboot重启
Xshell连接成功即为成功
第一步,进入系统在选择内核界面,选择第一个选项按E键进入内核操作界面
第二步,光标移动到Linux开头行最后,添加rd.break,Ctrl + x 进入单用户界面
第三步,重新挂载
mount -o remount,rw /sysroot #重新挂载 添加读写权限
第四步,切换到真正的根目录
chroot /sysroot
第五步,修改密码
passwd
第六步,退出并重启
exit→reboot
延伸:如果开启了selinux的话需要重新打上标记
systemctl 控制类型 服务名称
控制名 | 含义 |
start | 启动 |
stop | 停止 |
reload | 重新加载 |
staus | 查看服务状态 |
Centos6使用chkconfig;Centos7使用systemd
0123456代表级别
0代表关机;1代表单用户;234代表字符界面(2没有nfs;4没有用过);5图形化界面;6重启
1.一旦运行,一直运行
2.一般是后台运行,不会影响前台操作
Service | 服务程序 | start | 开启 |
stop | 关闭 | ||
restart | 重启 | ||
reload | 重新加载配置文件 | ||
status | 查看服务状态 |
在/etc/init.d写一个同名文件的脚本(必须要有执行权限)
chkconfig --add 服务名称
chkconfig --level 35 服务程序 on 开机自启
chkconfig --level 35 服务程序 off 关闭开机自启
systemctl | start | 服务名 | 开启服务(可以同时启动12345多个程序服务) |
stop | 关闭服务 | ||
status | 查看服务状态 | ||
reload | 重新加载配置文件 | ||
restart | 重启服务 |
systemctl enable 服务名 开机自启
systemctl enable --now 服务名 开机自启并立即启动
systemctl disable 服务名 开机不自启
systemctl disable --now 服务名 开机不自启并立即关闭
如果用yum安装以及rpm安装 会自动生成一个配置文件 不需要我们手动加入systemd会自己添加
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进行上述操作
[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.