怎样启动linux
Ⅰ Linux镎崭綔绯荤粺镄勫惎锷ㄦラよ︾粏璇存槑
1銆佽诲彇MBR镄勪俊鎭锛屽惎锷˙oot Manager
Windows浣跨敤NTLDR浣滀负Boot Manager锛屽傛灉鎭ㄧ殑绯荤粺涓瀹夎呭氢釜鐗堟湰镄刉indows锛屾偍灏遍渶瑕佸湪NTLDR涓阃夋嫨鎭ㄨ佽繘鍏ョ殑绯荤粺銆
Linux阃氩父浣跨敤锷熻兘寮哄ぇ锛岄厤缃𨱔垫椿镄凣RUB浣滀负Boot Manager锛屾垜浠灏嗗湪钖锷ㄧ$悊绔犺妭涓钖戞偍浠嬬粛瀹幂殑浣跨敤鏂瑰纺銆
2銆佸姞杞界郴缁熷唴镙革纴钖锷╥nit杩涚▼
init杩涚▼鏄疞inux镄勬牴杩涚▼锛屾墍链夌殑绯荤粺杩涚▼閮芥槸瀹幂殑瀛愯繘绋嬨
3銆乮nit杩涚▼璇诲彇钬/etc/inittab钬濇枃浠朵腑镄勪俊鎭锛屽苟杩涘叆棰勮剧殑杩愯岀骇鍒锛屾寜椤哄簭杩愯岃ヨ繍琛岀骇鍒瀵瑰簲鏂囦欢澶逛笅镄勮剼链銆傝剼链阃氩父浠モ渟tart钬濆弬鏁板惎锷锛屽苟鎸囧悜涓涓绯荤粺涓镄勭▼搴忋
阃氩父𨱍呭喌涓嬶纴钬/etc/rcS.d/钬濈洰褰曚笅镄勫惎锷ㄨ剼链棣栧厛琚镓ц岋纴铹跺悗鏄钬/etc/rcN.d/钬濈洰褰曘备緥濡傛偍璁惧畾镄勮繍琛岀骇鍒涓3,闾d箞瀹冨瑰簲镄勫惎锷ㄧ洰褰曚负钬/etc/rc3.d/钬濄
4銆佹牴鎹钬/etc/rcS.d/钬濇枃浠跺す涓瀵瑰簲镄勮剼链钖锷╔window链嶅姟鍣ㄢ渪org钬
Xwindow涓篖inux涓嬬殑锲惧舰鐢ㄦ埛鐣岄溃绯荤粺銆
5銆佸惎锷ㄧ橱褰旷$悊鍣锛岀瓑寰呯敤鎴风橱褰
Ubuntu绯荤粺榛樿や娇鐢℅DM浣滀负锏诲綍绠$悊鍣锛屾偍鍦ㄧ橱褰旷$悊鍣ㄧ晫闱涓杈揿叆鐢ㄦ埛钖嶅拰瀵嗙爜钖庯纴渚垮彲浠ョ橱褰旷郴缁熴 (鎭ㄥ彲浠ュ湪钬/etc/rc3.d/钬濇枃浠跺す涓镓惧埌涓涓钖崭负钬沦13gdm钬濈殑阈炬帴)
濡傛灉𨱍砋buntu鍦ㄦ疮娆″惎锷ㄥ埌command prompt 锛屽彲浠ヨ緭鍏ヤ互涓嬫寚浠:
$echo 钬渇alse钬 | sudo tee /etc/X11/default-display-manager
褰扑笅娆″紑链烘椂锛屽氨浼氢互鎸囦护妯″纺钖锷锛屽傛灉𨱍冲彉锲炲惎锷▁ window锛屽彲浠ヨ緭鍏:
$echo 钬/usr/bin/gdm钬 | sudo tee /etc/X11/default-display-manager
Ⅱ 解析Linux系统启动的引导流程
LINUX是自由开源软件,在LINUX里一切都是文件,不管是命令,操作等等都是以文件形式保存,这篇博客来记录LINUX启动时的引导流程是通过哪写文件来完成的.
使用的LINUX版本是CentOS5,CentOS和Ubuntu都是自己联系使用时的较理想版本.
下面以CentOS5.5版本为例,介绍LINUX的引导流程,具体流程如下:
下面详细介绍每一步:
1)第一步firmware固件自检,主要是进行CMOS/BIOS对硬件进行POST加电自检,在物理层次上对硬件进行检测是否正常。例如检查硬盘是否插好等。
2)第二步读取硬盘中MBR的BootLoader,自启动程序,Linux下常用的自启动程序是GRUB。这一步主要的功能是载入内核。内核存放在/boot目录下
3)第三步就是载入的内核Kernel的过程,
主要功能是:1、驱动硬件,Kernel中含有大量驱动程序。2、启动init进程。
4)init进程,主要是读取/etc/inittab文件,执行缺省运行级别,从而继续引导。需要注意的是init京城的PID恒为1,是所有进程的父进程,而init进程的负景程是0,为内核调度器Kernel scheler。
5)/etc/inittab 定义了初始化的操作。
命令主要格式是:id: runlevels : action : process
其中,如上图红框中所示
1、run-levels运行级别有7个,0—6分别如下:
0 —— halt 关机
1 —— Single user mode 单用户模式
2 —— Multiuser,withoutNFS 多用户模式但不带网络(text模式)
3 —— Full multiuser mode 完整功能的多用户模式(text模式)
4 —— unused 预留
5 —— X11 图形化多用户模式
6 —— reboot 重启
可以根据这7个运行级别来进行切换
命令为:查看当前运行级别 #runlevel、 切换运行级别 #init[0 |1 |2 |3 |4 |5 |6]
2、而acion中也有几个比较重要的取值:
1 initdefault:指定系统缺省启动的运行级别,如上图中标出,通常用于修复,比如我们要进入单用户模式,则可以将其设置为1,不可将默认设置为0或6,否则无法启动.
2sysinit:系统启动执行process中指定的命令
由inittab文件内容可以看出,没有设置运行级别,即为无论是哪个运行级别,都会执行/etc/rc.d/rc.sysinit
6)initdefault,如第五步所说到的,主要是读取/etc/inittab中的信息,判断缺省的运行级别是什么。
7)/etc/rc.d/rc.sysinit
在inittab文件中运行到第21行,变是启动这个脚本。完成系统服务程序的启动,如系统环境变量的设置、设置系统时钟、加载字体、检查加载文件系统、生成系统启动信息日志文件等。由于是基础服务,因为其run-level设置为空::即任何级别,action设置为sysinit。即该脚本在任何运行级别下都要启动,以完成基础服务的启动
8)基础服务启动后,会执行/etc/rc.d/rc这个脚本
加载完基础服务后,就要根据不同的运行级别去启动相对应的下的目录,它的工作原理是先去判断系统的默认运行级别即第6步中的东西,然后再执行相应的rcN.d目录下的服务启动脚本如图
9)执行/etc/rc.d/rcN.d目录下的服务启动脚本
看下该目录下的内容:
其中S表示要启动的脚本,K表示要关闭的脚本
数字表示启动顺序,数值小的优先.主要是对一些服务的管理
在这一步里,需要说明一下/etc/rc.d/init.d这个目录,这个目录里放的脚本是真正的脚本,而rcN.d里放置的都是init.d目录里的软连接,也就是说所有rcN.d里的文件最终都需要来init.d里找真正的脚本
看一下具体细节:
执行到这一步,界面就会提示输入用户名和密码了,也就是说系统已经起来了,输入用户名和密码的过程后面再说,这次的引导流程就结束了
最后需要说明的是,LINUX的引导流程的思想大致相同,但细节因为版本的问题,在配置文件的名字或者是位置都不尽相同,此次我用的是CentOS版本,而Ubuntu版本是没有inittab文件和grup.conf文件的,所以如果有兴趣,大家可以按照这种思路去探索探索.
PS:关于GRUB
GNU GRUB(简称“GRUB”)是一个来自GNU项目的启动引导程序。GRUB是多启动规范的实现,它允许用户可以在计算机内同时拥有多个操作系统,并在计算机启动时选择希望运行的操作系统。GRUB可用于选择操作系统分区上的不同内核,也可用于向这些内核传递启动参数。
GNU GRUB的前身为Grand Unified Bootloader。它主要用于类Unix系统;同大多Linux发行版一样,GNU系统也采用GNU GRUB作为它的启动器。Solaris从10 1/06版开始在x86系统上也采用GNU GRUB作为启动器。
GRUB可动态配置;它在启动时加载配置信息,并允许在启动时修改,如选择不同的内核和initrd。为此目的,GRUB提供了一个简单的类似Bash的命令行界面,它允许用户编写新的启动顺序。
GRUB非常轻便。它支持多种可执行格式;它除了可适用于支持多启动的操作系统外,还通过链式启动功能支持诸如Windows和OS/2之类的不支持多启动的操作系统。GRUB支持所有的Unix文件系统,也支持Windows适用的FAT和NTFS文件系统,还支持LBA模式。GRUB允许用户查看它支持的文件系统里文件的内容。
GRUB具有多种用户界面。多数Linux发行版利用GRUB对图形界面的支持,提供了定制的带有背景图案的启动菜单,有时也支持鼠标。通过对GRUB的文字界面的设定,可以通过串口实现远程终端启动。
GRUB可以从网络上下载操作系统镜像,因此可以支持无盘系统。GRUB支持在启动操作系统前解压它的镜像。
与其它启动器不同,GRUB可以通过GRUB提示符直接与用户进行交互。载入操作系统前,在GRUB文本模式屏幕下键入c键可以进入GRUB命令行。在没有作业系统或者有作业系统而没有"menu.lst"文件的系统上,同样可以进入GRUB提示符。通过类似bash的命令,GRUB提示符允许用户手工启动任何操作系统。把合适的命令记录在"menu.lst"文件里,可以自动启动一个操作系统。
GRUB拥有丰富的终端命令,在命令行下使用这些命令,用户可以查看硬盘分区的细节,修改分区设置,临时重新映射磁盘顺序,从任何用户定义的配置文件启动,以及查看GRUB所支持的文件系统上的其它启动器的配置。因此,即便不知道一台电脑上安装了什么,也可以从外部设备启动一个操作系统。
GRUB采用滚动屏幕选择想要启动的操作系统。通过向"menu.lst"文件中添加相关信息,GRUB可以控制150或者更多的启动选项,在启动时用方向键进行选择。
通过链式启动,一个启动器可以启动另一个启动器。GRUB通过2到3行的命令就可以从DOS、Windows、Linux、BSD和Solaris系统启动。
尽管GRUB为类Unix系统进行了编译和打包,但也有供DOS和Windows使用的GRUB。GRUB也可以不附带任何操作系统而作为孤立系统安装。从CD上启动时运用GRUB需要1个文件,而从软盘、硬盘和USB设备上启动时需要2个文件。这些文件可以在任何支持GRUB的Linux CD上找到,用户可以很容易的找到它们。
Ⅲ LINUX操作系统的启动过程
一、启动内核
首先介绍启动内核部分。电脑启动时,BIOS装载MBR,然后从当前活动分区启动,LILO获得引
导过程的控制权后,会显示LILO提示符。此时如果用户不进行任何操作,LILO将在等待制定
时间后自动引导默认的操作系统,而如果在此期间按下TAB键,则可以看到一个可引导的操作
系统列表,选择相应的操作系统名称就能进入相应的操作系统。
当用户选择启动LINUX操作系统时,LILO就会根据事先设置好的信息从ROOT文件系统所在的分
区读取LINUX映象,然后装入内核映象并将控制权交给LINUX内核。LINUX内核获得控制权后,
以如下步骤继续引导系统:
1. LINUX内核一般是压缩保存的,因此,它首先要进行自身的解压缩。内核映象前面的一些
代码完成解压缩。
2. 如果系统中安装有可支持特殊文本模式的、且LINUX可识别的SVGA卡,LINUX会提示用户
选择适当的文本显示模式。但如果在内核的编译过程中预先设置了文本模式,则不会提示选
择显示模式。该显示模式可通过LILO或RDEV工具程序设置。
3. 内核接下来检测其他的硬件设备,例如硬盘、软盘和网卡等,并对相应的设备驱动程序
进行配置。这时,显示器上出现内核运行输出的一些硬件信息。
4. 接下来,内核装载ROOT文件系统。ROOT文件系统的位置可在编译内核时指定,也可通过
LILO或RDEV指定。文件系统的类型可自动检测。如果由于某些原因装载失败,则内核启动
失败,最终会终止系统。
二、执行init程序
其次介绍init程序,利用init程序可以方便地定制启动其间装入哪些程序。init的任务是
启动新进程和退出时重新启动其它进程。例如,在大多数Linux系统中,启动时最初装入
六个虚拟的控制台进程,退出控制台窗口时,进程死亡,然后init启动新的虚拟登录控制台,
因而总是提供六个虚拟登陆控控制台进程。
控制init程序操作的规则存放在文件/etc/inittab中。Red Hat Linux缺省的inittab文
件如下:
#
#inittab This file describes how the INIT process should set up the system in a certain
#run-level.
#
#
#Default runlevel.The runlevels used by RHS 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)
#
id:3:initdefault:
#system initialization
si::sysinit:/etc/rc.d/rc.sysinit
10:0:wait:/etc/rc.d/rc 0
11:1:wait:/etc/rc.d/rc 1
12:2:wait:/etc/rc.d/rc 2
13:3:wait:/etc/rc.d/rc 3
14:4:wait:/etc/rc.d/rc 4
15:5:wait:/etc/rc.d/rc 5
16:6:wait:/etc/rc.d/rc 6
#Things to run in every runlevel
ud:once:/sbin/update
#Trap CTRL-ALT-DELETE
ca::ctrlaltdel:/sbin/shutdown -t3 -r now
#When our UPS tells us power has failed,assume we have a few minutes of
power left.Schele a
#shutdown for 2 minutes from now.
#This does,of course,assume you have powered installed and your UPS
connected and working
#correctly.
pf::powerfail:/sbin/shutdown -f -h +2 "Power Restored;Shutdown Cancelled"
#Run gettys in standard runlevels
1:12345:respawn:/sbin/minggetty tty1
2:2345:respawn:/sbin/minggetty tty2
3:2345:respawn:/sbin/minggetty tty3
4:2345:respawn:/sbin/minggetty tty4
5:2345:respawn:/sbin/minggetty tty5
6:2345:respawn:/sbin/minggetty tty6
#Run xdm in runlevel 5
x:5:respawn:/usr/bin/X11/xdm -nodaemon
Linux有个运行级系统,运行级是表示系统当前状态和init应运行哪个进程并保持在这种
系统状态中运行的数字。在inittab文件中,第一个项目指定启动时装入的缺省运行级。
上例中是个多用户控制台方式,运行级为3。然后,inittab文件中每个项目指定第二个
字段的项目用哪种运行级(每个字段用冒号分开)。因此,对运行级3,下列行是相关的:
13:3:wait:/etc/rc.d/rc 3
1:12345:respawn:/sbin/minggetty tty1
2:2345:respawn:/sbin/minggetty tty2
3:2345:respawn:/sbin/minggetty tty3
4:2345:respawn:/sbin/minggetty tty4
5:2345:respawn:/sbin/minggetty tty5
6:2345:respawn:/sbin/minggetty tty6
最后六行建立Linux提供的六个虚拟控制台。第一行运行启动脚本/etc/rc.d/ rc 3;
这将运行目录/etc/
rc.d/rc3.d中包含的所有脚本,这些脚本表示系统初始化时要启动的程序。一般来说,
这些脚本不需要编辑或改变,是系统缺省的。