linux启动过程步骤
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux启动过程步骤相关的知识,希望对你有一定的参考价值。
这是一个非常复杂的过程,但是可以简单的概括为如下几个步骤,每一个步骤你可以构思一些巧妙的实现来加深体。启动第一步--加载Bios
当你打开计算机电源,计算机会首先加载BIOS信息,BIOS信息是如此的重要,以至于计算机必须在最开始就找到它。这是因为BIOS中包含了CPU的相关信息、设备启动顺序信息、硬盘信息、内存信息、时钟信息、PnP特性等等。在此之后,计算机心里就有谱了,知道应该去读取哪个硬件设备了。
启动第二步--读取MBR
众所周知,硬盘上第0磁道第一个扇区被称为MBR,也就是Master Boot Record,即主引导记录,它的大小是512字节,别看地方不大,可里面却存放了预启动信息、分区表信息。
系统找到BIOS所指定的硬盘的MBR后,就会将其复制到0x7c00地址所在的物理内存中。其实被复制到物理内存的内容就是Boot Loader,而具体到你的电脑,那就是lilo或者grub了。
启动第三步--Boot Loader
Boot Loader 就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核做好一切准备。
Boot Loader有若干种,其中Grub、Lilo和spfdisk是常见的Loader。
我们以Grub为例来讲解吧,毕竟用lilo和spfdisk的人并不多。
系统读取内存中的grub配置信息(一般为menu.lst或grub.lst),并依照此配置信息来启动不同的操作系统。
启动第四步--加载内核
根据grub设定的内核映像所在路径,系统读取内存映像,并进行解压缩操作。此时,屏幕一般会输出“Uncompressing Linux”的提示。当解压缩内核完成后,屏幕输出“OK, booting the kernel”。
系统将解压后的内核放置在内存之中,并调用start_kernel()函数来启动一系列的初始化函数并初始化各种设备,完成Linux核心环境的建立。至此,Linux内核已经建立起来了,基于Linux的程序应该可以正常运行了。
启动第五步--用户层init依据inittab文件来设定运行等级
内核被加载后,第一个运行的程序便是/sbin/init,该文件会读取/etc/inittab文件,并依据此文件来进行初始化工作。
其实/etc/inittab文件最主要的作用就是设定Linux的运行等级,其设定形式是“:id:5:initdefault:”,这就表明Linux需要运行在等级5上。Linux的运行等级设定如下:
0:关机
1:单用户模式
2:无网络支持的多用户模式
3:有网络支持的多用户模式
4:保留,未使用
5:有网络支持有X-Window支持的多用户模式
6:重新引导系统,即重启
关于/etc/inittab文件的学问,其实还有很多,在后序文章中设计到的,卖个关子,敬请期待,呵呵
启动第六步--init进程执行rc.sysinit
在设定了运行等级后,Linux系统执行的第一个用户层文件就是/etc/rc.d/rc.sysinit脚本程序,它做的工作非常多,包括设定PATH、设定网络配置(/etc/sysconfig/network)、启动swap分区、设定/proc等等。如果你有兴趣,可以到/etc/rc.d中查看一下rc.sysinit文件,里面的脚本够你看几天的:P
启动第七步--启动内核模块
具体是依据/etc/modules.conf文件或/etc/modules.d目录下的文件来装载内核模块。
启动第八步--执行不同运行级别的脚本程序
根据运行级别的不同,系统会运行rc0.d到rc6.d中的相应的脚本程序,来完成相应的初始化工作和启动相应的服务。
启动第九步--执行/etc/rc.d/rc.local
你如果打开了此文件,里面有一句话,读过之后,你就会对此命令的作用一目了然:
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don’t
# want to do the full Sys V style init stuff.
rc.local就是在一切初始化工作后,Linux留给用户进行个性化的地方。你可以把你想设置和启动的东西放到这里。
启动第十步--执行/bin/login程序,进入登录状态
此时,系统已经进入到了等待用户输入username和password的时候了,你已经可以用自己的帐号登入系统了。:) 参考技术A 加电启动BIOS->转到Grub引导程序(此步找到内核vmlinuz和根文件系统映像initrd)->启动内核并加载根文件系统映像->初始化系统环境->启动init进程(完成启动)本回答被提问者采纳
Linux用户管理Linux系统的启动
Linux系统的启动
一.启动步骤和GRUB
1.Linux启动过程分析
(1)BIOS自检
l 硬件检测及初始化
l 引导启动设备
(2)引导启动设备
l 软盘(0磁道第一个扇区)
l 光盘(最外围存储轨道)
l 硬盘(MBR)
l USB存储设备
(3)调用Linux引导程序至内存中
l Linux的引导程序可以使用GRUB/LILO等引导软件
l GRUB/LILO可以安装在MBR/引导分区的引导扇区中
(4)运行Linux内核
l 内核放在/boot目录中,Linux系统可以同时支持多版本内核
l 解压缩内核
l 检测硬件
l 加载root文件系统
(5)执行init进程(按“i”单步运行)
l 启动新进程或关闭进程
l 选择启动模式
l 建立虚拟终端
(6)用户登录
l 输入用户名及口令
l 加载用户配置文件
l 加载shell程序
2.引导盘的创建
方法一:安装过程中创建
方法二:mkbootdisk
#mkbootdisk --device /dev/fd0 2.4.20-8
方法三:使用dd命令
# dd if=/boot/vmlinuz of=/dev/fd0
3.GRUB
(1)GRUB简介
GRUB是一种基于intel平台的功能强大的启动引导器
(2)GRUB特点
l 支持大硬盘,突破1024柱面的限制
l 支持两种界面(菜单,命令行)
l 开机画面
(3)安装GRUB
l 安装软件包
#rpm –ivh grub-0.934.i386.rpm
l 使用安装命令安装GRUB到MBR
#grub
grub>root (hdx,y)
grub>setup (hdx[,y])
(4)GRUB的配置
#vi /boot/grub/grub.conf
grub.conf中常用的配置命令有:
default=菜单项序号/saved
设置启动菜单的默认启动项
hiddenmenu
隐藏菜单界面
splashimage =图像文件全路径名
指定某文件作为启动菜单的背景图像
timeout=延迟秒数
设置启动菜单的启动延时
title 菜单项名称
开始一个菜单项的配置,设置菜单项的名称
root (hdx,y)
设置GRUB的根设备为linux内核所在的分区
kernel 内核文件名称
指定内核文件的名称及加载内核所需的参数
initrd initrd文件名
指定镜像文件的位置
map (hdx[,y]) (hdx[,y])
建立虚拟磁盘
rootnoverify (hdx,y)
指定windows启动引导器的位置
makeactive
标识指定分区为活动分区
chainloader +n/文件名称
调用指定windows启动文件
password 口令/--md5 口令密文
设置GRUB启动菜单和菜单项口令
lock
利用password设置的全局口令锁定菜单项
savedefault
保存当前启动菜单项为默认启动
文件实例:
# grub-md5-crypt(产生口令的MD5密文)
# vi /etc/grub.conf
default=0
timeout=50
splashimage=(hd0,0)/grub/splash.xpm.gz
password --md5 #!dfdasdf34123!#@$!#@
title RedHat Linux 9.0
root (hd0,2)
kernel /Vmlinuz-2.4.20-8 ro root=/LABEL=/
initrd /initrd-2.4.20-8.img
password linux
tile windows 2000
rootnoverify (hd0,0)
chainloader +1
lock
(5)GRUB的FAQ
l 编辑模式的使用
用于临时修改菜单的选项,在菜单界面中按E键进入
菜单主界面
编辑模式
l 命令行模式的使用
利用命令行命令设置GRUB,在菜单界面中按C键进入
命令模式
grub命令行中常用的命令有:
grub>root (hdx,y) //设置根设备所对应的分区
grub>kernel 内核文件 //设置内核文件的名称
grub>initrd 镜像文件名 //设置镜像文件名
grub>boot //启动指定操作系统
grub>rootnoveify (hdx,y) //设置根设备所对应的分区,但不检查加载点
grub>chainloader 文件名//加载指定的文件
grub>help //获取帮助
grub>reboot //重启系统
grub>md5-crypt //生成口令的MD5密文
grub>setup (hdx[,y]) //安装GURB到MBR/指定分区的引导扇区中
grub>hide 分区 //隐藏分区
grub>cat 文件名 //显示文件内容
grub>find 文件名 //查找文件
l 如果MBR中的GRUB引导程序被其它程序覆盖,应该如该恢复
1) 放入第一张安装启动盘,开始启动计算机:boot:linux rescue(启动linux的修复模式,加载硬盘上的LINUX系统到/mnt/sysimage)
2) #grub
grub>root (hdx,y)
grub>root (hdx)
l 恢复GRUB的配置文件
由于grub.conf设置的问题,可以采用以下方法进行恢复:
1) 放入第一张安装启动盘,开始启动计算机:boot:linux rescue(启动linux的修复模式)
2)#vi /mnt/sysimage/boot/grub/grub.conf
l 如何利用GRUB进入单用户模式,找回丢失的root用户口令
在GRUB菜单界面中按e编辑linux菜单项,给内核后面添加参数single
然后回车再按b进单用户模式、password root就可以了。
l 如何卸载GRUB
1)#rpm -e grub
2)C:\>fisk/mbr
二.init 进程
1. init进程的作用
init进程是系统启动第一个进程,它负责加载其它进程、管理系统的其它进程
2. 系统运行级别
运行级别 | 说明 |
0 | 关机 |
1 | 单用户模式 |
2 | 多用户模式、不支持NFS |
3 | 多用户模式 |
4 | 保留 |
5 | X-WINDOWS |
6 | 重启 |
可以使用init在各个运行级别中进行切换,init命令格式如下:
#init <0-6,a,s,q>
3. inittab文件的分析
/etc/inittab文件用于设置init进程在执行时加载哪些程序,inittab文件由若干个记录构成,每条记录格式如下:
ID:RUNLEVEL:ACTION:COMMAND
以下为默认inittab文件内容:
id:3:initdefault:
si::sysinit:/etc/rc.d/init.d/rc.sysinit
l0:0:wait:/etc/rc.d/rc0
l1:1:wait:/etc/rc.d/rc1
l2:2:wait:/etc/rc.d/rc2
l3:3:wait:/etc/rc.d/rc3
l4:4:wait:/etc/rc.d/rc4
l5:5:wait:/etc/rc.d/rc5
l6:6:wait:/etc/rc.d/rc6
ca ::ctrlaltdel:/sbin/shutdown -t3 -r now
pf::powerfail:/sbin/shutdown -f -h+2 “power failure;power shutting down”
pr:12345:powerokwait:/sbin/shutdown–c “power restored;shutdown cancelled”
1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6
x:5:respawn:/etc/X11/prefdm -nodaemon
说明:
(1)Action用于设置调用进程的方式
Respawn | 只要进程停止,该进和便重新启动 |
Wait | 进程运行一次,init等待到它停止 |
Once | 进程运行一次 |
Boot | 系统引导过程中,进程运行,忽略等级 |
Bootwait | 系统引导过程中,进程运行,init等待结束 |
Off | 无任何行动 |
Initdefault | 系统默认运行等级 |
Sysinit | 系统引导则运行,优先于boot或bootwait |
Powerwait | 电源故障后发送信号给init,等待进程终止 |
Ctrlaltdel | 当init收到SIGINT信号时,该进程运行 |
Powerokwait | UPS恢复则向init发送SIGINT信号 |
(2) 修改/etc/inittab文件,可以设置默认启动模式、各运行级别所加载的程序、CTRLALTDEL的动作、开设虚拟用户终端
4. /etc/rc.d 的目录内容
(1)/etc/rc.d/init.d目录
l 保存所有运行等级需要的所有脚本
l 启动、停止、重启某些服务
(2)/etc/rc.d/rc
l 系统改变运行等级,通过此脚本检查/etc/rc.d/rcX.d目录和文件可存在,以及是否正在运行等,以及运行/etc/rc.d/rcX.d中所有S开头的脚本
(3)/etc/rc.d/rcX.d目录
l 存放每一运行等级默认启动项,该目录中的文件链接到:/etc/rc.d/init.d
l 文件名格式为K{Two-digit number} {script name}/S{Two-digit number} {script name},K:以stop参数运行,S:以start参数运行;Two:数字代表执行顺序
(4)/etc/rc.d/rc.local
l 该脚本在2,3,5运行等级结束时执行
(5)/etc/rc.d/rc.sysinit
l 系统初始脚本,用于设置系统的时钟、加载键盘、加载系统字体、加载其他文件系统、激活交换分区、生成日志文件
三.用户登录
1.用户登录过程
2.用户登录命令
(1)su
功能:切换用户登录
格式:#su [参数] [-] [用户名]
参数:-c 命令 :运行指定的命令
-m :不重新设置环境变量
-s shell路径 :运行指定的shell
- :连同工作环境一起切换
实例:$su -
#su user1
$su -c /sbin/init 0 root
(2)exit
功能:退出用户环境(ctrl+d)
格式:#exit
(3)login
功能:登录系统
格式:#login [参数] [用户名]
参数:
-p:通知login保持现在的环境参数
-h:用来向远程登录的主机传输用户名
实例:#login
(4)logout
功能:退出用户环境、注消用户
实例:#logout
(5)sudo
功能:以其它用户执行指定的命令,默认是以root身份,只有/etc/sudoers文件中指定的用户有权执行
格式:#sudo [参数] 命令
参数:
-b 在后台执行指令
-H 将HOME环境变量设为新身份的HOME环境变量。
-k 结束密码的有效期限,也就是下次再执行sudo时便需要输入密码。
-l 列出目前用户可执行与无法执行的指令。
-p 改变询问密码的提示符号。
-s 执行指定的shell。
-u<用户> 以指定的用户作为新的身份。若不加上此参数,则预设以root作为新的身份。
-v 延长密码有效期限5分钟。
实例:#sudo /sbin/init 0
说明:/etc/sudoers文件格式为:user host=[all/nopasswd/run as 用户名] command lint;其中All代表所有文件,nopasswd代表执行文件时不需要要口令
(6)who
功能:显示登录用户信息
格式:#who [参数]
参数:-l 显示系统登录进程
-b 显示系统最后一次启动时间
实例:#who
#who -l
(7)w
功能:显示登录用户信息
格式:#w [用户]
实例:#w
(8)whoami
功能:显示当前终端登录的用户名称
实例:#whoami
(9)last
功能:显示最近的用户登录情况
格式:#last [参数]
参数:num 显示指定终端上的用户登录信息
-num 显示最近n次的用户登录信息
-i 显示登录主机的IP地址
实例:#last
#last 3
(10)wall
功能:向每个用户终端上的用户发送消息
格式:#wall [参数]
参数:-n 不显示消息来源
实例:#wall
#wall -n
(11)write
功能:向指定终端的用户发送消息
格式:#write 用户名 [终端]
实例:#write user1 tty1
注意:/etc/motd为公告板文件,用于记录所有公告信息;/etc/issue为欢迎信息文件
(12)help
功能:获取shell内置命令的帮助信息
格式:#help [内置命令名]
实例:#help
#help times
(13)man
功能:打开命令手册文件
格式:#man [命令名/文件名]
实例:#man su
本文出自 “Linux狱长” 博客,请务必保留此出处http://sswqzx.blog.51cto.com/2494644/1971537
以上是关于linux启动过程步骤的主要内容,如果未能解决你的问题,请参考以下文章