文章目录
- 开机启动流程
- 意义
- 流程
- 1.power on开机
- 2.POST 开机自检
- BIOS程序
- 启动顺序
- 3.BIOS程序读取磁盘MBR加载grub2程序到内存
- 4.grub程序读取磁盘/boot下的vmlinuz和initramfs到内存
- lsinitrd查看内核映像初始化文件
- 5.systemd进程启动指定运行级别对应的服务
- 运行级别
- centos7以前
- centos7后
- .service文件与服务开机自启的关系
- .service文件与systemd进程的关系
- 6.当所有的服务都启动后,执行/etc/rc.local脚本里的命令
- 7.读取/etc/fstab文件,加载真正的文件系统
- 8.启动login登录进程,登录用户并加载用户环境变量初始化文件
- 终端类型
- 问题
- 1.开机启动的某个环节出现问题,机器是否可以启动,例如删除/boot分区,破坏MBR?
- 2.木马程序可以藏身在哪里?实现开机自启
开机启动流程
按开机按钮到输入用户名和密码,进入系统背后发生的事情
意义
- 掌握让某个软件开机自启
- 开机不能正常启动,是什么原因,找出哪个环节出现了问题
- 防止黑客植入木马,去查询黑客会把木马放到哪些地方
流程
1.power on开机
2.POST 开机自检
开机自检:上电自检(POST,Power On Self Test)。 指计算机系统,接通电源,(BIOS程序)的行为,包括对CPU、系统主板、基本内存、扩展内存、系统ROM BIOS等器件的测试。如发现错误,给操作者提示或警告。简化或加快该过程,可使系统能够快速启动。
谁来完成开机自检—>主板上的BIOS程序
BIOS程序
BIOS程序是英文“Basic Input Output System”的缩略词,直译过来后中文名称就是基本输入输出系统,BIOS是个人电脑启动时加载的第一个软件
它是一组固化到计算机内主板上一个ROM芯片上的程序,它保存着计算机最重要的基本输入输出的程序、开机后自检程序和系统自启动程序,它可从CMOS中读写系统设置的具体信息,其主要功能是为计算机提供最底层的最直接的硬件设置和控制,此外,BIOS还下昂作业系统提供了一些系统参数,系统硬件的变化是由BIOS隐藏,程序可用BIOS功能而不是直接控制硬件,现代作业系统会忽略BIOS提供的抽象层并直接控制硬件组件。
rom芯片:read only memory --》只读的存储器
ram芯片:随机存取存储器(random access memory的缩写 )–》可读可写
**CMOS:是一个存储BIOS参数配置的芯片,包括cpu的配置,时间的配置,启动顺序的配置,BIOS密码,可以读写,不是只读的 **
BIOS是一个程序会读取CMOS芯片里的参数
如何进入BIOS?
VMware虚拟机:
开机按F2或者如图操作
台式电脑:
开机按DEL或者delete键进入
笔记本电脑:
不同的产商不同
F2
F8
F12
F2+fn
F1~F12
启动顺序
第1引导顺序:hard drive 硬盘
第2引导顺序:cdrom 光驱 ----》安装系统
第3引导顺序:removable device 可移动设备–》u盘,移动硬盘 --》安装系统
第4引导顺序:Network --》从网络启动–》网络中安装服务器启动 --》安装
可以通过+ -来调整启动顺序
建议给你的笔记本的BIOS设置一个密码,防止其他人通过BIOS调整你的开机启动顺序,进入u盘启动,盗取你的笔记本电脑的数据。
设置密码建议简单一点,别自己的都忘记了–》台式和笔记本都可以扣掉主板上的电池,清空所有的配置,这样达到删除密码。
3.BIOS程序读取磁盘MBR加载grub2程序到内存
MBR:主引导记录,启动linux系统的地方,属于磁盘里比较特殊的位置(0磁道1扇区->512字节),存放着真正的启动程序grub或grub2
4.grub程序读取磁盘/boot下的vmlinuz和initramfs到内存
vmlinuz:可引导的,压缩的linux内核
initramfs:initial ram fs 初始化随机访问存储器文件,给内核程序提供一个初始化的内存文件系统的镜像文件,包括驱动程序、工具程序,配套的文件 --》临时的根文件系统的镜像文件
lsinitrd查看内核映像初始化文件
[root@felix_server boot]# lsinitrd initramfs-3.10.0-1160.el7.x86_64.img |more
可以看到initramfs类似于一个根文件系统
5.systemd进程启动指定运行级别对应的服务
vmlinuz和initramfs加载到内存后,会启动第一个进程systemd,systemd进程启动指定运行级别对应的服务。
运行级别
centos7以前
运行级别: 是比较老的概念(在centos7里已经淘汰了),不同的级别里会启动不同的程序,起到一个分类的作用
0 关机 init 0
1 单用户模式
2 多用户模式,不能使用网络里的NFS功能
3 完全多用户模式,能使用网络和同时很多人登录,登录进入系统是字符界面 init 3 -->一般情况下都是运行级别3
4 没有启用
5 图形界面模式 ,能使用网络和同时很多人登录,登录进入系统是图形界面 init 5
6 重启 init 6
查看当前运行级别
[root@felix_server boot]# runlevel
N 3
N 表示之前没有其他运行级别
3 表示当前的运行级别
centos7后
运行级别配置文件
[root@felix_server system]# vim /etc/inittab
查看默认运行级别
[root@felix_server boot]# systemctl get-default
multi-user.target
修改默认运行级别
[root@felix_server system]# systemctl set-default graphical.target
Removed symlink /etc/systemd/system/default.target.
Created symlink from /etc/systemd/system/default.target to /usr/lib/systemd/system/graphical.target.
[root@felix_server system]# systemctl set-default multi-user.target
Removed symlink /etc/systemd/system/default.target.
Created symlink from /etc/systemd/system/default.target to /usr/lib/systemd/system/multi-user.target.
.service文件与服务开机自启的关系
比如进入/etc/systemd/system/multi-user.target.wants多用户级别文件创建一个service链接到sshd服务,就能实现sshd的开机自启
多用户级别文件位置
[root@felix_server system]# cd /etc/systemd/system
[root@felix_server system]# ls
[root@felix_server system]# cd multi-user.target.wants/
[root@felix_server multi-user.target.wants]# ls
设置一个程序开机自启,其实就是创建一个.service的链接文件到这个目录下
[root@felix_server multi-user.target.wants]# systemctl disable sshd 关闭sshd服务开机自启
Removed symlink /etc/systemd/system/multi-user.target.wants/sshd.service. 取消软链接
[root@felix_server multi-user.target.wants]# systemctl enable sshd 开启sshd服务开机自启
Created symlink from /etc/systemd/system/multi-user.target.wants/sshd.service to 增加软链接 /usr/lib/systemd/system/sshd.service.
.service文件与systemd进程的关系
sshd.service文件的作用:其实就是告诉systemd这个服务是干什么的,如何启动,如何停止,如何重启
[root@felix_server system]# systemctl stop sshd
[root@felix_server system]# systemctl start sshd
[root@felix_server system]# systemctl restart sshd
systemctl背后是告诉systemd去启动,停止、重启某个服务
systemd会去调用对应的service文件,找到对应的程序的名字,执行相关的操作
yum安装的程序,都会有一个对应的service文件
但是编译安装的程序,没有service文件,需要我们自己手工的去新建一个service文件,存放到multi-user.target.wants目录下,就可以使用systemctl start 方式启动
6.当所有的服务都启动后,执行/etc/rc.local脚本里的命令
运行级别文件里的服务都启动后,会执行/etc/rc.local脚本里的命令
[root@felix_server system]# vim /etc/rc.local
7.读取/etc/fstab文件,加载真正的文件系统
/etc/fstab文件作用:告诉linux系统,挂载磁盘里的其他分区,加载真正的文件系统,这样用户可以使用这个磁盘的所有分区的数据了,读取文件
8.启动login登录进程,登录用户并加载用户环境变量初始化文件
查看登录进程
[root@felix_server system]# ps aux|grep login
root 680 0.0 0.3 26384 1744 ? Ss 14:46 0:00 /usr/lib/systemd/systemd-logind
root 1646 0.0 0.2 112828 988 pts/0 S+ 16:30 0:00 grep --color=auto login
终端类型
登录的时候,linux系统给我们提供了6个登录终端
[root@server ~]# w
16:40:23 up 18:36, 4 users, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root tty1 145月23 47.00s 0.27s 0.27s -bash
root pts/1 192.168.223.1 14:59 7.00s 0.50s 0.00s w
root tty2 16:39 23.00s 0.02s 0.02s -bash
root tty3 16:40 15.00s 0.01s 0.01s -bash
TTY ,terminate type,linux系统里自带的终端,最正宗的,直接可以使用的终端有6个
切换方式:ctrl+alt+F1~F6
tty1 直接登录linux系统的第1个终端 ctrl+alt+F1
tty2 ctrl+alt+F2
pts ,是模拟器模拟出来的终端(伪终端),例如:xshell 远程登录工具模拟出来的
pts/0
pts/1
pts/2
问题
1.开机启动的某个环节出现问题,机器是否可以启动,例如删除/boot分区,破坏MBR?
不能
2.木马程序可以藏身在哪里?实现开机自启
- 创建一个service文件在多用户级别文件目录下
- 加入/etc/rc.local
- 加载用户环境变量时,写入初始化文件~/.bashrc等
- 开启计划任务,定时执行