1.init初探

init是Linux系统操作中不可缺少的程序之一。init进程,它是一个由内核启动的用户级进程,然后由它来启动后面的任务,包括多用户环境,网络等。

内核会在过去曾使用过init的几个地方查找它,它的正确位置(对Linux系统来说)是/sbin/init。如果内核找不到init,它就会试着运行/bin/sh,如果运行失败,系统的启动也会失败。

根据实际看一下,我们来到/boot下,

可以看见,Grub就在这里,vmlinuz-2.6.32-358.el6.i686这个文件很重要,说通俗一点的话应该是我们的内核,在启动后加载所有驱动(这个有另外的章节再讲,这里不详述)。另外initramfs-2.6.32-358.el6.i686.img是启动init进程的一个镜像文件,包含一个最小的linux系统。

Linux内核在初始化之后会执行init进程,而init进程会挂载我们的根文件系统,但由于init程序也是在根文件系统上的,所以这就有了悖论。Linux采用两步走的方法来解决这个问题。Linux2.6版以前的方法是:除了内核vmlinuz之外还有一个独立的initrd.img映像文件,其实它就是一个文件系统映像,linux内核在初始化后会mount initrd.img作为一个临时的根文件系统,而init进程就是在initrd.img里的,然后init进程会挂载真正的根文件系统,然后umount initrd.img。但Linux2.6内核的实现方式却不太一样,虽然完成的功能是一样的。Linux2.6采用initramfs。initramfs:init ram filesystem,它是一个cpio格式的内存文件系统,其实这部分也有很多内容可以讲,我们以后再谈。

  通常的步骤是先启动内核,然后内核挂载initrd.img,并执行里面的脚本来进一步挂载各种各样的模块,然后发现真正的root分区,挂载并执行/sbin/init。

  如果没有这个文件,计算机的启动时第一个进程都启动不起来。有他存在1号进程才可以开启。相当于是一个指挥官,他要指挥哪些程序在启动时应当存在,哪些程序不应当存在。/etc/inittab文件是init在启动时读取的文件,也就是指挥官的决策书,这个决策书规定了当前战争的局势,比如和平局势、冷战局势、战争局势。以及该局势下的核心策略。init就是这样,通过inittab这个文件控制了计算机的启动级别,及该级别下启动的进程。

[root@hao boot]# cat /etc/inittab
# 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
# 6 - reboot (Do NOT set initdefault to this)
#
id:5:initdefault:

  从这里可以看出,我这里linux的default启动级别是runevel 5(注意,此处不要擅自改为6,如果默认的runlevel是6,那么就会比较麻烦,为什么会这么说,看完下面每个级别具体对应的进程就会明白)。那么具体每个级别都是什么呢?其实每个级别都有若干个进程,只不过每个级别开的进程不同。

  0:几乎所有进程都关闭,停机状态

  1:单用户模式,root账户进行操作

  2:多用户,不能使用net file system,一般很少用

  3:完全多用户,一部分启动,一部分不启动,命令行界面

  4:未使用、未定义的保留模式

  5:图形化,3级别中启动的进程都启动,并且会启动一部分图形界面进程。

  6:停止所有进程,卸载文件系统,重新启动

  这些级别中1、2、4很少用,相对而言0、3、5、6用的会较多。3级别和5级别除了桌面相关的进程外没有什么区别。为了减少资源占用,推荐都用3级别。

  那么这些级别是如何定义的呢,在/etc/rc.d/目录内,有如下目录。

[root@Hao rc.d]# ll
total 60
drwxr-xr-x. 2 root root 4096 Mar 11 13:44 init.d
-rwxr-xr-x. 1 root root 2617 Feb 22 2013 rc
drwxr-xr-x. 2 root root 4096 Apr 3 08:36 rc0.d
drwxr-xr-x. 2 root root 4096 Apr 3 08:36 rc1.d
drwxr-xr-x. 2 root root 4096 Apr 3 08:36 rc2.d
drwxr-xr-x. 2 root root 4096 Apr 3 08:36 rc3.d
drwxr-xr-x. 2 root root 4096 Apr 3 08:36 rc4.d
drwxr-xr-x. 2 root root 4096 Apr 3 08:36 rc5.d
drwxr-xr-x. 2 root root 4096 Apr 3 08:36 rc6.d
-rwxr-xr-x. 1 root root 220 Feb 22 2013 rc.local
-rwxr-xr-x. 1 root root 19472 Feb 22 2013 rc.sysinit

  在诸如rc3.d和rc5.d目录下有runlevel 3 和runlevel 5中允许和不允许启动的进程,

  再进去目录看一下。

[root@Hao rc.d]# ls rc3.d/
K01smartd K69rpcsvcgssd S10network S26acpid
K02oddjobd K73winbind S11auditd S26haldaemon
K05wdaemon K75ntpdate S11portreserve S26udev-post
K10psacct K75quota_nld S12rsyslog S28autofs
K10saslauthd K76ypbind S13cpuspeed S50bluetooth
K15htcacheclean K80kdump S13irqbalance S58ntpd
K15httpd K84wpa_supplicant S13rpcbind S80postfix
K15svnserve K87restorecond S15mdmonitor S82abrt-ccpp
K25sshd K88sssd S22messagebus S82abrtd
K30spice-vdagentd K89rdisc S23NetworkManager S90crond
K36mysqld K95firstboot S24nfslock S95atd
K50dnsmasq K99rngd S24rpcgssd S99certmonger
K50netconsole S01sysstat S24rpcidmapd S99local
K50snmpd S02lvm2-monitor S25blk-availability
K50snmptrapd S08ip6tables S25cups
K60nfs S08iptables S25netfs
root@Hao rc.d]# ls rc5.d/
K01smartd K75ntpdate S11portreserve S26udev-post
K02oddjobd K75quota_nld S12rsyslog S28autofs
K05wdaemon K76ypbind S13cpuspeed S50bluetooth
K10psacct K80kdump S13irqbalance S55sshd
K10saslauthd K84wpa_supplicant S13rpcbind S58ntpd
K15htcacheclean K87restorecond S15mdmonitor S70spice-vdagentd
K15httpd K88sssd S22messagebus S80postfix
K15svnserve K89rdisc S23NetworkManager S82abrt-ccpp
K36mysqld K95firstboot S24nfslock S82abrtd
K50dnsmasq K99rngd S24rpcgssd S90crond
K50netconsole S01sysstat S24rpcidmapd S95atd
K50snmpd S02lvm2-monitor S25blk-availability S99certmonger
K50snmptrapd S08ip6tables S25cups S99local
K60nfs S08iptables S25netfs
K69rpcsvcgssd S10network S26acpid
K73winbind S11auditd S26haldaemon

  这些都是链接文件lrwxrwxrwx,链接的路径都是/etc/init.d中的脚本文件。

[root@Hao rc.d]# ll rc3.d/ | grep ab
lrwxrwxrwx. 1 root root 19 Feb 10 19:46 S08ip6tables -> ../init.d/ip6tables
lrwxrwxrwx. 1 root root 18 Feb 10 19:44 S08iptables -> ../init.d/iptables
lrwxrwxrwx. 1 root root 26 Feb 10 19:51 S25blk-availability -> ../init.d/blk-availability
lrwxrwxrwx. 1 root root 19 Feb 10 19:46 S82abrt-ccpp -> ../init.d/abrt-ccpp
lrwxrwxrwx. 1 root root 15 Feb 10 19:46 S82abrtd -> ../init.d/abrtd

  K开头的文件意味着是要关闭进程的文件,S开头的进程则是开启的进程,之后的数字表示启动的顺序,比如S23NetworkManager和S80postfix都要依赖S10network,如果这个顺序错了或者电脑了,那么和网络有关的程序都会启动错误,这个也在管理服务器的过程中也需要定期去看一下。

  对比rc3.d/目录与rc5.d/

[root@Hao rc.d]# diff  rc3.d/ rc5.d/
Only in rc3.d/: K30spice-vdagentd
Only in rc5.d/: S70spice-vdagentd

  发现spice-vdagentd服务在runlevel 3中是KILL的,在runleve5是START的,spice-vdagentd服务是Redhat桌面虚拟组件之一,所以在runlevel3中没必要开,在runleve5中是要开启的,否则Linux将无法提供桌面服务,除此之外,两个运行级别没区别。

  还记得那个之前提到的决策书吗?核心策略对应的会启动的内容都是在这里,比如和平局势(之于runlevel 1)下启用基本的民防系统(之于S01sysstat)就可以了,冷战时期(之于runlevel 3)除了民防以外,还开启了自卫系统(之于S08iptables)、消息传递(S10network)、警报机制(之于S22messagebus)、派遣间谍(之于sshd)、调动步兵部队(之于httpd)等等,如果是战争时期(之于runlevel 5)除了上面种种之外还要启动更多的战争活动,调度更强大的部队。

2.相关命令

通过chkconfig –level 3 sshd off在运行级别中的开启或者关闭服务。

通过chkconfig –list sshd来查看sshd在所有runlevel中的状态。

[root@Hao rc.d]# chkconfig --list sshd
sshd 0:off 1:off 2:on 3:on 4:on 5:on 6:off [root@Hao rc.d]# chkconfig --level 3 sshd off [root@Hao rc.d]# chkconfig --list sshd
sshd 0:off 1:off 2:on 3:off 4:on 5:on 6:off

init 6是重启,init 0是关机。

# who –r 查看当前级别

run-level 5  2012-09-02 06:23

3.附文1.不小心把init 默认的运行级别设为6怎么办

  通过查看 /etc/rc.d/rc6.d可以看到,runlevel 6中只有两个服务是开启的,分别是  S00killall和S01reboot,如果默认的运行级别设为6,那么重启之后,机器会不停重启。

如果真的意(shou)外(jian)把默认的runlevel运行级别设置成了6,那么需要如下操作更改默认运行级别。在GRUB界面按e

然后选中第二行,再按e进入

在出现的命令行后加 [\空格]1 (单用户),按Enter键确认操作并后退到Linux配置页面

再按b重启Linux进入单用户模式就可以修改了,我们这里改为3好了。然后重启就可以了。

4.推荐文章

Linux启动这个很不经意的过程里面包含了太多的内容,本文只是介绍了很小的一部分,推荐大家去深入了解,顺便推荐几篇还不错的文章。

rc.d rc.local rc.sysinit 等Linux系统脚本启动顺序详解 作者:jsxubar (朱秀龙)

Linux2.6 内核的 Initrd 机制解析 作者: dazhi.li(李 大治)

深入理解linux启动过程

Linux 启动详解之init的更多相关文章

  1. Linux启动详解

    <概述> Linux启动大致分为一下几个步骤,详细的启动步骤在<启动分析>中详解. 1:首先bios加电自检,初始化(这个过程会检测相关硬件(cpu,内存,显卡,硬盘等)) 2 ...

  2. Linux基本配置和管理 4 ---- Linux系统启动详解

    1 系统启动的流程 BIOS -> MBR+boot code -> 执行引导程序: GRUB -> 加载内核 -> 执行init -> 运行runlevel 2 启动详 ...

  3. Linux 目录详解 树状目录结构图

    1.树状目录结构图 2./目录 目录 描述 / 第一层次结构的根.整个文件系统层次结构的根目录. /bin/ 需要在单用户模式可用的必要命令(可执行文件):面向所有用户,例如:cat.ls.cp,和/ ...

  4. Linux命令详解之—pwd命令

    Linux的pwd命令也是一个非常常用的命令,本文为大家介绍下Linux中pwd命令的用法. 更多Linux命令详情请看:Linux命令速查手册 Linux pwd命令用于显示工作目录. 执行pwd指 ...

  5. Linux 系统结构详解

    Linux 系统结构详解 Linux系统一般有4个主要部分: 内核.shell.文件系统和应用程序.内核.shell和文件系统一起形成了基本的操作系统结构,它们使得用户可以运行程序.管理文件并使用系统 ...

  6. linux syslog详解

    linux syslog详解 分三部分 一.syslog协议介绍 二.syslog函数 三.linux syslog配置   一.syslog协议介绍 1.介绍 在Unix类操作系统上,syslog广 ...

  7. Docker 基础技术之 Linux cgroups 详解

    PS:欢迎大家关注我的公众号:aCloudDeveloper,专注技术分享,努力打造干货分享平台,二维码在文末可以扫,谢谢大家. 推荐大家到公众号阅读,那里阅读体验更好,也沉淀了很多篇干货. 前面两篇 ...

  8. (转)Linux PS 详解

    原文:https://cn.aliyun.com/jiaocheng/162702.html 摘要:原文地址:http://www.cnblogs.com/wangkangluo1/archive/2 ...

  9. (转)linux正则表达式详解

    linux正则表达式详解 http://blog.csdn.net/wuliowen/article/details/64131815 1:什么是正则表达式: 简单的说,正则表达式就是处理字符串的方法 ...

随机推荐

  1. python专题-异常处理(基础)

    之前在学习python的时候有整理过python异常处理的文章,不够简单也不够完整,所以决定再整理一篇,算做补充. http://www.cnblogs.com/cmt110/p/7464748.ht ...

  2. jmeter 实现登录一次,多次操作登录后的某一个功能

  3. 马士兵讲jsp项目--BBS项目分析笔记

    1 导言 作为一个新手JAVA程序员,我相信很多人和我一样急切的想要寻找项目来做,这里我把马士兵老师讲的JAVA WEB的第一个小项目拿过来给大家分享一下. 首先,对一个项目而言我们先要认识清楚我们要 ...

  4. CVTE前端笔试编程题

    这些题目是做完笔试之后,在别的地方找到的,现在附上. 1.(1)这题考察的怎么把参数转换为数组,然后再截取你想要的位数. function C(){ var a_args=Array.prototyp ...

  5. Maven01——简介、安装配置、入门程序、项目构建和依赖管理

    1 Maven的简介 1.1 什么是maven 是apache下的一个开源项目,是纯java开发,并且只是用来管理java项目的 Svn eclipse   maven量级 1.2 Maven好处 同 ...

  6. Linux的学习笔记_Day1

    为什么要开始学习Linux命令? 首先当然是因为工作需要了,现在的工作是负责银行调度的系统的源系统接入的工作,经常要到生产部署版本.所以--买了一本<Linux命令行与shell脚本编程大全&g ...

  7. Info模式下的隐形杀手(SpringMVC同时使用<mvc:resources.../>和FormattingConversionServiceFactoryBean时出现的问题)

    天气一天比一天变的凉快了,而我一天天踩的坑更加贱了,首先在北京向各位问好,也给身边献身教育事业的亲朋好友们补上一句节日快乐! 今天早上手贱把项目误删了,不得不去SVN上去乞求了.我个人习惯项目运行的时 ...

  8. Apache Camel之FTP组件学习

    写在最前面 哎,最近提了离职,手头的活也基本上清理的差不多了.想着这个把月可以舒服的晃悠晃悠的离开,但是运维的小伙伴总是不架势,走之前还是提了个新需求. 先说下需求吧,我们的系统概括的讲就是一个接口系 ...

  9. poj 1384完全背包

    题意:给出猪罐子的空质量和满质量,和n个硬币的价值和质量,求猪罐子刚好塞满的的最小价值. 思路:选择硬币,完全背包问题,塞满==初始化为无穷,求最小价值,min. 代码: #include<io ...

  10. nrm的安装 、定义和用法

    因为npm包管理工具是属于国外的,所以在中国使用它下载东西的时候比较慢.这时我们就想用国内的淘宝镜像.也有别的,所以当你想切换下载源的时候就会用到nrm了. ###首先,nrm是什么呢? 开发的npm ...