系统启动流程
BIOS ==> MBR:Boot Code ==> 执行引导程序-GRUB ==> 加载内核 ==> 运行 init ==> runlevel
BIOS (Basic Input Output System)
称之为基本输入输出系统,一般保存在主板的BIOS芯片中。BIOS负责检查硬件(自检)并且查找可启动设备。可启动设备在BIOS设置中进行定义,如USB、CDROM、HD
MBR
BIOS 找到可启动设备后执行其引导代码。引导代码为MBR的前446字节。
GRUB
Grub是现在linux使用的主流引导程序。可以用来引导现在几乎所有的操作系统。Grub的相关文件保存在/boot/grub 目录中,Grub的配置文件为/boot/grub/grub.conf
CentOS/RHEL 7 时升级到 GRUB2
加载内核kernel
MBR的引导代码将负责找到并加载linux内核。linux内核保存在/boot/vmlinuz*。一般还会加载内核模块打包文件/boot/initramfs*.img。(linux为了保持kernel精简,将一些不常用的驱动。功能编译成模块,在需要的时候动态加载,而这些模块被打包为initramfs文件。早期linux使用initrd文件,initramfs是initrd的替代优化版本,更节省空间更灵活。)
命令 dmesg 可以查看本次启动时内核的输出信息。(对应日志文件/var/log/dmesg)
运行 init
init 是linux系统中运行的第一个进程(PID = 1),init是所有进程的父进程。调用 /etc/rc.d/rc.sysinit 负责对系统进行初始化 ,挂载文件系统,并且根据运行级别启动相应服务。
运行级别 runlevel
0:关机
1:单用户(找回丢失密码)
2:多用户状态没有网络服务
3:多用户状态有网络服务
4:空(保留)
5:图形界面
6:系统重启
可以通过/etc/inittab 配置文件修改默认的运行级别,其他的配置项在目录/etc/init/目录下。
每个运行级别对应对应的启动服务保存在/etc/rc.d/rc[0123456].d中
命令runlevel 可显示上一个运行级别及当前运行级别
命令init 可切换运行级别,如切换到运行级别 3 init 3
加载开机启动程序
前面提到,七种预设的"运行级别"各自有一个目录,存放需要开机启动的程序。不难想到,如果多个"运行级别"需要启动同一个程序,那么这个程序的启动脚本,就会在每一个目录里都有一个拷贝。这样会造成管理上的困扰:如果要修改启动脚本,岂不是每个目录都要改一遍?
Linux的解决办法,就是七个 /etc/rcN.d==> /etc/rcN.d 目录里列出的程序,都设为链接文件,指向另外一个目录 /etc/init.d ==>/etc/rc.d/init.d,真正的启动脚本都统一放在这个目录中。init进程逐一加载开机启动程序,其实就是运行这个目录里的启动脚本。
在/etc/rc.d/rc3.d/目录下的链接文件如下图:
这样做的另一个好处,就是如果你要手动关闭或重启某个进程,直接到目录 /etc/init.d 中寻找启动脚本即可。比如,我要重启Apache服务器,就运行下面的命令:
sudo /etc/init.d/apache2 restart
/etc/init.d 这个目录名最后一个字母d,是directory的意思,表示这是一个目录,用来与程序 /etc/init 区分。
配置自启动服务
配置当前开机启动运行级别下的自启动服务 :ntsysv
配置运行级别3下的自启动服务 : ntsysv --level 3chkconfig命令可设置系统的各种服务(具体的使用不表述了,搜索一下chkconfig命令即可)
systemctl 命令
最近在配置阿里云的centOS7.4 ,已经在使用新的命令systemctlsystemctl命令是系统服务管理器指令,它实际上将 service 和 chkconfig 这两个命令组合到一起。
| 任务 | 旧指令 | 新指令 |
|---|---|---|
| 使某服务自动启动 | chkconfig httpd on | systemctl enable httpd.service |
| 使某服务不自动启动 | chkconfig httpd off | systemctl disable httpd.service |
| 检查服务状态 | service httpd status | systemctl status httpd.service |
| 显示所有已启动的服务 | chkconfig --list | systemctl list-units --type=service |
| 启动某服务 | service httpd start | systemctl start httpd.service |
| 停止某服务 | service httpd stop | systemctl stop httpd.service |
| 重启某服务 | service httpd restart | systemctl restart httpd.service |
自启动脚本
说白了开机启动会运行/etc/rc.d/rc.local文件,编辑该文件,在尾部加上需要运行的命令或脚本即可(确保rc.local有可运行权限)
进程
ps命令是Process Status的缩写,ps命令列出的是当前那些进程的快照,如果想要动态的显示进程信息,就可以使用top命令。
ps命令top命令kill 命令