背景知识

计算机启动基本流程如下

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. Android开发实战之拥有Material Design风格的侧滑布局

    在实现开发要求中,有需要会使用抽屉式布局,类似于QQ5.0的侧滑菜单,实现的方式有很多种,可以自定义控件,也可以使用第三方开源库. 同样的谷歌也推出了自己的侧滑组件——DrawLayout,使用方式也 ...

  2. 自然语言处理之中文分词器-jieba分词器详解及python实战

    (转https://blog.csdn.net/gzmfxy/article/details/78994396) 中文分词是中文文本处理的一个基础步骤,也是中文人机自然语言交互的基础模块,在进行中文自 ...

  3. 689. Maximum Sum of 3 Non-Overlapping Subarrays三个不重合数组的求和最大值

    [抄题]: In a given array nums of positive integers, find three non-overlapping subarrays with maximum ...

  4. .NET 使用HttpWebRequest 伪造Request.UrlReferrer

    在网上找了许久关于伪造UrlReferrer地址资料,也许是搜索的关键词不对吧,还是内容涉及到了什么敏感的东西,愣是没找到,换成自定义UrlReferrer也找不到.经过仔细研究,原来在.NET中要自 ...

  5. 关于select Count()的使用和性能问题

    比如Count(*) FROM E_Table WHERE [date] > '2008-1-1' AND istrue = 0 由于操作的数据比较大(400万以上),所以使用了两个数据库,一个 ...

  6. SetDns.bat 2014-03-28 20:00:19

    此BAT文件,可以帮助便捷切换dns设置,Win7系统需使用管理员身份运行. @echo off echo 设置为GoogleDNS(1)/dhcp(2)/OpenDNS(3) set /p sel= ...

  7. Photo1

    Story: 想象你是一个乡村的孩子,你有着健康的肤色,正在和家人一起坐在颠簸的马车上,赶着去城里买东西.正值夏日,黄昏的阳光晒在你的脸上,于是你的脸显得红扑扑的.路上满满的都是葱绿的草和参差不齐的树 ...

  8. ES5、6、7浅析

    ECMA Script 它是一种由ECMA组织(前身为欧洲计算机制造商协会)制定和发布的脚本语言规范 而我们学的JavaScript是ECMA的实现, 但术语ECMAScript和JavaScript ...

  9. java中List的用法和实例详解

    java中List的用法和实例详解 List的用法List包括List接口以及List接口的所有实现类.因为List接口实现了Collection接口,所以List接口拥有Collection接口提供 ...

  10. gradle创建spring-boot项目

    刚来新公司,熟悉了公司项目搭建的框架,了解到了一种新的项目管理工具:gradle,从网上了解,据说比maven更加灵活化,于是便学习了一番.在此记录下来,一遍以后使用.gradle的安装就不说了,网上 ...