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 目录下的服务启动脚本。此目录下定义了两种脚本:(必须是大写的S和K)
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)