Linux系统运行级与启动机制剖析

原文作者:技术成就梦想

原文链接:http://ixdba.blog.51cto.com/2895551/533740

一 系统运行级
windows系统有安全运行模式和正常运行模式,这是两个不同的运行级,同样,linux也有系统运行级别,并且linux系统的运行级别更加灵活,更加多样化。
在讲述运行级别前,先讲述下linux下的init程序,因为init程序直接和系统运行级别相关联, init程序是linux操作系统最主要的程序之一,是一个由系统内核启动的用户级进程,同时init进程也是所有其它系统进程的鼻祖,也就是说init 进程是系统运行的第一个进程,它的进程号始终为1。
linux系统有7个运行级别,这些运行级别均在/etc/inittab文件中指定,下面讲述/etc/inittab文件的具体实现。
以redhat linux为例,下面是/etc/inittab的某段信息。
# 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)
上面这段信息列出了linux系统的7个运行等级:
0-关机模式,
1-单用户模式,单用户只有系统管理员可以登录。
2-多用户模式,但是不支持文件共享,例如不支持NFS服务.这种模式不常用。
3-完全的多用户模式,支持NFS服务.最常用的用户模式,默认登录到系统的字符界面。
4-基本不用的用户模式,可以实现某些特定的登录请求。
5-完全多用户模式,默认登录到X-window系统,也就是登录到linux图形界面。
6-重启模式,也就是执行关闭所有运行的进程,然后重新启动系统。
这些运行级别和linux中的init程序相互对应,例如执行init 1系统就进入单用户模式,执行init 6系统将重新启动。

二  系统启动过程
1.内核引导
 打开系统电源,开始BIOS自检,系统按照BIOS里的设置启动设备(一般是硬盘启动), 接着进入linux引导程序,一般Linux系统提供两种引导方式: GRUB和LOLO,其中GRUB是大多数Linux系统的默认引导方式,而LILO则是根据一些特殊需求或个人喜好而准备的,一旦linux引导程序载 入内存,它显示一个图形界面给用户,这个界面里包含了不同的内核选项,用户可以通过上下键去选择不同的内核引导,当引导程序成功完成引导后,linux接 管了对CPU的控制权,接着CPU开始执行linux内核映像程序,加载内核, 在预定的地方找到initrd镜像的压缩包,对它进行解压和挂载,并载入所有必须的驱动, 然后,Kernel会创建root设备,以只读方式挂载root分区,并释放所有没有被使用的内存,此时,Kernel已经被装载到内存里运行起来了。但 是,因为没有用户应用程序允许输入有意义的指令给系统,所以此时的系统不能做任何事情。
2.运行init
init进程是系统所有进程的起点, 紧接上面,Linux在完成核内引导以后,就开始运行init程序,init程序需要读取配置文件/etc/inittab,而inittab是一个不可执行的文本文件,关于这个文件,我们将在”系统运行级”一节详细讲述。
3.系统初始化
init程序启动后首先调用rc.sysinit和rc程序, rc.sysinit主要完成一些系统初始化的工作,它是系统每一个运行级别都要首先运行的重要脚本。它主要完成的工作有:检查磁盘,加载硬件模块, 激活交换分区,以及其它一些需要优先执行任务,当rc.sysinit程序执行完毕,引导返回到init程序。
4.启动运行级的守护进程
rc.sysinit程序执行完毕,接下来,rc程序启动, rc程序主要启动系统对应运行级别的守护进程, rc程序执行完毕,又将返回init程序继续下一步。
5.建立终端
此时系统基本环境已经设置好了,init程序接着会打开6个终端,以便用户登录。
6.登录系统
当我们看到mingetty的登录界面时,我们就可以输入用户名和密码登录系统了。Linux的账号验证程序是login,当login程序执行成功后,最后就进入了shell终端。
这样linux系统就完成了从开机到启动的整个过程。

三  系统关机过程
在了解linux关机过程之前,我们先学习一下linux关机的一些常用命令,最常用的linux关机命令有如下几个:init ,shutdown, halt,reboot等,这些命令都可以达到关机重启的目的,但是每个命令的内部工作过程是不同的。我们通过对关机命令的讲述,详细了解linux安全 关机的过程。
1.shutdown命令
使用shutdown命令可以安全的关闭linux系统,有些linux初学者会使用直接关闭电源的方法来关闭linux,这是十分危险的,因为 linux与windows不同,在linux后台运行着很多进程,这些进程控制着linux对系统的各种操作,如果强制关机,可能会造成进程的混乱以至 丢失数据,如果在系统工作负荷很高的情况下,突然断电,不但会丢失数据,甚至会损坏硬件设备。
shutdown命令是用shell编写的程序,必须由超级用户才能执行,shutdown命令执行后,会以广播的形式通知正在系统中工作的所有用户,系 统将在指定的时间内关闭,请保存文件,停止作业,注销用户;此时login指令被冻结,新的用户不能登录;当所有的用户从系统中注销或者指定时间已到 时,shutdown就发送信号给init程序,要求init程序改变系统运行级别,接着,init程序根据shutdown指令传递过来的参数,相应的 改变运行级,例如,shutdown指定的参数是关机命令的话,init程序就执行init 0进行关机,如果shutdown指定的参数是要重启系统,那么init程序就执行init 6进行系统重启。
? shutdown命令的详细语法:
shutdown [-fFhknrc(参数名称)] [-t 秒数] 时间 [警告信息]
具体各参数功能:
-f 重新启动时不执行fsck(注:fsck是Linux下的一个检查和修复文件系统的程序,我们会在以后章节详细讲述)。
-F 重新启动时执行fsck。
-h 将系统关机,在某种程度上功能与halt命令相当。
-k 只是送出信息给所有用户,但并不会真正关机。
-n 不调用init程序关机,而是由shutdown自己进行(一般关机程序是由shutdown调用init来实现关机动作),使用此参数将加快关机速度,但是不建议用户使用此种关机方式。
-r shutdown之后重新启动系统。
-c 取消前一个shutdown命令。例如,当执行一个如“shutdown -h 15:30”的命令时,只要按“Ctrl+C”键就可以中断关机的命令。而执行如“shutdown -h 15:30 & ” 的 命 令 就将 shutdown转到后台运行了,此时,就需要使用shutdown -c将前一个shutdown命令取消。
-t<秒数> 送出警告信息和关机信号之间要延迟多少秒。警告信息将提醒用户保存当前进行的工作。
[时间] 设置多久时间后执行shutdown命令。时间参数有hh:mm或+m两种模式。
hh:mm格式表示在几点几分执行shutdown命令。例如 “shutdown 16:50”表示将在16:50执行shutdown, +m表示m分钟后执行shutdown, 比较特别的用法是以now表示立即执行shutdown, 值得注意的是这部分参数不能省略。
[警告信息] 要传送给所有登入用户的信息。
? 应用举例:
立即关机重启:shutdown –r now
立即关机:shutdown –h now
设定5分钟后关机,同时发出警告信息给登录的linux用户:
shutdown +5  “System will shutdown after 5 minutes”
2.halt命令
halt是最简单的关机命令,相当于shutdown –h组合,halt执行时,kill掉多有应用程序,然后调用系统指令sync,sync将所有内存信息通过文件系统写入硬盘,然后停止内核。
halt命令的部分参数如下: 
[-f] 没有调用shutdown而强制关机或重启。
[-i] 关机或重新启动之前,关掉所有的网络接口。 
[-p] 关机时调用poweroff,此选项为缺省选项。
3.reboot命令
reboot命令的执行过程与halt基本类似,不同的是halt是用于关机,而reboot是关机后引发系统重启。
4.init命令
init进程是所有进程的鼻祖,其进程号始终为1,init程序主要用于系统不同运行级之间的切换,切换的工作是立即完成的,例如init 0就是将系统运行级切换到0,也就是关机,init 6命令用于将系统运行级别切换到6,也就是重启系统。

时间: 2024-08-04 10:11:36

Linux系统运行级与启动机制剖析的相关文章

Linux学习笔记(三):系统运行级与运行级的切换

1.Linux系统与其他的操作系统不同,它设有运行级别.该运行级指定操作系统所处的状态.Linux系统在任何时候都运行于某个运行级上,且在不同的运行级上运行的程序和服务都不同,所要完成的工作和所要达到的目的也都不同. 2.Linux(Red Hat 9.0)设置了7个不同的运行级,系统可以在这些运行级别之间进行切换以完成不同的工作. 3.接下来简单介绍7个系统运行级: (1).运行级0:关闭计算机. (2).运行级1:单用户模式. (3).运行级2:多用户模式(不带网络文件系统NFS支持功能).

linux系统运行级别改变时,系统所做的工作

# 其实计算机的关闭也就是运行级别的切换: # init进程监控运行级别是否改变. # 如果运行级别改变了,init进程就会触发 /etc/rc.d/rc 脚本运行. # rc 脚本作用是: #    1.如果当前计算机运行有,在当前运行级别 #   (correctrunlevel )/etc/rc.d/rc$runlevel.d/目录下以K开头的服务.就关闭. #     2.开启当前运行级别(correct runlevel )/etc/rc.d/rc$runlevel.d/目录下#   

linux系统中创建windows启动盘

平时工作中用到linux的操作命令较多,因此为了方便,就给电脑装了双系统,一般工作的时候,都选择进入linux系统.但是今天有件工作之外的事情需要解决下:创建一个windows启动盘.如果按照往常来说,我会启动windows,然后用xxx工作制作u盘启动工具,傻瓜式的创建启动盘.但是今天不想再重启系统进入windows做u盘的启动盘了.想在想在linux系统中做u盘启动盘. 之前也接触到在linux中做u盘启动盘的一些博客或其他信息,全部是说用dd命令就可以搞定,之前也试过,dd命令刻录wind

Linux 系统运行级别(SysVinit 系统)

个人博客首页(点击查看详情) -- https://blog.51cto.com/11495268个人微信公众号(点击查看详情) -- https://blog.51cto.com/11495268/2401194     1.简介     systemctl 基础操作 学习中,接触 系统运行级别 之间的 切换,本文 描述 SysVinit 系统运行级别 基本概念 # lsb_release -a No LSB modules are available. Distributor ID: Ubu

Linux系统运行级别

Linux系统有7个不同的运行级别,由0-6,分别具有不同的功能. ◇0:停机,关闭系统. ◇1:单用户模式,类似于Windows下的安全模式. ◇2:多用户模式,但是没有开启NFS. ◇3:完整的多用户模式,Linux运行于命令行模式下(即没有启动图形用户环境). ◇4:该级别一般不会使用. ◇5:就是X11,Linux运行于图形模式下. ◇6:重启计算机. Linux系统启动后会运行在其中某个级别上,一般标准的运行级别为3或5,如果是3,系统就运行在命令行模式下的用户状态:如果是5,则运行图

Linux系统之TroubleShooting(启动故障排除)

尽管Linux系统非常强大,稳定,但是我们在使用过程当中,如果人为操作不当,仍然会影响系统,甚至可能使得系统无法开机,无法运行服务等等各种问题.那么这篇博文就总结一下一些常见的故障排除方法,但是不可能面面俱到,只能不断的补充,更新. 一.管理员忘记密码 (1).重启计算机,进入单用户模式 1 2 3 4 5 [[email protected] grub]# reboot Broadcast message from root (pts/2) (Wed Dec  2 18:45:32 2015)

Linux系统开机引导和启动过程-img文件

操作系统的启动分为两个阶段: 引导boot 启动startup 引导阶段开始于打开电源开关,结束于内核初始化完成和 systemd 进程成功运行.启动阶段接管了剩余工作,直到操作系统进入可操作状态. 总体来说,Linux 的开机引导和启动过程是相当容易理解,下文将分节对于不同步骤进行详细说明. BIOS 上电自检(POST) 引导装载程序 (GRUB2) 内核初始化 启动 systemd,其是所有进程之父. 注意,本文以 GRUB2 和 systemd 为载体讲述操作系统的开机引导和启动过程,是

Linux系统运行Java项目

写个今天学习的总结吧,留个记录方便查阅 - 2016-8-17 17:51:03 工具是eclipse,目的是在Linux系统中运行Java的main方法 网上学习了下,有两种方法来实现: 一.导成jar包运行:(test.jar) 1.在eclipse中,右键选择export->jar File ->next下去要注意3点: 1).第三方依赖包不要导出到jar包中,取消勾选 2).是选择你要导出的路径和jar包文件名 3).记得要选则Main class ->finish 2.接着打开

Linux系统在线安装、启动 redis

环境: Linux系统:VMware 14 中 CentOS 7 64 位 redis版本:redis-stable.tar.gz(当前版本是:redis-cli 4.0.9) 一.Linux在线安装redis1.因为redis是c语言开发的,所以需要安装gcc(在根目录下执行): yum install gcc-c++2.因为是在线安装,需要使用wget命令,如果linux中没有,就用如下命令安装(在根目录下执行): yum -y install wget3.下载redis最新的稳定版本,也可