文章目录
第一步 启动初始进程
内核加载之后,开始运行第一个程序/sbin/init(作用:初始化系统环境)
因为init是第一个执行程序,所以它的编号pid = 1
其他的进程都是从它衍生出来的,都是它的子进程。
第二步 确定运行级别
在Linux中有一类叫做“守护进程”,这就是开机启动的程序。
init进程的任务之一就是根据“运行级别”去运行这些开机启动的程序。
“运行级别”:由于不同的环境下需要不同的开机启动程序(如:是否需要桌面),Linux针对一些不同的开机场合分配不同的开机启动程序
Linux的运行等级设定如下:
0:关机
1:单用户模式
2:无网络支持的多用户模式
3:有网络支持的多用户模式
4:保留,没使用
5:有网络支持有X-Window支持的多用户模式
6:重新引导系统,即重启
init进程首先读取/etc/inittab,它是运行级别的设置文件
id:5:initdefault
initdefault =5,表明运行级别为5。可以手动修改这个值
每个运行级别在/etc目录下面,都有一个对应的子目录,装有要加载的程序。
/etc/rc0.d
/etc/rc1.d
/etc/rc2.d
/etc/rc3.d
/etc/rc4.d
/etc/rc5.d
/etc/rc6.d
目录/etc/rc5.d中指定的程序
README
S01console-setup.sh
S02binfmt-support
S03hostapd
S02sudo
S05triggerhappy
.......
除第一个README之外,其他文件名都是“字母(S/K)+两位数+程序名”。
字母S(Start):启动
字母K(Kill):关闭
两位数:处理顺序(越小越早处理)
开机内部启动服务命令:
$ sudo /etc/init.d/apache2 start
# 或者
$ service apache2 start
查看运行级别可以看/etc/inittab也可以用runlevel命令,后续会讲述runlevel命令使用
注:若用户放在/etc/rcX.d里的执行脚本没有被执行,可以放在/etc/profile.d/下面运行,即可okay!!
第三步 init进程执行rc.sysinit
在确定运行等级之后,Linux运行的第一个用户层文件 是/etc/rc.d/rc.sysinit脚本程序。它做的工作非常多,包括设定PATH、设定网络配置(/etc/sysconfig/network)、启动swap分区、设定/proc等等。如果你有兴趣,可以到/etc/rc.d中查看一下rc.sysinit文件
第四步 启动内核模块
具体是依据/etc/modules.conf文件或/etc/modules.d目录下的文件来装载内核模块。
第五步 加载开机启动程序
既然知道了要启动哪些启动程序以及顺序,就开始加载
linux中“运行级别”上述提到有6个,为了让每个“运行脚本”对应的目录中能兼容一个启动程序,可以将每个目录下的运行程序用软链接到真正存放运行程序的地方
lrwxrwxrwx 1 root root 26 Jan 18 17:30 S01console-setup.sh -> ../init.d/console-setup.sh
lrwxrwxrwx 1 root root 24 Jan 18 17:42 S02binfmt-support -> ../init.d/binfmt-support
lrwxrwxrwx 1 root root 17 Jan 18 17:30 S03hostapd -> ../init.d/hostapd
lrwxrwxrwx 1 root root 14 Jan 18 17:30 S02sudo -> ../init.d/sudo
lrwxrwxrwx 1 root root 22 Jan 18 17:41 S05triggerhappy -> ../init.d/triggerhappy
可以看出链接到的目录/etc/init.d下的运行程序
第六步:执行/etc/rc.d/rc.local
rc.local就是在一切初始化工作后,Linux留给用户进行个性化的地方。你可以把你想设置和启动的东西放到这里。
第七步:用户登入
开机启动程序加载完毕后,就要用户登入了
一般有三种登入方式:
1、命令行登入
2、ssh登入
3、图形界面登入
这三种情况有不同对用户进行认证的方式:
命令行登入:
(1)init进程调用getty程序,让用户输入用户名和密码。
(2)调用login程序,核对密码(Debian还会多一项对身份核对的程序/etc/pam.d/login)
(3)审核通过,从文件/etc/passwd读取该用户指定的shell,然后启动ssh登入:
(1)调用sshd程序(同样Debian还是会再一次调用/etc/pam.d/sshd),代替getty和login
(2)启动shell
图形界面登入:
(1)init程序调用显示管理器,Gnome图形界面对应的显示管理器为gdm(GNOME Display Manager),输入用户名和密码
(2)审核通过,读取/etc/gdme/Xsession,启动用户会话
第八步 进入login shell
shell(命令行界面):让用户可以直接与操作系统对话。
用户登录时打开的shell,叫做login shell
Debian默认的shell 是Bash,它会读取一系列的配置文件。上面的三种情况读取的配置文件有所不同
~/.bash_profile
~/.bash_login
~/.profile
命令行登入:
(1)读取/etc/profile ,这是对所有的用户都有效的配置
(2)在对应的用户目录下找上面三个文件(查找规则:三文件只有一个文件存在就不再读入后面的文件)
ssh登入:同命令行登入过程一样
图形界面登入:只加载/etc/profile和~/.profile。
完成上面的步骤,用户就已经可以看到命令行提示符或图形界面了。
第九步 打开non-login shell
用户进入操作系统后,会常动手启动一个shell界面 操作,这个shell就是non-login shell。这个shell不同于上面的shell的读取文件配置的过程。
这个shell会读入用户自己的bash配置文件~/.bashrc 对于bash的定制,都写在这个文件里面的