代码改变世界

Linux笔记 其二 系统引导流程

2012-02-28 21:47  freeacger  阅读(1009)  评论(0)    收藏  举报

Linux引导流程解析

注:*代表需要掌握的一些知识点。

学习目的:
  了解Linux引导流程

问题:
1.如何进入单用户模式?
2.如果忘了root怎么办?
3.如何加密GRUB菜单?
4.Linux有几个运行等级,分别代表什么?


计算机常识:

硬盘MBR(Master Boot Recorder)主引导记录
硬盘读取数据的第一个位置,存放自举程序、分区表

Windows 使用NTLDR引导 配置文件为boot.ini
Linux 使用GRUB引导 配置文件为 grub.conf

软件时钟 date查看/设置
硬件时钟(CMOS) hwclock查看/设置

date [MMDDhhmm[[CC]YY][.ss]]
M-month
D-day
h-hour
m-minute
C-century
Y-year
s-second

hwclock --set --date="9/22/96 14:45:56"

获得命令主要选项设置帮助:命令 --help


Linux引导流程解析

固件firmware(CMOS/BIOS) --> POST加点自检
    | * 软硬件时钟设置、同步,帮助使用
自举程序BootLoader(GRUB) --> GRUB配置文件
    | * 单用户模式、光盘修复模式
载入内核Kernel --> 驱动硬件
    | * dmesg、内核版本和存放位置
启动进程init
    | * 进程
读取配置文件/etc/inittab --> 读取运行等级
    | * 缺省运行级别initdefault
初始化/etc/rc.d/rc.sysinit
    |
/etc/rc.d/rc
    | * 自启动程序管理、手工管理服务
/etc/rc.d/rcN.d(N=0-6)
    |
启动X Window /etc/X11/prefdm




GRUB
内核启动程序存放目录 /boot
配置文件 /boot/grub/grub.conf:

#缺省启动项
default=0
#超时时间
timeout=5
#引导时背景图片
splashimage=(hd0,0)/boot/grub/splash.xpm.gz
#隐藏菜单,此项可去掉
hiddenmenu
#可以设置密码 命令:grub-md5-crypt
#password --md5 yourpassword
#系统启动项标题
title CentOS (2.6.32-220.el6.i686)
#boot目录所在硬盘分区
root (hd0,0)
#将要启动的内核,在结尾加上空格s或1即可进入单用户模式
#vmlinuz-2.6.32-220.el6.i686
# |
#中间数6,基数为测试版,偶数为正式版
kernel /boot/vmlinuz-2.6.32-220.el6.i686 ro root=UUID=fcfd578b-b174-496a-9412-bf5da64e8217 nomodeset rd_NO_LUKS KEYBOARDTYPE=pc KEYTABLE=us rd_NO_MD quiet rhgb crashkernel=auto LANG=zh_CN.UTF-8 rd_NO_LVM rd_NO_DM
#镜像文件
initrd /boot/initramfs-2.6.32-220.el6.i686.img


单用户模式-root密码忘了?
e-进入GRUB菜单
e-进入详细菜单
选择kernel行,e-进入GRUB编辑状态,在末尾空格1,回车
b-启动
进入单用户模式:passwd root
退出:exit(回到默认运行等级)

GRUB加密
grub-md5-crypt
将得到的md5密码放在grub.conf的password --md5 加密密码


inittab:

# Default runlevel. The runlevels used are:
# 缺省运行等级. 运行等级有:
# 0 - 关机(设了此项会无法启动)
# 1|s|S - 单用户模式,只有root能登陆
# 2 - 字符多用户模式(不启动NFS,NFS-Network File System,实现Linux/UNIX的文件共享,安全性差)
# 3 - 字符多用户模式
# 4 - 自定义
# 5 - 图形多用户模式(X11 X11R6 XFree86)
# 6 - 重启(设了此项会一直重启)
#
#id:runlevels:action:process
#id-行标记,runlevels-如果为空代表所有运行级别都执行,action-执行的要求或形式
#process-执行的操作(命令或脚本)
id:3:initdefault:

切换运行级别: init 运行级别
查看运行级别: runlevel

rc.d(r-resource,c-contral,d-deamon)
/etc/rc.d/rc.sysinit --> 用于初始化系统
/etc/rc.d/rc --> 用户启动缺省运行等级

/etc/rc.d/rc(0-6).d --> 定义各个运行等级所要启动的服务程序
此目录下的文件特征:
例:S08iptables
大写S开头的标识需要启动的服务 --> 启动时
大写K开头的标识需要关闭的服务 --> 此项用户切换运行级别时
数字08代表启动优先级,如果数字一样,则根据文件创建时间排序
iptables --> 服务名称

chkconfig 查看和设置服务
1.查看: chkconfig --list 服务名
2.设置: chkconfig --levels 运行级别 服务名 on|off

nvsysv 针对运行级别设置
ntsysv --level 运行级别

/etc/rc.d/init.d 保存系统所有服务启动脚本
start|stop|restart 启动|关闭|重启
reload 重新加载配置文件
status|fullstatus 进程状态
httpd: configtest 检查语法错误

/etc/rc.d/init.d/httpd start = /etc/init.d/httpd start
= service httpd start (UNIX不支持)

init 进程的PID恒为1(PID-process ID,PID一般都是随机分配的)

PPID-Parent Process ID 父进程
PID为0的是内核调度器
现代的cpu一般都是分时的

进程树:
父进程终止,子进程自动终止
孤儿进程(父进程终止了,子进程没有终止)--父进程指向init
僵尸(Zombie)进程(没有指向任何父进程)

ps -le | more 查看当前进程状态