一、基本概念

 内核设计流派:
    单内核设计:Linux        //所有功能集成于同一个程序
    微内核设计:Windows,Solaris  //每种功能使用一个单独子系统实现
Linux内核特点:
支持模块化:.ko文件
支持模块的动态装载和卸载
Linux内核组成部分:
核心文件:/boot/vmlinuz-VERSION-release
ramdisk: //基于内存的磁盘,用来辅助内核加载根文件驱动程序
CentOS5: /boot/initrd-VERSION-release.img
CentOS6: /boot/initramfs-VERSION-release.img 模块文件: /lib/modules/VERSION-release

二、CentOS系统启动流程 

.POST(加电自检): CMOS除了加电自检还可以进行一些设置,也就是BIOS(Basic Input and Output System)
.BOOT Sequence:  按次序查找各引导设备,第一个有引导程序的设备即为本次启动用到的设备
.bootloader:  引导程序,引导加载器
windows:ntloader
linux:
LILO: LInux LOader //不支持将系统安装在1024个柱面之后的分区上,虽然古老,但现在手机上应用较多
GRUB:GRand Uniform Bootloader,统一加载器
GRUB .x: GRUB Legancy
GRUB .x: GRUB2
功能:提供一个菜单,运行用户选择要启动系统或不同的内核版本,把用户选定的内核装载到内存特定空间中,解压展开后,将系统控制权移交给内核
4.kernel:
自身初始化:
探测可识别到的所有硬件设备
加载硬件驱动程序:(有可能会借助于ramdisk加载驱动)
以只读方式挂载根文件系统
运行用户空间中的第一个应用程序:/sbin/init init程序的类型:
SysV: init, CentOS5, 配置文件:/etc/inittab
Upstart:重命名为 init, CentOS6, 配置文件:/etc/inittab, /etc/init/*.conf
Systemd: systemd,CentOS7, 配置文件:/user/lib/systemd/system, /etc/systemd/system
     ramdisk:
    内核中的特性之一:使用缓冲和缓存来加速对磁盘上的文件访问
    所以ramdisk有可能被缓冲两次,所以CentOS6上改进为位于内存的文件系统ramfs
    CentOS : initrd, 工具程序: mkinitrd
    CentOS : initramfs, 工具程序:mkinitrd, dracut
系统初始化:
POST(加电自检) --> BOOT Sequence(BIOS) -->bootloader(MBR)-->kernel(ramdisk)--> rootfs(只读)--> init

/sbin/init

 CentOS  :
      运行级别:为了系统的运行或维护等应用目的而设定
        -:7个级别
          :关机
:单用户模式(root,无须登录,single,维护模式)
:多用户模式,会启动网络功能,但不会启动网络文件系统NFS,维护模式
:多用户模式,正常模式:文本界面
:预留级别,可同3级别
:多用户模式,正常模式,图形界面
:重启
模式级别:、
切换级别:init #
查看级别: runlevel、who -r
配置文件:/etc/inittab
每一行定义一种action以及与之对应的process
例如: id:runlevel:action:process
action:
wait: 切换至此级别运行一次
respawn: 此process终止,就重新启动
initdefault: 设定默认运行级别,process省略
sysinit: 设定系统初始化方式,此处一般为指定/etc/rc.d/sysinit
                 ... id::initdefault:
si::sysinit:/etc/rc.d/rc.sysinit l0::wait:/etc/rc.d/rc
...
l6::wait:/etc/rc.d/rd
注释:rc -->意味着读取/etc/rc.d/rc0.d/{K*S*}:
             K*:K##*,##为运行次序,数字越小,越先运行,数字越小通常依赖到别的服务
             S*:S##*,##为运行次序,数字越小,越先运行,数字越小通常为被依赖到服务
               相当于执行:for src in /etc/rc.d/rc0.d/K*;do
$src stop
done
for src in /etc/rc.d/rc0.d/S*;do
$src start
done
管理工具:chkconfig命令        //管理这些链接文件以及查看某些服务是否启动
  例如:
     查看服务:chkconfig --list srvName
        chkconfig --list  //查看所有服务在各级别下是否开启或停止
        chconfig --list network  //查看指定服务是否开启或停止
        
     
     添加服务:chkconfig --add srvName  
        SysV的服务脚本放置于/etc/rc.d/init.d(/etc/init.d)
        chkconfig --add name
          #!/bin/bash
          #
          # chkconfig: LLLL nn nn       删除服务:chkconfig --del srvName

      修改服务:chkconfig [--level levels] name <on|off|reset>
                  --level LLLL: 指定要设置的级别:省略时表示2345

           例如:chkconfig --level 3 NetworkManager off  //修改级别3下NetworkManager服务为停止
实例:添加服务及删除服务
[root@alen init.d]# vim test.sh    //在/etc/rc.d/init.d下面创建一个服务脚本test.sh
                       #!bin/bash
                       #
                       # chkconfig:345 23 84  //定义在345级别下S为23,K为84
                       # description:test srv     
                        echo "hello srv test.sh"
[root@alen init.d]# chmod +x test.sh
[root@alen init.d]# chkconfig --add test.sh
[root@alen init.d]# chkconfig --list test.sh
test.sh :关 :关 :关 :开 :开 :开 :关
[root@alen init.d]# ls -l /etc/rc.d/rc0.d/K84test.sh    //级别0下test.sh服务是关闭的为84
lrwxrwxrwx. root root 9月 : /etc/rc.d/rc0.d/K84test.sh -> ../init.d/test.sh  
[root@alen init.d]# ls -l /etc/rc.d/rc3.d/S23test.sh    //级别3下test.sh服务是开启的为23
lrwxrwxrwx. root root 9月 : /etc/rc.d/rc3.d/S23test.sh -> ../init.d/test.sh [root@alen init.d]# chkconfig --del test.sh    //删除服务test.sh
[root@alen init.d]# chkconfig --list test.sh    //此时查看服务就没有了

注意: 正常级别下,最后启动一个服务S99local不是链接到/etc/rc.d/init.d目录的一个服务脚本,而是指向了/etc/rc.d/rc.local脚本,因此,如果不需要写成服务脚本放置于/etc/rc.d/init.d目录下,开机时又会自动运行的命令,可放置于/etc/rc.d/rc.local文件中

服务启动好后就会启动终端设备,在终端设备上关联登录程序,然后用户输入账号密码就可以登录系统了

例如://启动6个虚拟终端
tty1::respawn:/usr/sbin/mingetty tty1
tty2::respawn:/usr/sbin/mingetty tty2
...
tty6::respawn:/usr/sbin/mingetty tty6
  注释: mingetty会调用login程序
/etc/rc.d/rc.sysinit:系统初始化脚本
.设置主机名
.设置欢迎信息
.激活udev和selinux
.挂载/etc/fstab文件中定义的文件系统
.检查根文件系统,并以只读方式重新挂载根文件系统
.设置系统时钟
.激活swap设备
.根据/etc/sysctl.conf文件设置内核参数
.激活lvm及software raid设备
.加载额外设备的驱动程序
.清理操作
总结:
/sbin/init-->读取/etc/inittab文件完成配置
/etc/inittab中配置步骤有:
.设置默认运行级别  //id:3:initdefault:
     2.运行系统初始化脚本、完成系统初始化   //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
     4.设置登录终端

CentOS 6:

  init程序为:upstart,配置文件:/etc/inittab(兼容CentOS5,但CentOS6不会用到,而是用后面的配置文件), /etc/init/*.conf

       

    

           

linux基础之CentOS启动流程的更多相关文章

  1. Linux系统入门---开机启动流程

    目录 Linux系统入门---开机启动流程 一.centos6 二.systemd管理进程 1.查看级别 三.centos7实践案例: 1.案例1:centos7系统,单用户修改root密码 案例2: ...

  2. 【Linux】【Basis】CentOS启动流程

    1. 基础概念       1.1 Linux系统的组成部分:内核+根文件系统         内核:进程管理.内存管理.网络协议栈.文件系统.驱动程序.安全功能             IPC:In ...

  3. centos启动流程[转]

    启动流程概览 在硬件驱动成功后,Kernel 会主动呼叫 init 程序,而 init 会取得 run-level 资讯: init 运行 /etc/rc.d/rc.sysinit 文件来准备软件运行 ...

  4. Centos启动流程及grub legacy

    Linux系统的组成部分:内核+根文件系统 内核的功能:进程管理.内存管理.网络管理.文件系统.驱动程序.安全功能 系统在运行时要么就是在运行内核代码,要么就是在运行应用程序代码.如果一个程序大多数时 ...

  5. Linux基础知识之 系统启动流程

    [1]Linux启动的几个主要阶段 启动流程示意图

  6. Spring基础系列-容器启动流程(1)

    原创作品,可以转载,但是请标注出处地址:https://www.cnblogs.com/V1haoge/p/9870339.html 概述 ​ 我说的容器启动流程涉及两种情况,SSM开发模式和Spri ...

  7. linux系统下开机启动流程

    在了解开机启动流程之前,还是得先了解一些磁盘的基本知识.磁盘主要由盘片,机械手臂,磁头,主轴马达构成.盘片就是存储数据的物理单位了.然后盘片上我们可以分成扇区(sector)和柱面(cylinder) ...

  8. Linux基础:操作系统的启动

    Centos6: # 1.加电自检(BIOS)# 2.MBR引导(512k)dd </dev/zero >/dev/sda bs=1k count=400 # 3.GRUB菜单(选择系统) ...

  9. CentOS启动流程及Shell脚本编程练习

    转至:http://www.178linux.com/88910 一.请详细描述CentOS系统的启动流程(详细到每个过程系统做了哪些事情) 第一步:POST加电自检 主要实现的功能是检测各个外围硬件 ...

随机推荐

  1. [Python]pip 国内源

    临时使用方法 pip install -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com celery END

  2. Xcode如何集成Pod教程

    一般开发都会用到很多第三方的框架,利用好他们可以加快开发进度,为了更方便将第三方的框架集成到我们的项目中,Pod是个很好的选择,现在说一下该怎么将Pod集成到我们的Xcode中 第一种方法 命令行的方 ...

  3. clr via c# 程序集加载和反射集(一)

    1,程序集加载---弱的程序集可以加载强签名的程序集,但是不可相反.否则引用会报错!(但是,反射是没问题的) //获取当前类的Assembly Assembly.GetEntryAssembly() ...

  4. .NET Core MVC下的TagHelper

    .NET web开发者在开发过程中,一定都踩过的坑,明明修改了js文件,可是部署到生产环境,客户反馈说:“还是报错啊”..然后一脸懵逼的去服务器上看文件,确实已经更新了.有经验的coder可能就想到了 ...

  5. 皮皮家园干活~万元web前端系统班在线课程点击免费领取

    点击添加群聊 今天在整理百度云盘里的资源,这几年累计了不少软件和教程. 在这特殊的时期里,先给大家分享一波.图片里的文件夹就是目录, 加入群聊免费领取 好资源就是要大家一起共享, 你们也不用到处在网上 ...

  6. Kakfa集群(2.11-0.10.1.0)版本滚动升级方案

    Kafka集群版本升级(2.11-0.10.1.0)升级(2.11-0.10.2.2) 官网升级说明: 一.系统环境Zookeeper集群:172.16.2.10172.16.2.11172.16.2 ...

  7. phpcms v9编辑器上传图片是否添加水印

    第一步:给图片上传对话框里面添加是否添加水印的多选框,找到: satics/js/ckeditor/ckeditor.js 第17554行 (需要格式化,我用的NetBeans)修改为 functio ...

  8. ssh远程连接到Ubuntu

    1.ubuntu首先得安装ssh sudo apt-get install openssh-server 2.启动ssh sudo /etc/init.d/ssh start 3.检查是否开启 ps ...

  9. 20200117 .net 001

    第一部分:面向对象 封装 继承(里氏转换) 多态第二部分:值类型.引用类型.字符串操作第三部分:集合文件操作第四部分:正则表达式第五部分:XML操作第六部分:委托.事件第七部分:反射. 1.变量的命名 ...

  10. Dalvik虚拟机和Art虚拟机

    Dalvik虚拟机 DVM是Dalvik Virtual Machine的缩写,是Android4.4及以前使用的虚拟机,所有android程序都运行在android系统进程里,每个进程对应着一个Da ...