背景知识

计算机启动基本流程如下

1)首先开机自检-POST,

2)自检通过后根据CMOS的配置找到第一个可启动磁盘的MBR中的boot loader程序(一般在启动磁盘的第一个物理扇区,占446字节),并把控制权交给boot loader

3)bootloader完成操作系统内核的加载,并把控制权交给内核

4)内核继续完成系统的启动

说明:

1)POST,会检查自身硬件是否正常. 在BIOS进行设置,管理

2)BIOS:保存着系统最重要的基本输入输出程序,系统信息设置、开机上电自检程序和系统启动自举程序等。

3)CMOS:主板上的一块可读写的RAM芯片,主要用来保存当前系统的硬件配置和操作人员对某些参数的设定。由系统通过一块后备电池供电,因此无论是在关机状态中,还是遇到系统掉电情况,CMOS信息都不会丢失。现在多数厂家将CMOS设置程序做到了 BIOS芯片中,在开机时通过按下某个特定键就可进入CMOS设置程序而非常方便地对系统进行设置,因此这种CMOS设置又通常被叫做BIOS设置。

4)MBR:主引导记录,一共512字节,详细内容如下

                446: bootloader
                64: fat--磁盘分区表
                2: 55AA--bootloader是否有效的标记
 
要了解boot loader,首先需要说下boot sequnence.
 
5)BOOT Sequence: 按次序查找各引导设备,第一个有引导程序的设备即为本次启动用到设备。引导设备中用到的程序叫 bootloader(引导加载器)。
       例如:
              windows上的引导加载器叫ntloader
              Linux:LILO:LInux loader
     
       为了能够引导不同的操作系统,于是有了GRUB
              GRUB: GRand Uniform Bootloader---统一引导加载器,可引导多个引导系统,现在发展到第2代。
                        GRUB 0.X: GRUB Legacy
                        GRUB 1.x: GRUB2---2代GRUB,完全重写了
                功能:提供一个菜单,允许用户选择要启动系统或不同的内核版本;把用户选定的内核装载到内存中的特定空间中,然后解压、展开,并把系统控制权移交给内核;    
 
      GRUB: 启动加载过程     http://blog.csdn.net/u011797751/article/details/50256907
 
6)内核加载后需要解压,展开,然后进行自身初始化,包括如下内容:

    
                1)探测可识别到的所有硬件设备;
                2)加载硬件驱动程序;(有可能会借助于ramdisk加载驱动)
                3)以只读方式挂载根文件系统;
                4)运行用户空间的第一个应用程序:/sbin/init

7)ramdisk--虚拟内存盘,通过软件将一部分内存(RAM)模拟为硬盘来使用的一种技术

内核中的特性之一:使用缓冲和缓存来加速对磁盘上的文件访问;

这种技术在centos5中存在一个问题:内存把ramdisk当作是一个硬盘,即使这部分已经放在内存中,依然会被ramdisk当作硬盘放到缓冲区,浪费了资源,而ramfs可以被视为一个文件系统,可以直接在内存中运行,所以centos5-->6做了一个升级,ramdisk --> ramfs

                        CentOS 5: initrd,  工具程序:mkinitrd
                        CentOS 6: initramfs, 工具程序:mkinitrd, dracut

正文开始

 1.  /sbin/init是如何运作的呢?
            CentOS 5:
                运行级别:为了系统的运行或维护等应用目的而设定;
                    0-6:7个级别
                        0:关机
                        1:单用户模式(root, 无须登录), single  ----维护模式,比如可以重置密码;
                        2:  多用户模式,会启动网络功能,但不会启动NFS  -----维护模式;
                        3:多用户模式,正常模式;文本界面;
                        4:预留级别;可同3级别;
                        5:多用户模式,正常模式;图形界面;
                        6:重启
                    默认级别:
                        3, 5
                    切换级别:
                        init #
                    查看级别:
                        runlevel
                        who -r
 
 配置文件:/etc/inittab
            文件中每一行定义一种action以及与之对应的process,每一列如下
             id:runlevel:action:process,例如id:5:initdefault:
 
                        action:
                            wait: 切换至此级别运行一次;
                            respawn:此process终止,就重新启动之;
                            initdefault:设定默认运行级别;process省略;
                            sysinit:设定系统初始化方式,此处一般为指定/etc/rc.d/rc.sysinit;
                            ...
 
一些例子:
                    id:3:initdefault:
                    si::sysinit:/etc/rc.d/rc.sysinit    #运行级别为空,表示所有级别
                    l0:0:wait:/etc/rc.d/rc 0
                    l1:1:wait:/etc/rc.d/rc 1
                    ...
                    l6:6:wait:/etc/rc.d/rc 6
                        说明:rc 0 --> 意味着读取/etc/rc.d/rc0.d/
                            K*: K##*:##运行次序;数字越小,越先运行;数字越小的服务,通常依赖到别的服务----要先杀;
                            S*: S##*:##运行次序;数字越小,越先运行;数字越小的服务,通常被依赖到的服务---要先启动;
              运行过程如下:
                            for srv in /etc/rc.d/rc0.d/K*; do
                                $srv stop
                            done
 
                            for srv in /etc/rc.d/rc0.d/S*; do
                                $srv start
                            done
etc/rc.d/init.d/目录下的所有启动脚本都被链接到/etc/rc.d/目录下的各级别目录中,比如/rc3.d, rc4.d, rc5.d
 
CentOS 7 ,配置文件:/usr/lib/systemd/system, /etc/systemd/system 
CentOS 6,配置文件:/etc/inittab, /etc/init/*.conf (其实用的这个)
 
 
 
2.  chkconfig命令:   
                                         
查看服务在所有级别的启动或关闭设定情形: chkconfig [--list] [name]      
                     
添加:新添加了一个服务程序,需要把启动脚本放在目录/etc/rc.d/init.d (/etc/init.d),然后需要在各级别上创建链接文件
         chkconfig --add name,在配置文件中指明级别,优先级如下                
           #!/bin/bash
           #
           # chkconfig: LLLL nn nn  (这里的LLLL表示各级别,写上的就表示S,第一个nn表示S的优先级,第2个nn表示K的优先级,例如chkconfig: 345 66 33,一般K的优先级要小于S的优先级)                     
         查看链接文件,比如新建服务名字是testsrv,ls -l /etc/rc.d/rc0.d/K33testsrv      ls -l /etc/rc.d/rc3.d/S66testrv
                                  
删除:chkconfig --del name
                                
修改指定的链接类型:
chkconfig [--level levels] name <on|off|reset>
--level LLLL: 指定要设置的级别;省略时表示2345;
 
注意:
正常级别下(ls /etc/rc.d/rc3.d/目录中),最后启动一个服务S99local没有链接至/etc/rc.d/init.d一个服务脚本,而是指向了/etc/rc.d/rc.local脚本(ls -l /etc/rc.d/rc3.d/S99local查看);因此,不便或不需写成脚本放置于/etc/rc.d/init.d/目录,且又想开机时自动运行的命令,可直接放置于/etc/rc.d/rc.local文件中(里面放置开机服务最后一步要运行的东西);
 
 
 
 
3. update-rc.d命令
 
ubuntu中和chkconfig类似的开机启动控制命令
以tomcat为例子,如果是启动命令,可以在/etc/rc.local中添加
如果想运行脚本,则需要先将脚本复制或者软连接到/etc/init.d/目录下,然后用:update-rc.d tomcat defaults NN命令(NN为启动顺序,比如95),如果想卸载, update-rc.d -f tomcat remove

linux开机后第一个程序--init的更多相关文章

  1. Linux开机自动启动某一程序

    Linux开机启动程序详解我们假设大家已经熟悉其它操作系统的引导过程,了解硬件的自检引导步骤,就只从Linux操作系统的引导加载程序(对个人电脑而言通常是LILO)开始,介绍Linux开机引导的步骤. ...

  2. Manjaro Linux安装后第一件事

    环境:Manjaro KDE 使用中科大源  USTC Mirror 当然也可以勾选所有中国镜像源 谷歌加上云pinyin拼音输入法,不亚于搜狗 fcitx-qt5 kcm-fcitx  (confi ...

  3. ORACLE EBS R12 FOR LINUX 开机后如何启动数据库、应用脚本[Z]

    在Linux中安裝EBS  R12後, EBS關閉與啟動的程序為: 1. 關閉EBS - 先關閉Applications Server $ cd /d01/oracle/VIS/inst/apps/V ...

  4. Linux开机后 systemd 自动启动 ceph osd mon进程

    机房操作失误导致机架或主机掉电是偶尔发生的事情,那么怎么在这种情况下,让Ceph服务随OS启动而快速启动呢 ? 如下是一个简单方法: 在OSD主机上执行如下命令: sudo ln -s /usr/li ...

  5. 如何使Linux系统上的程序开机后自动运行 (转)

    Linux有自己一套完整的启动体系,抓住了Linux启动的脉络,Linux的启动过程将不再神秘. 阅读之前建议先看一下附图. 本文中假设inittab中设置的init tree为: /etc/rc.d ...

  6. /etc/rc.local 与 /etc/init.d Linux 开机自动运行程序

    1. /etc/rc.local 这是使用者自订开机启动程序,把需要开机自动运行的程序写在这个脚本里 --------引用---------------------- 在完成 run level 3 ...

  7. linux启动后自动登录并运行自定义图形界面程序

    在<Ubuntu CTRL+ALT+F1~F6 进入命令模式后不支持中文显示的解决办法>一文中提到linux启动在以后运行一个独占显示器的图形程序的两种办法. 1.不启动xserver,使 ...

  8. Linux开机启动程序详解

    Linux开机启动程序详解我们假设大家已经熟悉其它操作系统的引导过程,了解硬件的自检引导步骤,就只从Linux操作系统的引导加载程序(对个人电脑而言通常是LILO)开始,介绍Linux开机引导的步骤. ...

  9. Linux开机启动程序详解[转]

    Linux开机启动程序详解 我们假设大家已经熟悉其它操作系统的引导过程,了解硬件的自检引导步骤,就只从Linux操作系统的引导加载程序(对个人电脑而言通常是LILO)开始,介绍Linux开机引导的步骤 ...

随机推荐

  1. Spark之 SparkSql、DataFrame、DataSet介绍

    SparkSql SparkSql是专门为spark设计的一个大数据仓库工具,就好比hive是专门为hadoop设计的一个大数据仓库工具一样. 特性: .易整合 可以将sql查询与spark应用程序进 ...

  2. Professional C# 6 and .NET Core 1.0 - Chapter 42 ASP.NET Web API

    本文内容为转载,重新排版以供学习研究.如有侵权,请联系作者删除. 转载请注明本文出处: -------------------------------------------------------- ...

  3. 用map函数来完成Python并行任务的简单示例

    众所周知,Python的并行处理能力很不理想.我认为如果不考虑线程和GIL的标准参数(它们大多是合法的),其原因不是因为技术不到位,而是我们的使用方法不恰当.大多数关于Python线程和多进程的教材虽 ...

  4. Python open()文件处理使用介绍

    1. open()语法open(file[, mode[, buffering[, encoding[, errors[, newline[, closefd=True]]]]]])open函数有很多 ...

  5. 利用SHELL脚本修改当前环境变量

    转自http://www.chinaunix.net/old_jh/7/21485.html 1.背景 ---- 在日常的工作中,为了设置一大批环境变量,我们通常编辑了一个shell程序,包含了多个的 ...

  6. [C++] right value reference

    the advantage of  right value reference: Memory Optimization save memory copy

  7. windows下配置Groovy

    windows下配置Groovy环境的教程网上很容易搜到,我参考的是这篇文章,安装过程一切顺利,然而在cmd中运行Groovy -v命令时返回ERROR: JAVA_HOME is set to an ...

  8. 如何快速增加pdf书签,解除pdf限制

    一.需要的工具 福昕PDF阅读器 Foxit PDF Editor 2.2.1 build 1119 汉化版 下载地址:http://www.onlinedown.net/soft/51002.htm ...

  9. mysql 数据库查询

    myspl   三部分  文件  服务  界面 查看数据库命令   show databases 创建数据库  create database  库名 删除数据库   drop database   ...

  10. 9.29学习的js基础

    js基础 1.三种js引入方式    a).<input type="button" value="点击事件" onClick="documen ...