linux系统启动过程(linux启动顺序)
大家好,关于linux系统启动过程很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于linux启动顺序的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助!
linux启动的过程有哪些
总结一下,linux的开机整个流程。
· 1:启动电源后,主机第一步先做的就是查询BIOS(全称:basic input/output system基本输入输出系统)信息。了解整个系统的硬件状态,如CPU,内存,显卡,网卡等。嗯,这一步windows算和它是一家。不分彼此。
· 2:接下来,就是主机读取MBR(硬盘的第一个扇区)里的boot loader了。这个可是重点哦,据说troubleshooting里就会考这点,给个坏了的loader,叫你修正。windows不支持linux的分区格式。所以,用windows的boot。ini是查不到linux的系统的。一般我装系统都是先装windows再装linux,然后用grub来做boot loader。两个字:省心!因为linux不像windows那么小气。grub可是支持windows分区格式的哦。
· 3:接上一步,主机读取boot loader后,会读取里面的信息,知道谁跟谁是待在哪,假如主机想进入linux系统,读取到linux核心是在/boot文件目录中后,将此核心加载到内存中。开始了接下来的分析启动之旅。
· 4: OK,第一个运行程序是谁?就是/sbin/init程序。不信,就用top程序看下,是不是PID为1的就是这个东东,它,可是万物之祖啊,我简称它是女娲娘娘(不喜欢亚当夏娃)。
· 5: init首先查找启动等级(run-level)。因为启动等级不同,其运行脚本(也就是服务)会不同。默认的等级有以下几项:
0- halt(系统直接关机)
1- single user mode(单人模式,用于系统维护时使用)
2- Multi-user, without NFS(类似3模式,不过少了NFS服务)
3- Full multi-user mode(完整模式,不过,是文本模式)
4- unused(系统保留功能)
5- X11(与3模式类似,不过,是X终端显示)
6- reboot(重新开机)
(不要选择0或4,6否则,进步了系统的)
· 6: OK。系统知道自己的启动等级后,接下来,不是去启动服务,而是,先设置好主机运行环境。读取的文件是/etc/rc。d/rc。sysinit文件。那究竟要设置哪些环境呢?
·设置网络环境/etc/sysconfig/network,如主机名,网关,IP,DNS等。
·挂载/proc。此文件是个特殊文件,大小为0,因为它是在内存当中。里面东东最好别删。
·根据内核在开机时的结果/proc/sys/kernel/modprobe。开始进行周边设备的侦测。
·载入用户自定义的模块/etc/sysconfig/modules/*。modules
·读取/etc/sysctl。conf文件对内核进行设定。
·设定时间,终端字体,硬盘LVM或RAID功能,以fsck进行磁盘检测。
·将开机状况记录到/var/log/dmesg中。(可以用命令dmesg查看结果)
· 7: OK,接下来,就是启动系统服务了,不同的run-level会有不同的服务启动。到/etc/rc。d目录中,不同的level会有不同的目录。如启动3模式,会有个rc3。d目录,里面就保存着服务。其中,S(start)开头的表明开机启动,K(kill)开头的表明开机不启动。数字表示启动顺序。数字越小,启动越早。
注意,他们都是连接到etc/rc。d/init。d/目录中的相关文件。所以,想手工启动某一服务,可以用"/etc/rc。d/init。d/某个服务 start"启动哦。相反,我们也可以把某个服务ln(链接命令)到不同run-level的目录中。记得打上S或者K+数字哦。
· 8:读取服务后,主机会读取/etc/rc。d/rc。local文件。所以,如果需要什么开机启动的话,可以写个脚本或命令到这里面来。就不用像上面那么麻烦。以后删除也方便。
OK,经过一番长途跋涉后,系统终于可以安心的开启shell了。把控制权交到我们手上了。我们可以为所欲为了。最好,养成好习惯,平时不要用root用户登陆。上次我就一不小心错输了poweroff。那可是网关服务器啊。全公司人都上不了网啊。还好跟他们已经热乎了。只是狂K了我一顿而已。
linux操作系统的详细启动过程,谢谢(硬件启动的先后顺序)
当用户打开PC的电源,BIOS开机自检,按BIOS中设置的启动设备(通常是硬盘)启动,
接着启动设备上安装的引导程序lilo或grub开始引导Linux,Linux首先进行内核的引导,
接下来执行init程序,init程序调用了rc.sysinit和rc等程序,rc.sysinit和rc当完成系
统初始化和运行服务的任务后,返回init;init启动了mingetty后,打开了终端供用户登
录系统,用户登录成功后进入了Shell,这样就完成了从开机到登录的整个启动过程。
加载内核
LILO启动之后,如果你选择了Linux作为准备引导的操作系统,第一个被加载的东西就是内核。请记住此时的计算机内存中还不存在任何操作系统, PC(因为它们天然的设计缺陷)也还没有办法存取机器上全部的内存。因此,内核就必须完整地加载到可用RAM的第一个兆字节之内。为了实现这个目的,内核是被压缩了的。这个文件的头部包含着必要的代码,先设置CPU进入安全模式(以此解除内存限制),再对内核的剩余部分进行解压缩。
执行内核
内核在内存中解压缩之后,就可以开始运行了。此时的内核只知道它本身内建的各种功能,也就是说被编译为模块的内核部分还不能使用。最基本的是,内核必须有足够的代码设置自己的虚拟内存子系统和根文件系统(通常就是ext2文件系统)。一旦内核启动运行,对硬件的检测就会决定需要对哪些设备驱动程序进行初始化。从这里开始,内核就能够挂装根文件系统(这个过程类似于Windows识别并存取C盘的过程)。内核挂装了根文件系统之后,将启动并运行一个叫做 init的程序。
注意:在这里我们故意略去了Linux内核启动的许多细节,这些细节只有内核开发人员才感兴趣。如果你好奇的话,可以访问http://www.redhat.com:8080地址处的“Kernel Hackers Guide”。
init进程
init进程是非内核进程中第一个被启动运行的,因此它的进程编号PID的值总是1。init读它的配置文件/etc/inittab,决定需要启动的运行级别(Runlevel)。从根本上说,运行级别规定了整个系统的行为,每个级别(分别由0到6的整数表示)满足特定的目的。如果定义了 initdefault级别,这个值就直接被选中,否则需要由用户输入一个代表运行级别的数值。
输入代表运行级别的数字之后,init根据/etc/inittab文件中的定义执行一个命令脚本程序。缺省的运行级别取决于安装阶段对登录程序的选择:是使用基于文本的,还是使用基于X-Window的登录程序。
rc命令脚本程序
我们已经知道,当运行级别发生改变时,将由/etc/inittab文件定义需要运行哪一个命令脚本程序。这些命令脚本程序负责启动或者停止该运行级别特定的各种服务。由于需要管理的服务数量很多,因此需要使用rc命令脚本程序。其中,最主要的一个是/etc/rc.d/rc,它负责为每一个运行级别按照正确的顺序调用相应的命令脚本程序。我们可以想象,这样一个命令脚本程序很容易变得难以控制!为了防止这类事件的发生,需要使用精心设计的方案。
对每一个运行级别来说,在/etc/rc.d子目录中都有一个对应的下级目录。这些运行级别的下级子目录的命名方法是rcX.d,其中的X就是代表运行级别的数字。比如说,运行级别3的全部命令脚本程序都保存在/etc/rc.d/rc3.d子目录中。
在各个运行级别的子目录中,都建立有到/etc/rc.d/init.d子目录中命令脚本程序的符号链接,但是,这些符号链接并不使用命令脚本程序在/etc/rc.d/init.d子目录中原来的名字。如果命令脚本程序是用来启动一个服务的,其符号链接的名字就以字母S打头;如果命令脚本程序是用来关闭一个服务的,其符号链接的名字就以字母K打头。
许多情况下,这些命令脚本程序的执行顺序都很重要。如果没有先配置网络接口,就没有办法使用DNS服务解析主机名!为了安排它们的执行顺序,在字母S或者K的后面紧跟着一个两位数字,数值小的在数值大的前面执行。比如:/etc/rc.d/rc3.d/S50inet就会在/etc/rc.d/rc3.d/S55named之前执行(S50inet配置网络设置,S55named启动DNS服务器)。
存放在/etc/rc.d/init.d子目录中的、被符号链接上的命令脚本程序是真正的实干家,是它们完成了启动或者停止各种服务的操作过程。当/etc/rc.d/rc运行通过每个特定的运行级别子目录的时候,它会根据数字的顺序依次调用各个命令脚本程序执行。它先运行以字母K打头的命令脚本程序,然后再运行以字母S打头的命令脚本程序。对以字母K打头的命令脚本程序来说,会传递Stop参数;类似地对以字母S打头的命令脚本程序来说,会传递 Start参数。
编写自己的rc命令脚本
在维护Linux系统运转的日子里,肯定会遇到需要系统管理员对开机或者关机命令脚本进行修改的情况。有两种方法可以用来实现修改的目的:
●如果所做的修改只在引导开机的时候起作用,并且改动不大的话,可以考虑简单地编辑一下/etc/rc.d/rc.local脚本。这个命令脚本程序是在引导过程的最后一步被执行的。
●如果所做的修改比较细致,或者还要求关闭进程使之明确地停止运行,则需要在/etc/rc.d/init.d子目录中添加一个命令脚本程序。这个命令脚本程序必须可以接受Start和Stop参数并完成相应的操作。
第一种方法,编辑/etc/rc.d/rc.local脚本,当然是两种方法中比较简单的。如果想在这个命令脚本程序中添加内容,只需要使用喜欢的编辑器程序打开它,再把打算执行的命令附加到文件的末尾就可以了。这对一两行的修改来说的确很便利。
如果确实需要使用一个命令脚本程序,这时必须选择第二个方法。编写一个rc命令脚本程序的过程并不像想象中那么困难。我们下面就给出一个例子,看看它是怎样实现的(顺便说一句,你可以把我们的例子当作范本,按照自己的需要进行修改和添加)。
假设你打算每隔60分钟调用一个特殊的程序来弹出一条消息,提醒自己需要从键盘前面离开休息一会儿,命令脚本程序将包括下面几个部分:
●关于这个命令脚本程序功能的说明(这样就不会在一年之后忘记它);
●在试图运行它之前验证这个命令脚本程序确实存在;
●接受start和stop参数并执行要求的动作。
参数给定后,我们就可以编写命令的脚本程序。这个程序很简单,大家可以自己编写一下,我在这里就不给出了。
编写好新的命令脚本程序之后,再从相关的运行级别子目录中加上必要的符号链接,来控制这个命令脚本程序的启动或者停止。在我的印象中,只想让它在运行级别3或者运行级别5中启动,原因是我认为只有这两个运行级别才是日常工作的地方。最后,希望这个命令脚本程序在进入运行级别6(重启动)的时候被关闭。
激活或者禁止服务项目
有的时候会发现,在引导的时候并不需要某个特定的服务被启动。如果你正在考虑使用Linux替换Windows NT的文件和打印服务器,就更是如此。
我们已经知道,在特定的运行级别子目录中给符号链接改个名称,就可以让该服务不被启动,如把其名称的第一个字母由S改为K。一旦熟练掌握了命令行和符号链接,就会发现这是激活或者禁止服务的最快办法。
在学习这个改名方法的时候,可能会觉得图形化的操作界面ksysv比较容易掌握。虽然它原来是设计使用在KDE环境里的,但在 Red Hat Linux 7.2下缺省安装的GNOME环境里也运行得很好。如果想启动它,只需简单地打开一个xterm窗口,并输入ksysv命令就可以了。屏幕上会出现一个窗口,其中列出了能够修改的全部参数,需要时还包括在线帮助。
警告:如果是在一个现实中的系统上学习本文的知识,要多多运用常识。当试着对启动脚本程序进行修改的时候,要记住所做的修改可能会造成你的系统不能正常工作,而且无法采用重启动的方法恢复。不要在正常运转的系统上实验新的设置,对你准备修改的文件要全部进行备份。最重要的是,在手边要准备一张引导盘以防不测
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.Schedule 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中包含的所有脚本,这些脚本表示系统初始化时要启动的程序。一般来说,
这些脚本不需要编辑或改变,是系统缺省的。