主要内容:
系统启动过程
init启动过程
chkconfig的增,删,查
Linux组成
Linux: kernel+rootfs
kernel: 进程管理、内存管理、网络管理、驱动程序、文件系统、安全功能
rootfs:程序和glibc 库:函数集合, function, 调用接口(头文件负责描述)
过程调用:procedure,无返回值
函数调用:function 程序:二进制执行文件 v
内核设计流派: 单内核(monolithic kernel):Linux 把所有功能集成于同一个程序
微内核(micro kernel):Windows, Solaris 每种功能使用一个单独子系统实现
核心文件: /boot/vmlinuz-2.6.18…
LINUX特点:
支持模块化:.ko(内核对象) 如:文件系统,硬件驱动,网络协议等
支持动态加载和卸载
组成部分:
核心文件 :/boot/vmlinuz-2.6.18..
CentOS6,7: /boot/initramfs-VERSION-release.img
模块文件:/lib/modules/VERSION-release
启动过程:
加载BIOS的硬件信息,获取第一个启动设备。
读取第一个启动设备MBR的引导加载程序(grub)的启动信息
加载核心操作系统的核心信息,核心开始解压缩,并尝试驱 动所有的硬件设备。
核心执行init程序并获取运行信息。
Init执行/etc/rc.d/rc.sysinit文件。
启动核心的外挂模块(/etc/modprobe.conf)。
Init执行运行的各个批处理文件(scripts).
Init执行/etc/rc.d/rc.local.
执行/bin/login程序,等待用户登录。
登录之后开始以Shell控制主机。
具体流程:
1 POST:上电自检,检查CPU,主板,内存,硬盘
ROM:不可写入内存,存着系统最基本的输入输出程序,系统信息设置,开机加电自检程序
RAM:保存各项参数设定,易失性内存,拔掉电池就丢失
2 MBR:
446字节 bootloader
64:分区表
2:55AA
grub启动3个阶段
1 primary boot loader
1.5 读取硬盘后续的20-30个分区中存放的驱动信息
2 读取分区文件
3 加载内核文件,并解压缩内核文件,再执行内核文件
Bootloader:
window:仅仅用来启动系统
linux:功能比较丰富,可以选择启动内核版本 GRUB
4 获取runlevel级别
init程序:
读取/etc/inittab /etc/init.*/.conf文件
不同的级别将会加载不同的程序,启动不同的服务。
运行的所有初始化脚本放在/etc/init.d/目录下,不同运行级别对应不同的文件夹,每个级别有自己的目录存放服务,rc#.d。
Init执行运行的各个批处理文件(scripts).
Init执行/etc/rc.d/rc.local.
5 用户登录
执行/bin/login
(1)命令行登录:init进程调用getty程序(意为get teletype),让用户输入用户名和密码。输入完成后,再调用login程序,核对密码,如果密码正确,就从文件 /etc/passwd 读取该用户指定的shell,然后启动这个shell。
(2)ssh登录:这时系统调用sshd程序,取代getty和login,然后启动shell。
内核文件被删除恢复
1 删除initramfs-`uname -r`
2 启动时按住esc,进入光盘启动
3 进入救援模式
4 chroot /mnt/sysimage
cd /boot
mkinitrd initramfs-`uname -r`.image `uname -r`
5 拷贝生成的文件到/boot目录下
/sbin/init CentOS6之前 v
运行级别:为系统运行或维护等目的而设定;0-6:7个级别
0:关机
1:单用户模式(root自动登录), single, 维护模式
2: 多用户模式,启动网络功能,但不会启动NFS(共享);维护模式
3:多用户模式,正常模式;文本界面
4:预留级别;可同3级别
5:多用户模式,正常模式;图形界面
6:重启 v
默认级别: 3, 5 v
切换级别:init # v
查看级别:runlevel ; who -r
init初始化:
init读取其初始化文件:/etc/inittab
初始运行级别(RUN LEVEL)
系统初始化脚本
对应运行级别的脚本目录
捕获某个关键字顺序
定义UPS电源终端/恢复脚本
在虚拟控制台生成getty
在运行级别5初始化X
/etc/inittab
设置系统默认的运行级别 id:3:initdefault: v
/etc/init/control-alt-delete.conf v/etc/init/tty.conf v/etc/init/start-ttys.conf v /etc/init/rc.conf v /etc/init/prefdm.conf
K* K开头的:kill
S* S开头的:start
数字越小越先执行
init启动流程详解:
1 解析/etc/inittab 文件,执行sysinit指定的进程,/etc/rc.d/sysinit
2 执行sysinit脚本,这是由init执行的第一个脚本,此步进行的工作包括配置网络、配置内核参数、挂载root文件系统、检查文件系统、设置系统时钟、配置机器、开启交换空间等。
3 执行/etc/rc.d/rcX.d/[K…][S…]:根据定义的initdefault运行级别,执行对应wait命令指定的程序,这会运行对应目录下的各个程序,并等待它们运行完。在rcX.d目录下,首先终止K开头的服务(用来关闭一个服务),然后启动S开头的服务(用来启动一个服务)。对每一个运行级别来说,在/etc/rc.d子目录中都有一个对应的下级目录。这些运行级别的下级子目录的命名方法为rcX.d, 其中X就是代表运行级别的数字。在各个运行级别的子目录中,都建立有到/etc/rc.d/init.d子目录中命令脚本程序的符号链接,链接的名称在K与S后有一个数字,表示执行顺序,数字小的先执行,例如K01tog-pegasus、S00microcode_ctl。对以K开头的脚本执行时系统会传递stop参数,而S开头的脚本系统会传递start参数。
4 最后执行rc.d/rc.local脚本
5 执行getty程序:为每个联机终端使用fork()创建一个子进程,并在子进程中运行getty程序,init进程则调用wait(),进入等待子进程结束状态。getty程序设置终端类型、属性、速度和线路规程等。对于字符界面的运行级别(如级别2和3),它会打开并初始化一个tty端口,显示提示信息。通常,若/etc/issue文本文件存在,则getty会首先显示其中的文本信息,然后显示登录提示信息(例如“plinux login:” ),出现字符登录界面,并等待用户键入用户名和口令。可以在inittab文件中配置使用哪一种getty程序(在“id:runlevels:action:process”的process部分指定,并可以传递相应的getty参数),如agetty, getty, mgetty, uugetty, mingetty,fbgetty等。getty程序只能由超级用户执行。
6执行login程序:getty调用exec()执行login程序,以核对输入的用户名和口令。由于调用了exec(而不是fork),login的执行环境会覆盖getty的执行环境。login进程会读取
/etc/passwd,以用户名和口令。login根据用户输入的用户名,从口令文件passwd中取得对应用户的登录项,然后调用getpass()以显示”password:”提示信息,读取用户键入的密码
然后使用加密算法对键入的密码进行加密处理,并与口令文件中该用户项中pw_passwd字段作比较。如果用户几次键入的密码均无效,则login程序会以出错码1退出执行,表示此次登录过程失败。此时父进程(进程init)的wait()会返回该退出进程的pid,因此会根据 记录下来的信息再次创建一个子进程,并在该子进程中针对该终端设备再次执行getty程序,再重复上述过程。如果用户键入的密码正确,则login就会把当前工作目录(Currend Work Directory)修改成口令文件中指定的起始工作目录。并把对该终端设备的访问权限修改成用户读/写和组写,设置进程的组ID。然后利用所得到的信息初始化环境变量信息,例如起始目录(HOME=)、使用的shell程序(SHELL=)、用户名(USER=和LOGNAME=)和系统执行程序的默认路径序列(PATH=)。接着显示/etc/motd文件(message-of-the-day)中的文本信息,并检查并显示该用户是否有邮件的信息。最后login程序改变成登录用户的用户ID,并执行口令文件中该用户项中指定的shell程序,如/bin/bash或/bin/csh等。
chkconfig命令 v 查看服务在所有级别的启动或关闭设定情形:
chkconfig [–list] [name] v 添加: SysV的服务脚本放置于/etc/rc.d/init.d (/etc/init.d) chkconfig –add name
添加服务格式
#!/bin/bash
#LLLL 表示初始在哪个级别下启动,–表示都不启动
# chkconfig: LLLL nn nn v
#description:xxx
删除服务: chkconfig –del name v
修改指定的链接类型
chkconfig [–level levels] name <on|off|reset>
–level LLLL: 指定要设置的级别;省略时表示2345
删除服务脚本步骤:
1 先用chkconfig –del 删除服务
2 删除服务文件
xineted:一系列非独立服务的代理
原创文章,作者:liuzhuo,如若转载,请注明出处:http://www.178linux.com/44616
评论列表(1条)
写的很详细,赞一个