背景知识

计算机启动基本流程如下

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. Oracle中针对中文进行排序

    在oracle 9i之前,对中文的排序,是默认按2进制编码来进行排序的. 9i时增加了几种新的选择: 按中文拼音进行排序:SCHINESE_PINYIN_M 按中文部首进行排序:SCHINESE_RA ...

  2. cocos2d-js反射

    如何在android平台上使用js直接调用Java方法 在cocos2d-js 3.0beta中加入了一个新特性,在android平台上我们可以通过反射直接在js中调用java的静态方法.它的使用方法 ...

  3. C++ std::unordered_multiset

    std::unordered_multiset template < class Key, // unordered_multiset::key_type/value_type class Ha ...

  4. linux的“自动化”-乾颐堂CCIE

    linux系统的web网站在运营状态时,我们常需要对网站进行维护,例如查看资源剩余并做出响应.日志分割.数据整理,在特定状态执行特定任务等等,这些都会需要linux能实现自动执行某些任任务.本篇博文介 ...

  5. [原创]COCOS2DX 3.8 增加protobuf为external库

    此处为记录防止忘记,最近使用COCOS练习一些新的库,所以需要把PROTOBUF编译进去,看上去很麻烦,这里记录一下,以防忘记. 首先下载protobuf 2.5.0版本,下载地址请自行百度. 准备工 ...

  6. 37 有n个人围成一圈,顺序排号,从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号那位.

    题目:有n个人围成一圈,顺序排号,从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号那位. public class _037NumberOff { public st ...

  7. 使用ffmpeg将海康视频rtsp转为hls

    测试环境: Ubuntu14.04 LTS Desktop ffmpeg version 3.3.3 命令行运行: ffmpeg -i rtsp://admin:12345@10.0.10.19:55 ...

  8. 设计模式6---代理模式(Proxy Pattern)

    代理设计模式 定义:为其他对象提供一种代理以控制对这个对象的访问. 1.  静态代理 静态代理在使用时,需要定义接口或者父类,被代理对象与代理对象都实现相同的接口或者是继承相同父类. 接口:IUser ...

  9. MacOS VMware Function安装win的ghost系统(亲测成功!!!)

    1.下载WEPE工具生成可启动ISO 下载WEPE工具 WEPE工具下载地址 下载完成之后,双击打开文件(无需安装,可直接制作可启动ISO) 点击立即生成ISO之后 2.将生成的可启动ISO文件和wi ...

  10. SQL2008中sa账户无法登陆问题

    实验需要用Java与SQL Server连接,因为使用的 SQL 2008 Express Edition 是基于 Visual Studio2010 安装包安装时一起安装的,所以为了方便数据库的操作 ...