[Linux学习笔记] Linux系统引导流程(一)

前面我们已经介绍过以CentOS为例的Linux系统的安装以及Linux常用命令的使用,本节内容我们将介绍Linux系统引导流程。当按下电源的那一刻,到我们看到用户界面,这其中都发生了些什么呢?赶快来一探究竟.

下图为Linux系统引导流程过程图:

以下对Linux引导流程过程做一个简单的说明:

1. POST加电自检

POST(POST ON SELF TEST)首先对每一个设备进行检查,完成后会寻找存有引导记录的设备,找到读入操作系统的引导记录,将系统控制权交给引导记录。

2. MBR引导

MBR(Master Boot Record),MBR记录一般是在磁盘0磁道1扇区,共512字节,前446个字节是BootLoader,后面的4*16个字节是存放分区信息的,最后两个字节是校验信息的 。

3. GRUB加载内核

GRUB(GRand Unified Bootloader)就是MBR前446个字节,是Booloader的一种,它的作用是选择要启动的内核。

GRUB用于载入内核,查看GRUB配置文件: <1> CentOS-7版本以前系统: /etc/grub.conf; <2>CentOS-7系统: /boot/grub2/grub.cfg

内核启动后完成了两件事: (1)驱动硬件; (2)启动init进程

4. 启动init进程

init启动后读取inittab配置文件,执行缺省运行级别,从而继续引导进程。在UNIX系统中,init是第一个可以存在的进程,它的PID恒为1,但它也必须想一个更高级的功能负责: PID为0的内核调度器(分配CPU时间)。

这个过程包含了多个步骤,以CentOS-7以前的系统为例说明:

(1) 读取/etc/inittab,选择默认级别<常用的运行级别有3:表示多用户; 5:X Window环境,关于运行级别的内容放在本文最后,并且十分重要>

(2) 执行初始化系统脚本,这个脚本在/etc/rc.d/rc.sysinit中

(3) 执行/etc/rc.d/rcX.d/下的脚本<默认级别是5,则会读取rc5.d下的所有脚本,来控制系统启动的时候启动或关闭那些服务>

这里的脚本大致分为两类,以S开头的和以K开头的。

S:代表开机启动的

K:表示开机时不启动的

文件命令格式,例如:

S01sysstat S: 开机启动; 01: 启动次序; sysstat: 启动脚本名

(4) 执行/etc/rc.d/rc.local脚本,这是启动过程中最后启动的一个脚本,然后会执行/bin/login 登陆用户。

下面图片中将更具体的展现了系统启动过程中经历的过程:

注意:

CentOS-7版本以前系统inittab配置文件存放目录: /etc/inittab

CentOS-7系统inittab配置文件也存放在/etc/inittab,但并未做实际配置,而是引向了运行级别配置文件

-------------------------------------------------------------------------------- L v S a n t o r i n i 的 分 割 线 --------------------------------------------------------------------------------

设置开机自启动服务或程序:

(1) 确定系统运行级别

(2) 编写脚本文件,并赋予文件可执行权限

(3) 创建对应的软连接文件置于在对应的rcN.d目录下(N表示运行级别: 1,2,3,4,5,6)

注意: 软连接文件名要以启动脚本命名规范来命名,例如: S10sysstat

如此操作,下次设备重启就可以执行自定义的启动脚本了。

举例(CentOS 7以前版本)<此段由于无设备环境,未验证,读者可看下边用chkconfig添加启动服务的示例>:

[[email protected] rc5.d]# cd /etc/rc.d/rc5.d
[[email protected] rc5.d]# pwd
/etc/rc.d/rc5.d
[[email protected] rc5.d]# vi /etc/rc.d/init.d/start.script 
[[email protected] rc5.d]# cat /etc/rc.d/init.d/start.script 
date >> /home/santorini/out.log
who >> /home/santorini/out.log
ls -l /etc >> /home/santorini/out.log
[[email protected] rc5.d]# ll /etc/rc.d/init.d/start.script 
-rw-r--r--. 1 root root 101 Nov 16 21:36 /etc/rc.d/init.d/start.script
[[email protected] rc5.d]# chmod 755 /etc/rc.d/init.d/start.script 
[[email protected] rc5.d]# ll /etc/rc.d/init.d/start.script 
-rwxr-xr-x. 1 root root 101 Nov 16 21:36 /etc/rc.d/init.d/start.script
[[email protected]calhost rc5.d]# ln -s /etc/rc.d/init.d/start.script S20defineBySantorini
[[email protected] rc5.d]# ll
total 0
lrwxrwxrwx. 1 root root 20 Nov 14 10:24 K50netconsole -> ../init.d/netconsole
lrwxrwxrwx. 1 root root 17 Nov 16 21:00 S10network -> ../init.d/network
lrwxrwxrwx. 1 root root 29 Nov 16 21:39 S20defineBySantorini -> /etc/rc.d/init.d/start.script

在介绍完下面的chkconfig命令后,我们将给出CentOS-7系统如何运行安装自启动服务.

chkconfig命令:

chkconfig命令主要用来更新(启动或停止)和查询系统服务的运行级信息。chkconfig不是立即自动禁止或激活一个服务,它只是简单的改变了符号连接.

语法: 
chkconfig [--add][--del][--list][系统服务] 或 chkconfig [--level <等级代号>][系统服务][on/off/reset]
参数用法:
 --add  增加所指定的系统服务,让chkconfig指令得以管理它,并同时在系统启动的叙述文件内增加相关数据;
 --del  删除所指定的系统服务,不再由chkconfig指令管理,并同时在系统启动的叙述文件内删除相关数据;
 --level<等级代号>  指定读系统服务要在哪一个执行等级中开启或关闭;
详细:
chkconfig --list [name]:显示所有运行级系统服务的运行状态信息(on或off)。如果指定了name,那么只显示指定的服务在不同运行级的状态。
chkconfig --add name:增加一项新的服务。chkconfig确保每个运行级有一项启动(S)或者杀死(K)入口。如有缺少,则会从缺省的init脚本自动建立。
chkconfig --del name:删除服务,并把相关符号连接从/etc/rc[0-6].d删除。
chkconfig [--level levels] name:设置某一服务在指定的运行级是被启动,停止还是重置。

CentOS-7系统安装自启动服务:

[[email protected] init.d]# pwd
/etc/rc.d/init.d
[[email protected] init.d]# vi defined 
[[email protected] init.d]# cat defined 
#!/bin/bash
#chkconfig: 5 10 90   (注意10表示启动优先级,90表示停止优先级, 5表示运行级别)
#description: define
date >> /Hello.log
ls -l /etc >> /Hello.log
[[email protected] init.d]# ls -l
total 36
-rw-r--r--. 1 root root    97 Nov 17 21:49 defined
-rw-r--r--. 1 root root 13430 Jan 15  2015 functions
-rwxr-xr-x. 1 root root  2989 Jan 15  2015 netconsole
-rwxr-xr-x. 1 root root  6470 Jan 15  2015 network
-rw-r--r--. 1 root root  1160 Mar  6  2015 README
[[email protected] init.d]# chmod 755 defined 
[[email protected] init.d]# ls -l
total 36
-rwxr-xr-x. 1 root root    97 Nov 17 21:49 defined
-rw-r--r--. 1 root root 13430 Jan 15  2015 functions
-rwxr-xr-x. 1 root root  2989 Jan 15  2015 netconsole
-rwxr-xr-x. 1 root root  6470 Jan 15  2015 network
-rw-r--r--. 1 root root  1160 Mar  6  2015 README
[[email protected] init.d]# chkconfig --add defined 
[[email protected] init.d]# cd /etc/rc.d/rc5.d
[[email protected] rc5.d]# pwd
/etc/rc.d/rc5.d
[[email protected] rc5.d]# ll
total 0
lrwxrwxrwx. 1 root root 20 Nov 14 10:24 K50netconsole -> ../init.d/netconsole
lrwxrwxrwx. 1 root root 17 Nov 17 21:43 S10defined -> ../init.d/defined
lrwxrwxrwx. 1 root root 17 Nov 16 21:00 S10network -> ../init.d/network

CentOS-7安装自启动服务步骤:

(1) 在/etc/init.d目录下新建开机启动时要执行的脚本,并赋予执行权限

(2) 使用chkconfig --add 命令添加启动服务.(执行完此命令后将在对应的运行级别rcN.d下生成相应的软链接文件,并且软链接指向/etc/init.d下刚才创建的执行脚本)

+++++++++++++++++++++++++++++++++++++++++++ O T H E R   I N T R O D U C T I O N ++++++++++++++++++++++++++++++++++++++++++++++++相关概念:

CMOS: 在计算机领域,CMOS常指保存计算机基本启动信息(如日期、时间、启动设置等)的芯片。有时人们会把CMOS和BIOS混称,其实CMOS是主板上的一块可读写的并行或串行FLASH芯片,是用来保存BIOS的硬件配置和用户对某些参数的设定。

硬件时钟(hwclock)和软件时钟(系统时间):

[[email protected] ~]# date   ##软件时钟
Sat Nov 14 08:28:12 CST 2015
[[email protected] ~]# hwclock   ##硬件时钟
Sat 14 Nov 2015 08:27:35 AM CST  -0.192386 seconds

软硬件同步时钟及时间设置:

-s, --hctosys        set the system time from the hardware clock  ##将系统时间设置为硬件时钟
-w, --systohc        set the hardware clock from the current system time  ##将硬件时钟设置为系统时间
[[email protected] ~]# hwclock --set --date="2011-08-14 16:45:05"  ##设置硬件时钟时间
[[email protected] ~]# date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]  ##设置系统时间

runlevel(运行级别):

runlevel 用来表示在init进程结束之后的系统状态,在系统的硬件中没有固定的信息来表示runlevel,它纯粹是一种软件结构。init和 inittab是runlevel影响系统状态的唯一原因。下面简单说明各运行级别runlevel:

0 - halt 关机,让init关闭所有进程并关机;

1 - Single user mode 单用户模式,只能系统管理员进入,没有图形界面,在该模式下处理在有登录用户时不能进行更改的文件;

2 - Multiuser,without NFS 允许系统进入多用户的模式,没有图形界面,但并不支持文件共享,这种模式很少应用;

3 - Full multiuser mode 最常用的运行模式,主要用来提供真正的多用户模式,也是多数服务器的缺省模式;

4 - unused 一般不被系统使用;

5 - X11 将系统初始化为专用的X Window终端;

6 - 关闭所有运行的进程并重新启动系统(系统将不断重启).

运行级别的切换:

[[email protected] ~]# init 5

inittab文件剖析:

在inittab中,所有条目采取以下格式:  id:run-levels:action:process

id:标识符,一般为两位字母或数字

run-levels:指定运行级别,可以指定多个

action:指定运行状态

process:指定要运行的脚本/命令

=====

action常用取值:

initdefault: 指定系统缺省启动的运行级别;

sysinit: 系统启动执行process中指定的命令

wait: 执行process中指定的命令,并等其结束在运行其他命令

once: 执行process中指定的命令,不等待其结束

ctrlaltdel: 按下Ctrl+Alt+Del时执行process指定的命令

powerfail: 当出现电源错误时执行process指定的命令,不等待其结束

powerokwait: 当电源恢复时执行process指定的命令

respawn: 一旦process指定的命令终止,便重新运行该命令

时间: 2024-10-25 17:44:10

[Linux学习笔记] Linux系统引导流程(一)的相关文章

Linux学习笔记:系统启动引导过程

Linux系统启动引导过程 最近发现自己在只是掌握上有几个比较硬的伤: 一.知识体系碎片,比如Linux,这学点那学点,结果没有成体系,串不起来: 二.记忆时间短暂,很多的内容学了就忘,最后的结果是遇见一个知识点就能想起来自己的确学过,但是现在记不起来了. 三.理解程度浅显,比如说今天要整理关于Linux引导的内容,之前大体是知道的,不能称之为理解,我认为在学着一个知识点的时候至少要能系统有条理地讲出来,而不是有个模模糊糊的大体认识. 个别名词解释 1.BIOS(Basic Input Outp

Linux学习笔记11_系统操作、优化相关命令复习

关机 poweroff         //直接关机 shutdown        //系统1分钟后关闭(poweroff) shutdown [NUM]     //系统在参数设定的分钟数后关闭(poweroff) shutdown -H            //halt(系统关闭,主板未断电) shutdown -h now    //先halt再poweroff shutdown -r      //重启(reboot) shutdown -k     //只会发出关机提示信息,并不会

Linux学习笔记(系统日常管理-2)

Linux抓包工具 tcpdump –nn  –i 网卡名 host 主机ip  port  端口 -wfilename:把抓到的内容抓放到一个文件里面 可以通过strings看到文件里面的东西 -c数字:指定抓包的个数 -s0:可以抓取全部的包 tshark:也可以抓包 wireshark在linux下也可以安装 yum install  -y  wireshark 抓包分析http请求: tshark  -n  -t  a  -R  http.request  -T  fields -e "

Linux学习笔记之内核启动流程与模块机制

本文旨在简单的介绍一下Linux的启动流程与模块机制: Linux启动的C入口位于/Linux.2.6.22.6/init/main.c::start_kernel() 下图简要的描述了一下内核初始化的流程: 本文我们分析一下do_initcalls ()函数,他负责大部分模块的初始化(比如U盘驱动就是在这里被初始化的). 1 static void __init do_initcalls(void) 2 { 3 initcall_t *call; 4 int count = preempt_c

linux学习笔记之系统标准:POSIX,ISO C...

一.POSIX,ISO C,Single UNIX Specification的概念. 1,POSIX:Portable Operating System Interface.可移植操作系统接口.期望获得源码级别的软件可移植性. 2,ISO C:提供C语言的标准化.提高C语言在不同操作系统的可移植性.它定义了 C语言的语法,语义和标准库. 3,Single UNIX Specification:POSIX.1标准的超集,定义了一些附加的接口,这些接口扩展了基本的POSIX.1规范的功能.相应的系

Linux学习笔记(系统日常管理-4)

scp:同步数据,可以增量拷贝(相同的就不覆盖) scp  -r a/  [[email protected]]ip:/b:把a的目录下的文件拷贝到b目录下 scp  -r /root/  10.10.10.26:/homt/champly/a/:如果出现这个 则在对方机器上安装scp:yum install-y openssh-clients: 然后再试一次命令: 结果: 远程服务器: 本地服务器: rsync:同步数据 rsync  /目录1  /目录2:同步本地目录 -a:归档模式,表示以

[Linux学习笔记] Linux系统安装

准备: <1>软件1-虚拟机: VMware WorkStation 12 Pro 下载地址: VMware WorkStation 12 Pro.exe [ 密码: l5lx ] <2>软件2-CentOS-7系统: 下载地址: CentOS-7-x86_64-DVD-1503-01.iso 下面对这两个软件包做简单的介绍: VMware简介: VMware虚拟机软件(中文名"威睿"),是全球桌面到数据中心虚拟化解决方案的领导厂商.VMware是一个"

#Linux学习笔记# Linux文件的属性以及权限说明

1. Linux文件的属性 关于Linux文件的属性的说明和设置请参考鸟叔Linux私房菜:Linux 的文件权限与目录配置 2. 目录和文件的权限意义 在Linux系统中,每个文件都有三种身份的权限配置,而每个身份都有三种权限(rwx).这三种权限对于普通的文件很好理解,如下表所示, 表格 1 普通文件的rwx权限位意义 权限 说明 r 文件内容可读 w 文件内容可修改 x 文件可执行 在Window系统中,文件是否可执行是通过文件扩展名来进行识别,例如.exe或.bat等.而在Linux系统

#Linux学习笔记# Linux文件的所有者、群组和其他人

1.关于所有者.群组和其他人 在Linux系统中,每个文件都具有User.Group和Others三种身份的权限配置.那这三种身份分别表示什么意思呢?配置这三种身份的权限有啥意义呢? (1)文件所有者(User) 由于Linux系统支持多人多任务,因此常常存在多个用户同时使用一个Linux系统的情况.那么,如何确认每个用户私密文件的访问控制呢?这就是文件所有者存在的原因. Linux系统为每个用户提供一个用户主目录,用户的主目录为/home/<username>.例如,下图的/home/lie