系统启动
1.BIOS自检
1.1 POST(Power-on self test)检测系统的硬件(cpu,ram,gpu等)
1.2 搜索启动系统的驱动器(硬盘,u盘),如果是硬盘,BIOS会读取硬盘驱动器第一个扇区(MBR,512字节),并将控制权交给MBR
2.MBR中执行grub等中的配置文件,将内核加载到内存中,并将控制权交给内存,内存初始化系统的设备
centos7
3.初始化系统,/sbin/init
是系统所有进程的父进程,它会读取/etc/inittab
文件来执行相应脚本
在centos7中已经弃用了inittab,在文件夹中添加任何配置将都不会有影响了,而是使用systemctl 命令.
runlevels被targets所替代,默认的两个比较重要的targets.
centos7 | centos6 | 说明 |
---|---|---|
multi-user.target | runlevel 3 | 命令行模式 |
graphical.target | runlevel 5 | 窗口模式 |
查看当前的模式使用命令systemctl get-default
设置默认的模式使用命令systemctl set-default TARGET.target
inittab is no longer used when using systemd.
#
# ADDING CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
#
# Ctrl-Alt-Delete is handled by /usr/lib/systemd/system/ctrl-alt-del.target
#
# systemd uses 'targets' instead of runlevels. By default, there are two main targets:
#
# multi-user.target: analogous to runlevel 3
# graphical.target: analogous to runlevel 5
#
# To view current default target, run:
# systemctl get-default
#
# To set a default target, run:
# systemctl set-default TARGET.target
4.根据3中设定的启动的等级,执行/etc/rc.d/rcx.d
目录里的内容,假设是/etc/rc.d/rc3.d
.该目录下全部是以S或者K开头的链接文件.S表示该等级下启动时需要启动的服务,K表示关机时需要关闭的服务内容.这里所有的服务都会在后台启动.
如果我们需要自己增加启动的内容,可以在init.d目录中增加相关的shell脚本,然后在rc*.d目录中建立链接文件指向该shell脚本。这些shell脚本的启动或结束顺序是由S或K字母后面的数字决定,数字越小的脚本越先执行。例如,/etc/rc.d/rc3.d /S01sysstat就比/etc/rc.d/rc3.d /S99local先执行。
5.执行用户自定义引导程序/etc/rc.d/rc.local。其实当执行/etc/rc.d/rc3.d/S99local时,它就是在执行/etc/rc.d/rc.local。S99local是指向rc.local的符号链接。就是一般来说,自定义的程序不需要执行上面所说的繁琐的建立shell增加链接文件的步骤,只需要将命令放在rc.local里面就可以了,这个shell脚本就是保留给用户自定义启动内容的。
6.完成了系统所有的启动任务后,linux会启动终端或X-Window来等待用户登录。tty1,tty2,tty3…这表示在运行等级1,2,3,4的时候,都会执行"/sbin/mingetty",而且执行了6个,所以linux会有6个纯文本终端,mingetty就是启动终端的命令。除了这6个之外还会执行"/etc/X11/prefdm-nodaemon"这个主要启动X-Window
ubuntu 16.04
1.先执行/etc/rcS.d
的脚本
2.执行/etc/rcN.d
的脚本,N是运行级别
3.执行/etc/rc.local
下的脚本
其中rc0.d~rc.6.d文件夹下分别对应的是操作系统0-6级运行的状态下需要执行的脚本。
配置文件/etc/init/rc-sysinit.conf
中可以找到默认的启动级别,这里默认的级别是2
我们就会执行/etc/rc2.d
目录下的文件,该目录下文件命名的规则是:
S[number][service name]
start表示开起服务,[number]表示运行先后顺序,越小越先执行,[service name]表示服务的名称
所有开机自启动的脚本文件都是放在/etc/init.d/目录下面的:
启动分类 | 描述 | 适用 |
---|---|---|
upstart | init管理 配置文件在/etc/init 或者~/.init | runlevel<5 |
service | rc.d管理,配置文件在etc/init.d 和/etc/rc.local 文件里 | <=5 |
cron | 由contab管理,使用crontab配置 | 不一定 |
startup | 由xdg管理,配置文件在/etc/sdg/autostart 以及~/.config/autostart | =5 |
对于普通用户而言,你的桌面级应用应该使用startup,服务级应用(比如某些功能性的软件脚本)应该使用service,常规性配置可以使用cron,而与启动顺序有关的最好使用upstart。
开机自动启动
修改/etc/rc.local文件
虽然可以在rc*.d中修改但是不建议,rc.local
就是专门为用户提供的,
注意要在exit 0之前添加.
登录自动启动
/profile
是登录后所有用户都会读取的配置文件
~/.profile
该用户登录才会读取的配置文件
http://www.cnblogs.com/hbhzsysutengfei/p/ubuntu-runlevel-autostart-service.html
http://wiki.ubuntu.org.cn/UbuntuManual:Ubuntu_%E5%9F%BA%E7%A1%80#Ubuntu_.E7.B3.BB.E7.BB.9F.E5.BC.95.E5.AF.BC.E8.BF.9B.E7.A8.8B
http://jiajun.iteye.com/blog/387265
http://blog.csdn.net/vincent_yuan1991/article/details/53942711
http://blog.chinaunix.net/uid-26000296-id-3986914.html
http://www.cnblogs.com/ainiaa/archive/2011/12/05/2276989.html
http://wiki.ubuntu.org.cn/%E5%90%AF%E5%8A%A8
https://www.cnblogs.com/zhaopengcheng/p/5806379.html
https://www.cnblogs.com/gary-guo/p/7501145.html