Linux学习笔记(3)-Linux引导流程

Linux引导流程如下所示:

固件(firmware)的加电自检

读取MBR中的BootLoader(Grub)

载入内核(Kernel)

启动init进程

读取inittab

判定默认运行级别initdefault

执行rc.sysinit

执行rc

启动对应运行级别的文件

启动完成



固件的加电自检


固件:一个介于软件和硬件之间的东西,比如CMOS/BIOS。你不能称之为软件,因为它固化在主板上,但也不能称之为硬件,因为它是一段软件代码。可以说是一个固化在硬件上的代码。


固件的加电自检只是从物理层面检测硬件是否正常,如果正常,则进行后续流程,读取bootloader



硬件时钟与软件时钟的同步


一些软件可能因为时钟不同步而产生error

查看软件时钟的命令:date

查看硬件时钟的命令:hwclock

这两个时间应该是一样的。

如何同步?

硬件时钟复制到软件时钟:hwclock --hctosys

软件时钟复制到硬件时钟:hwclock --systohc

设置时钟(如果硬件时钟和软件时钟都不对)

设置软件时钟:date [MMDDhhmm[[CC]YY][.ss]] 

例如:date 010511212015.12

设置软件时钟为2015年1月5号11点21分15秒

设置硬件时钟:hwclock --set --date="1/25/05 16:45:05"



MBR-主引导记录


MBR(Master boot record)主引导记录

MBR位于0柱面0磁头1扇区

固件在完成自检之后,就会读取硬盘中的MBR中的bootloader。

关于MBR中的bootloader,

Linux中广泛应用的bootloader为GRUB

(windows中使用的是ntldr(NT loader))

GRUB最重要的作用是载入系统内核



内核


Linux内核的版本号:如2.6.18

2表示主版本号

6表示次版本号-如果为奇数,则表示为测试版,如果为偶数,则为正式版

18表示末版本号


内核是单独的一个文件,名称如:vmlinuz-2.6.18-194.el5

并且是一个可执行文件

通常放在 /usr/src/linux下


内核只做两件事情:驱动硬件,启动init进程



init进程


init进程是系统启动的第一个进程,它的PID恒为1

init将会读取配置文件/etc/inittab,完成后续配置

init的ppid为0,即init的父进程为内核调度器(Kernel scheduler),它的PID为0

内核调度器负责进程间的切换和CPU时间的分配

父进程终止,子进程也会终止

如果父进程结束,子进程还在,则称这个子进程为孤儿进程,如果Linux发现了孤儿进程,则会将孤儿进程的父进程指定为init

如果子进程结束,父进程不知道,则称这个子进程为僵尸进程。



运行级别:


0 - halt  关机

1 - single user mode 单用户模式,只允许root登陆,没有图形界面,类似Windows的安全模式

2 - Multiuser

3 - Full multiuser mode 字符界面的多用户模式,2和3基本相同,是大多数服务器使用的模式

4 - unused 未使用,用户可以自定义

5 - X11 X是Xwindow的缩写,为图形化的多用户模式

6 - reboot 如果设置为此级别,会导致系统不断重启

查看当前运行级别:runlevel

设置系统运行界别:telinit和init

init [0123456Ss]或者telinit [0123456Ss]

S和s表示single


inittab文件剖析


inittab文件中有比较多的注释,如果想要去掉注释,可以用一下命令

grep -v "^#" /etc/inittab | more


inittab每一行都采用如下格式:

id:runlevel:action:process

其中:

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

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

action:指定运行状态

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


栗子:

id:5:initdefault:

initdefault:指定系统默认启动的运行级别

所以,整行的含义就是指定系统默认的运行级别为5


si::sysinit:/etc/rc.d/rc.sysinit

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

/etc/rc.d/rc.sysinit完成了系统环境变量设置等基本操作


10:0:wait:/etc/rc.d/rc 0

11:0:wait:/etc/rc.d/rc 1

...

判断默认运行级别,调用rc脚本,执行相应运行级别目录中的服务程序,完成相应运行级别的初始化设置

如果当前运行级别为3,则会执行/etc/rc.d/rc3.d目录中的文件。

上述目录中的文件格式大多类似于:

S12syslog

S表示start,开头可能是K(kill)

即在这个运行级别启动所有S开头的,终止所有K开头的

数字12表示启动顺序,较小的先启动

syslog为脚本名称


其他常用的action

wait:执行process中指定的命令,等到命令执行完成之后才能运行其他命令

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

ctrlaltdel:重启


快捷键:

ctrl+alt+F1-F6:启动终端,默认总共有六个终端,在终端界面按下ctrl + alt + F7会回到图形界面

对应与inittab中的:

1:2345:respawn:/sbin/mingetty tty1

...

6:2345:respawn:/sbin/mingetty tty6

其中action:respawn表示一旦process指令的命令终止,则重新运行该命令


手动启动关闭服务


在/etc/rc.d/init.d文件夹中找到要启动的服务脚本,运行即可

以sshd服务为例

sshd start   启动sshd服务

sshd stop   终止sshd服务

sshd restart   重启sshd服务

sshd status   查看sshd的状态



设置自启动服务

启动自己写的服务

例如,自己写了一个脚本msg.script,放在/etc/rc.d/init.d/

想让它在3号运行级别启动

可以使用命令:

ln -s /etc/rc.d/init.d/msg.script /etc/rc.d/rc3.d/S100msg.script

这样就在系统引导时启动S100msg.script,从而达到目的


启动存在的服务

在rcX.d (X = 0,1,2,3,4,5,6)中把K改成S

如果不想启动,可以把开头的S改成s


查看系统当前服务的自启动状况:

chkconfig --list

如果为on,表示在此运行级别自启动,off表示不自启动

单独查看某个服务的状况

chkconfig --list sshd


指定某服务的启动状况:

chkconfig --level 2345 sshd off

表示sshd服务在运行级别2345不会自启动


ntsysv --level 3

设置某运行级别的启动服务



GRUB

grub的配置文件默认为:

/boot/grub/grub.conf

还有一个软链接:

/etc/grub.conf


grub.conf文件解析:

default=0

默认启动第一个系统(如果为双系统,可能有第二个系统)

timeout=5

定义选择启动系统等待的时间

splashimage=(hd0,0)/grub/splash.xpm.gz

定义启动的背景图片

其中(hd0,0),hd表示硬盘,hd0表示第一个硬盘,第二个0表示这个硬盘的第一个分区

hiddenmenu

隐藏菜单

title定义菜单项的名称,如:

title CentOS

root指定/boot所在的位置

kernel定义了内核所在的位置

initrd指定镜像所在的位置


grub命令

在grub界面

e:编辑当前的启动菜单项

c:进入GRUB 的命令行方式

b:启动当前的菜单项

d:删除当前行

Esc:返回GRUB启动菜单界面,取消所作的任何修改



应用:


查看引导期间的错误信息

dmesg | grep eth0

查看网卡eth0在引导期间的错误信息

dmesg | grep sda

查看硬盘sda在引导期间的错误信息


查看日志文件

linux所有日志文件都放在/var/log中

grep sshd /var/log/messages

查看sshd在messages中的信息


root密码忘记怎么办?

进入单用户模式重新设置密码

具体来说:

开机进入GRUB界面,按下e进入编辑行模式,选中kernel行,再次按下e,在新的界面的最后一行输入1或者s,即可以运行级别1启动(单用户模式)

进入单用户模式之后即可修改


设置grub密码

由于使用上述方式,任何能够接近装有Linux操作系统机器的人都可以修改root密码,从而得到机器中的资料,并修改机器配置,所以,有时需要给grub设置密码

有两种方式:

1,使用GRUB自带的grub-md5-crypt命令

# grub-md5-crypt

Password:

XXXXX(这是一个经过加密的秘文)

2,在GRUB交互命令行界面中使用md5crypt命令

#grub

grub>md5crypt

Password:

XXXXX(这是一个经过加密的秘文)


将你得到的秘文复制下来

打开grub.conf文件

在title的上方(hiddenmenu下面)加入一行:

password --md5 XXX(复制下来的经过加密的秘文)

保存,这样grub密码设置完毕。



GRUB修复


如果开机之后进入grub界面但是没有菜单,只有一个grub>提示符,解决方法如下:

如果没有正常进入grub命令行,可以在grub界面按下c。

在grub命令行中输入:

grub>cat /boot/grub/grub.conf     (查看grub.conf文件,可以找错。。。)

之后:

grub>root (hd0,0)

grub>kernel (hd0,0)/vmlinuz-2.4.18-14 ro root=LABEL=/

grub>initrd (hd0,0)/initrd-2.4.18-14.img

grub>boot



总结一下:


Linux引导流程如下所示:

固件(firmware)的加电自检

读取MBR中的BootLoader(Grub)

载入内核(Kernel)

启动init进程

读取inittab

判定默认运行级别initdefault

执行rc.sysinit

执行rc

启动对应运行级别的文件

启动完成







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值