Linux引导流程

                                         

Kernel内核的作用:第一点:硬件驱动(内核中保存了许多驱动程序)在操作系统的层面上识别硬件。第二步启动一个init进程。init是第一个可以存在的进程,它的PID恒为1,但它也必须向一个更高级的功能负责:PID为0的内核调度器(kernel  scheduler),从而获得CPU时间。分配CPU时间进行进程切换。

固件时钟和软件时钟同步:非常重要的一点

hwclock命令 和 date

hwclock--help
-s| --hctosys      set the system time fromthe hardware clock
-w |--systohc      set the hardware clock tothe current system time

设置指定的时间:

hwclock--set --date="9/22/96 16:45:05"
date--date="2004-02-29 16:21:42"

运行级别  runlevel

通过cat /etc/inittab 可以看到如下信息

#Default runlevel. The runlevels used are:
#   0 - halt (Do NOT set initdefault to this)
#   1 - Single user mode
#   2 - Multiuser, without NFS (The same as 3,if you do not have networking)
#   3 - Full multiuser mode
#   4 - unused
#   5 -X11
#   6 - reboot (Do NOT set initdefault to this)

单用户模式:无图形界面, 默认以root登录且只有root可以登录,

 

查询当前的运行级别: runlevel

 

inittab文件剖析, 把许多配置分离出来到 /etc/init/*.conf

          The /etc/inittab file was theconfiguration file used by the original System V init(8) daemon.

         The Upstart init(8) daemon doesnot use this file,  and  instead reads its configuration from files in /etc/init. Files in this  directory must end in .conf and may also bepresent in sub-directories.

        Each file defines a singleservice or task, with the name taken from its relative path within the directory without the extension.

#System initialization is started by /etc/init/rcS.conf
#Individual runlevels are started by /etc/init/rc.conf
#Ctrl-Alt-Delete is handled by /etc/init/control-alt-delete.conf
#Terminal gettys are handled by /etc/init/tty.conf and /etc/init/serial.conf,withconfiguration in /etc/sysconfig/init.

更多细节请 man 5 init


1、首先

id:3:initdefault:       # initdefault: 指定系统缺省启动的运行级别

2、然后

init服务从/etc/init/目录下读取配置文件,其后缀为 .conf。

[root@localhostinit]# grep 'exec' rcS.conf
exec/etc/rc.d/rc.sysinit      # 执行rc.sysinit ,系统初始化:无论是哪个运行级别都会执行的初始化操作

3、接着

[root@localhostinit]# grep 'exec' rc.conf
exec/etc/rc.d/rc $RUNLEVEL # 执行 rc, 判断 $RUNLEVEL

然后通过 rc 去执行 /etc/rcN.d/S* #N=0-6 , 其实/etc/rcN.d/都是/etc/rc.d/rcN.d的软链接。

[root@localhost~]# ls -l /etc/ | grep 'rc'
lrwxrwxrwx.  1 root root      7Mar 24 18:01 rc -> rc.d/rc
drwxr-xr-x.10 root root   4096 Aug 24 20:54 rc.d
lrwxrwxrwx.  1 root root     13 Mar 24 18:01 rc.local ->rc.d/rc.local
lrwxrwxrwx.  1 root root     15 Mar 24 18:01 rc.sysinit ->rc.d/rc.sysinit
lrwxrwxrwx.  1 root root     10 Mar 24 18:01 rc0.d -> rc.d/rc0.d
lrwxrwxrwx.  1 root root     10 Mar 24 18:01 rc1.d -> rc.d/rc1.d
lrwxrwxrwx.  1 root root     10 Mar 24 18:01 rc2.d -> rc.d/rc2.d
lrwxrwxrwx.  1 root root     10 Mar 24 18:01 rc3.d -> rc.d/rc3.d
lrwxrwxrwx.  1 root root     10 Mar 24 18:01 rc4.d -> rc.d/rc4.d
lrwxrwxrwx.  1 root root     10 Mar 24 18:01 rc5.d -> rc.d/rc5.d
lrwxrwxrwx.  1 root root     10 Mar 24 18:01 rc6.d -> rc.d/rc6.d

rc.d ==  running command.directory

 

/etc/rc.d/rc判断系统默认缺省的运行级别 N, 然后读取/etc/rc.d/rcN.d 目录下的服务启动脚本。此目录下定义了两种脚本:(必须是大写的SK

S12syslog   S表示(start)在此运行级别要启动的  数字:表示优先级  脚本名称

K10tcsd    K表示(kill)在此运行级别要关闭的  数字:优先级   脚本名称

数字越小表示优先级越高

技巧:要禁用某些服务:直接把第一个字母改为对应的小写字母。

 

如果想要手动的启动/关闭一个服务进程,应该怎么做呢?

手动启动某个服务:/etc/rc.d/init.d/sshd  start
            or servicesshd start
手动关闭某个服务:/etc/rc.d/init.d/sshdstop
            or servicesshd stop

其实 linux 所有的服务启动脚本都在 /etc/rc.d/init.d/ 目录下

而/etc/rc.d/rcN.d/目录下的所有脚本都是指向 /etc/rc.d/init.d/目录下脚本的软链接,只是重命名而已。

[root@localhost~]# ls -l /etc/rc.d/rc3.d/
total0
lrwxrwxrwx.1 root root 20 Apr  6 17:33 K01certmonger-> ../init.d/certmonger
lrwxrwxrwx.1 root root 16 Apr  6 17:33 K01smartd-> ../init.d/smartd
lrwxrwxrwx.1 root root 17 Apr  6 17:33 K02oddjobd-> ../init.d/oddjobd
lrwxrwxrwx.1 root root 16 Apr  6 17:33 K10psacct-> ../init.d/psacct
lrwxrwxrwx.1 root root 19 Apr  6 17:33 K10saslauthd-> ../init.d/saslauthd
lrwxrwxrwx.1 root root 15 Apr  6 17:33 K15httpd-> ../init.d/httpd
...

设置自启动程序:

  • ln –s

直接为相应的程序设置一个指向/etc/rc.d/rcN.d/S100name的软链接

  • chkconfig
  • ntsysv   对当前运行级别的程序设置。如果要对其他运行级别设置: ntsysv - -level 3
  • 或者把脚本放在/etc/rc.local目录中:# This script will be executed *after* all the other initscripts. You can put your own initialization stuff in here if you don't want todo the full Sys V style init stuff.

总结一下:

firmware(固件) 硬件层面上的加电自检(POST) =》 读取MBR中的446个字节的BootLoader程序(GRUP)自举程序 =》 加载Kernel (首先进行软件层面上的驱动硬件,接着启动init进程) =》init =》 /etc/inittab =》 initdefault (判断缺省的运行级别) =》 /etc/rc.d/rc.sysinit=》 无论哪个运行级别都会执行的服务启动程序 =》 /etc/rc.d/rc 期待一个运行级别参数=》 然后启动 此目录/etc/rc.d/rcN.d  N=0-6  所有以大写S开头的脚本 =》 登录界面。

(未完待续... 之grub)

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页