CentOS6 运行级别

测试环境:CentOS6.6 x86_64

偶然发现删除/etc/inittab文件后居然还能进入系统,我记得5系列的会弹出来一个对话选择运行级别。因此研究了一下。

#之前走了一点弯路,误以为控制是在/sbin/init 二进制程序里做的,下载了upstart源码包,结果没怎么看懂 -_-!

#后来发现控制过程在shell脚本里。

#不过也算有一点收获

src.rpm解压源码方法

rpm2cpio XXX.src.rpm  |cpio -ivmd

-i         提取

-v        显示详细信息

-m      不改变原文件更改时间

-d        如有需要,cpio会自行创建目录

另外,管道后面的命令如果不写 会显示乱码,别问我为什么知道

分割线—————————————————————————————————————————

RHEL5、RHEL6、RHEL7的init系统分别为sysvinit、upstart、systemd。

关于三者差别,请参考

http://www.ibm.com/developerworks/cn/linux/1407_liuming_init1/index.html

http://www.ibm.com/developerworks/cn/linux/1407_liuming_init2/index.html

http://www.ibm.com/developerworks/cn/linux/1407_liuming_init3/index.html

(这几篇文档用Ubuntu做的例子,细节处和RHEL可能有出入。)

CentOS为红帽的社区企业版,与RHEL差别相当小。    CentOS6.6 同样使用upstart
----------------------------------------------------------------------------------------------------------

# rpm -qf /sbin/init
upstart-0.6.5-13.el6_5.3.x86_64
=============================================================
upstart把sysvinit原本在/etc/inittab中的rc.sysinit, rc.d等配置拆分,放在/etc/init/下。/etc/inittab变为只负责控制运行级别。

系统内核加载完成后,开始执行第一个进程init。init会执行这样一个脚本:
/etc/init/rcS.conf

内容如下:

  8 start on startup
  9
 10 stop on runlevel
 11
 12 task
 13
 14 # Note: there can be no previous runlevel here, if we have one it‘s bad
 15 # information (we enter rc1 not rcS for maintenance).  Run /etc/rc.d/rc
 16 # without information so that it defaults to previous=N runlevel=S.
 17 console output
 18 pre-start script
 19         for t in $(cat /proc/cmdline); do
 20                 case $t in
 21                         emergency)
 22                                 start rcS-emergency
 23                                 break
 24                         ;;
 25                 esac
 26         done
 27 end script
 28 exec /etc/rc.d/rc.sysinit
 29 post-stop script
 30         if [ "$UPSTART_EVENTS" = "startup" ]; then
 31                 [ -f /etc/inittab ] && runlevel=$(/bin/awk -F ‘:‘ ‘$3 == "initdefault" && $1 !~ "^#" { print $2 }‘ /etc/inittab)
 32                 [ -z "$runlevel" ] && runlevel="3"
 33                 for t in $(cat /proc/cmdline); do
 34                         case $t in
 35                                 -s|single|S|s) runlevel="S" ;;
 36                                 [1-9])       runlevel="$t" ;;
 37                         esac
 38                 done
 39                 exec telinit $runlevel
 40         fi
 41 end script

和runlevel有关的是30-32行:
30         if [ "$UPSTART_EVENTS" = "startup" ]; then
31                 [ -f /etc/inittab ] && runlevel=$(/bin/awk
-F ‘:‘ ‘$3 == "initdefault" && $1 !~ "^#" { print $2 }‘ /etc/inittab)
32                 [ -z "$runlevel" ] && runlevel="3"
#----------------------------------------------------------------------------------------------------
30行:如果触发的 EVENT是“startup”就执行后面的内容。

31
行:/bin/awk -F ‘:‘ ‘$3 == "initdefault" && $1 !~ "^#" { print $2
}‘
/etc/inittab的意思是:以“:”作为字段分隔符,找出  /etc/inittab里面   第三个字段是initdefault,并且不是以“#”开
头的行(#开头一般为注释),然后提取出第二个字段。

连起来就是:如果存在/etc/inittab 这个文件,runlevel的值就取刚才提取的字符串。

32行:如果现在runlevel为空,就让runlevel取“3”。这个值可以改。不过最好还是3。

所以删掉inittab ,第32行后半段赋值语句生效,最后运行级别就是3。

时间: 2024-08-06 01:01:21

CentOS6 运行级别的相关文章

linux基础:4、linux运行级别、单用户模式、救援模式

linux运行级别 含义:指的是Unix或Linux等类Unix操作系统下不同的运行模式.运行级别通常分为7等,分别是从0到6 ================================================================================== [[email protected] ~]# tail /etc/inittab # Default runlevel. The runlevels used are: #   0 - halt (Do N

Linux开机启动流程及运行级别和常用组合键 == 第一次所学知识框架==

第一次写经验总结 望体谅 linux开机启动过程总结=简化版 1)  加载bios,获取cpu,内存,硬盘 2)  读取MBR,获取bootloader(grub) 3)  根据grub的内容加载内核 4)  内核执行/sbin/init,根据/etc/inittab完成初始化 5)  init执行 /etc/rc.d/rc.sysinit 6)  启动内核模块,根据/etc/modprobe.conf或/etc/modprobe.d/目录下的的文件来加载模块 7)  根据运行级别不同,init

centos7系统运行级别简介

centos7系统运行级别简介我们知道,centos6及之前的版本中,系统运行级别通过/etc/inittab文件进行设置和控制,但在centos7中,对这个文件的设置将不会对系统运行级别产生影响,这也是centos7中变化比较大的一部分特性.下面,我们就来介绍下系统运行级别方面的内容. 1. 运行级别对应关系 init level           systemctl target    0                      shutdown.target    1         

Centos修改默认运行级别

一.centos默认运行级别 # Default runlevel. The runlevels used 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

[开机启动]Linux开机自启和运行级别

嵌入式系统中程序自启动方法 在很多嵌入式系统中,由于可用资源较少,常常在系统启动后就直接让应用程序自动启动,以减少用户操作和节省资源.如何让自己的应用程序自动启动呢?    在Linux系统中,配置应用程序自动启动的方法有以下三种:1.通过/Linuxrc脚本直接启动Linux内核一旦开始执行,它将通过驱动程序来初始化所有硬件设备,这个初始化过程可以在启动时的PC显示器上看到,每个驱动程序都打印一些相关信息.初始化完成后,通常调用的是init,通过loader调用init内的init=/app_

CentOS7安装图形界面和修改运行级别

CentOS7系统如果用mini镜像安装或者服务器版本安装,默认是没有安装图形界面的.如果需要额外去安装图形界面,可以手动来安装CentOS Gnome GUI包.然后会总结一下,在CentOS7系统中的系统运行级别的设置以及如何切换. 命令行下安装 Gnome 包 yum?groupinstall?"GNOME?Desktop"?"Graphical?Administration?Tools" 更新系统的默认运行级别 如果你想在系统下次启动的时候自动进入图形界面,

linux运行级别

linux有7个运行级别 0-6 0:关机 1:单用户 2:不带NFS服务的三级别 3:命令行模式 4:保留的 5:图形化模式 6:重启 我们可以使用init+运行级别数字来进行各个模式的切换.如init 0代表关机在图形化界面,我们按init 3进入命令行模式.在命令行模式下,我们按init 5进入到图形化模式.

运行级别

ls -l /usr/lib/system/runlevel*target   (查看运行级别) Linux系统有7个运行级别(runlevel) 运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动 运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登陆 运行级别2:多用户状态(没有NFS) 运行级别3:完全的多用户状态(有NFS),登陆后进入控制台命令行模式 运行级别4:系统未使用,保留 运行级别5:X11控制台,登陆后进入图形GUI模式 运行级别6:系统正常

Linux7个运行级别

[[email protected]  ~ ]#  tail /etc/inittab #Default runlevel. The runlevels used are: #0 - halt (Do NOT set initdefault to this)----关机,不要设置默认的级别为0 #1 - Single user mode-------单用户模式 #2 - Multiuser, without NFS (The same as 3, if you do not have netwo