开机启动流程
CentOS6启动流程
1.内核引导
加电自检,检查bios的配置,检测硬件,开机
2.运行init
- 0:关机
- 1:单用户模式
- 2:多用户模式(没有文件系统和网络)
- 3:多用户模式(命令行,默认模式)
- 4:没有使用的模式
- 5:多用户模式(图形化界面)
- 6:重启
3.系统初始化
4.建立终端
5.用户登录
## 关机命令
init 0
halt
shutdown -h now
shutdown -h 20:20
shutdown -h +10
poweroff
## 重启命令
init 6
reboot
shutdown -r now
shutdonw -r 20:20
shutdown -r +10
CentOS7开机启动流程
1.BIOS(开机自检)
2.MBR ( Master Boot Record 主引导记录)
3.GRUB2 Bootloader(引导菜单)
4.Kernel(内核引导)
5.Systemd (不再使用init,改成了systemd)
- 找/etc/systemd/system/default.target
- /usr/lib/systemd/system/multi-user.target
- 找到/etc/systemd/system/multi-user.target.wants
6.Runlevel-Target (行级别)
7.建立终端
8.用户登录
运行级别:
init 0.target -> poweroff.target # 关机
init 1.target -> rescue.target # 单用户模式
init 2.target -> multi-user.target # 多用户模式(没有文件系统和网络)
init 3.target -> multi-user.target # 多用户模式(命令行)
init 4.target -> multi-user.target # 多用户模式(还是没有被使用)
init 5.target -> graphical.target # 图形化模式
init 6.target -> reboot.target # 重启
运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动
运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登陆
运行级别2:多用户运行级别(没有文件系统)
运行级别3:完全的多用户状态(有文件系统),登陆后进入控制台命令行模式
运行级别4:多用户运行级别
运行级别5:X11控制台,登陆后进入图形GUI模式
运行级别6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动
# 设置开机自启动
systemctl enable nginx
ln -s /usr/lib/systemd/system/nginx.service /etc/systemd/system/multi-user.target.wants/nginx.service
# 获取当前默认的运行级别
[root@qls ~]# systemctl get-default
multi-user.target
# 修改运行级别
[root@qls ~]# systemctl set-default poweroff
## 使用两条命令修改默认运行级别
[root@qls ~]# rm -f /etc/systemd/system/default.target
[root@qls ~]# ln -s /usr/lib/systemd/system/poweroff.target /etc/systemd/system/default.target
## 相关目录
[root@qls ~]# ll /etc/systemd/system (默认的运行级别)
[root@qls ~]# ll /usr/lib/systemd/system (运行级别和服务启动脚本)
修改开机默认运行级别
单用户引导:方法一
进入grub菜单按e进入单用户模式
**在linux7 行末,加上:enforcing=0 init=/bin/bash
修改完之后,按Ctrl + X**
注意:
-
设置默认的启动级别实际上的操作是删除软连接和创建软连接的过程
/etc/systemd/system/default.target # 此文件有软连接默认启动级别
## 修改默认启动方式
bash-4.2# mount -o rw,remount / # 将原本的只读权限,修改为读写权限并且重新挂载
bash-4.2# systemctl set-default(不能用) # 在当前此模式下无法修改启动级别
bash-4.2# rm -f /etc/systemd/system/default.target # 删除默认连接文件(和命令systemctl一样效果)
# 创建新的连接文件
bash-4.2# ln -s /usr/lib/systemd/system/multi-user.target /etc/systemd/system/default.target
bash-4.2# exec /sbin/init # 重新引导
单用户引导:方法二
同样需要进入到grub界面,按e进入
同样linux16行末添加内容,ctrl+x执行进入
switch_root:/# mount -o rw,remount /sysroot # 重新挂载文件系统
switch_root:/# chroot /sysroot # 提权切换
sh-4.2# systemctl set-default multi-user.target # 更换默认运行级别
sh-4.2# exit # 退出
sh-4.2# reboot # 重启
忘记root密码
单用户模式重置:方法一
找到linux行末,添加enforcing=0 init=/bin/bash 然后按ctrl+x开始执行
## 修改密码
bash-4.2# mount -o rw,remount / # 添加权限
bash-4.2# echo 123|passwd --stdin root # 修改密码
bash-4.2# exec /sbin/init # 重新引导
救援模式重置:方法二
- 开机进入bios界面,选择CDROM设置为引导启动项
-
进入救援模式()
-
进入救援模式
-
选择继续,输入1回车即可
-
提权并进行密码修改
-
退出模式,并重新启动
救援模式(修复MBR损坏)
-
模拟损坏MBR
dd < /dev/zero > /dev/sda bs=1 count=446 # 强行将硬盘MBR进行损坏
-
将光驱放入系统中,作为开机boot引导项
-
打开电源,进入bios界面
-
将CD-ROM设为引导启动项(shift+将CD置顶)
-
f10保存退出
-
选择yes
-
进入救援模式
-
进入救援模式后选择继续
-
选择1选项
-
获取root环境变量(此图片仅作为解释,不以此图做任何操作)
-
回车后输入/mnt/sysimage(提权操作)
-
退出模式后重启
救援模式(误删除GRUB菜单)
- 模拟误删除GRUB菜单,进入救援模式
rm -rf /boot/grub2 # 删除grub2菜单
reboot # 重启查看效果
- 同MBR损坏操作一致,仅需要多敲一条命令
chroot /mnt/sysimage # 安装系统提示进行提权
grub2-install /dev/sda # grub2安装MBR引导项
grub2-mkconfig -o /boot/grub2/grub.cfg # 通过此命令在/boot/grub2/目录生成文件.cfg
exit # 退出此模式
reboot # 重启
设置nginx开机启动(不用systemd方式)
-
前提:不使用systemctl的方式对nginx设置开机启动
-
原理:使用systemctl命令开机启动nginx,是将nginx的启动脚本文件创建软连接到/etc/systemd/system目录下的对应运行级别的.wants目录下
-
实现过程:
? 一、找到默认nginx启动文件:/usr/lib/systemd/system/nginx.service
? 二、创建软连接到:/etc/systemd/system/multi-usr.target.wants(针对运行级别三,其他级别不一样)
-
查看结果
注:
一切详情可查看(zls网站)[https://www.driverzeng.com/zenglaoshi/1810.html]
systemd进程管理
systemd优势
1.最新系统都采用systemd管理(RedHat7,CentOS7,Ubuntu15...)
2.CentOS7 支持开机并行启动服务,显著提高开机启动效率
3.CentOS7关机只关闭正在运行的服务,而CentOS6,全部都关闭一次。
4.CentOS7服务的启动与停止不在使用脚本进行管理,也就是/etc/init.d下不在有脚本。
5.CentOS7使用systemd解决原有模式缺陷,比如原有service不会关闭程序产生的子进程。
systemd 相关文件
相关文件 | CentOS6 | CentOS7 |
---|---|---|
服务启动脚本存放路径 | /etc/init.d | /usr/lib/systemd/system |
开机自启服务存放路径 | /etc/rcN.d | /etc/systemd/system/N.target.wants |
默认运行级别 | /etc/inittab | /etc/systemd/system/default.target |
systemd启动相关命令
system V init CentOS6 | systemd CentOS7 | 作用 |
---|---|---|
/etc/init.d/nginx start | systemctl start nginx | 启动nginx服务 |
/etc/init.d/nginx stop | systemctl stop nginx | 停止nginx服务 |
/etc/init.d/nginx status | systemctl status nginx | 查看服务的启动状态 |
/etc/init.d/nginx restart | systemctl restart nginx | 重启服务 |
/etc/init.d/nginx reload | systemctl reload nginx | 不停止服务,重新加载nginx配置文件 |
systemctl is-acvite nginx | 判断nginx服务是否存活 | |
systemctl mask nginx | 禁止服务运行 | |
systemctl unmask nginx | 取消禁止 |
systemd开机自启动相关命令
C6 | C7 | 作用 |
---|---|---|
chkconfig --list | systemctl list-unit-files | 查看开机自启的服务 |
chkconfig nginx on | systemctl enable nginx | 加入开机自启动 |
chkconfig nginx off | systemctl disable nginx | 关闭开机自启动 |
chkconfig --list nginx | systemctl is-enabled nginx | 查看指定服务是否被开机自启 |
chkconfig --add nginx | systemctl daemon-reload | 当我们手写脚本时让系统认识 |
systemd服务状态
服务状态 | 状态说明 |
---|---|
loaded | 服务单元的配置文件已经被处理 |
active(running) | 服务的一个或多个进程在运行中 |
active(exited) | 一次性运行的服务成功被执行并退出(服务运行后完成任务,相关进程会自动退出) |
active(waiting) | 服务已经运行但在等待某个事件 |
inactive | 服务没有在运行 |
enable | 服务设定为开机运行 |
disabled | 服务设定为开机不运行 |
static | 服务不能被设定开机启动,但可以由其他服务启动该服务 |