我们在深入学习linux之前呢首先要了解其的引导加载过程,这样我们就可以在判断一些在系统初始化过程的出现问题的来源,并及时做出处理。

这个过程大概分为【开机】——【BIOS】(CMOS)——【grub或者其他引导程序】——【kernel boot】(initrd文件)——【init『init回调用rc.sysinit和rc等』】——【tty】——【shell】——【登录】

首先主机有一个加电自检的过程,一般来讲这个过程是我们没有办法干预的,要是这个环节出了问题那就是硬件的问题了BIOS中包含了CPU的相关信息、设备启动顺序信息、硬盘信息、内存信息、时钟信息、PnP特性等等

通常来讲,Linux 都是从硬盘上引导的,其中主引导记录(MBR)中包含主引导加载程序。

由于MBR最先被读取一般都是存放在硬盘上第0磁道第一个扇区被称为MBR,也就是Master Boot Record,即主引导记录,它的大小是512字节,存放了预启动信息、分区表信息。系统找到BIOS所指定的硬盘的MBR后,就开始家在引导了。当 MBR 被加载到 RAM 中之后,BIOS 就会将控制权交给 MBR。就是Boot Loader那就是lilo或者grub了。

2、启动GRUB/LILO

Boot Loader 就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核做好一切准备。

Boot Loader一般用到的有Grub和Lilo。

GRUB和LILO都是引导加载程序,它们会引导操作系统。当机器引导它的操作系统时,BIOS会读取引导介质上最前面的512字节(即MBR: master boot record)。在单一的 MBR 中只能存储一个操作系统的引导记录

GRUB 与 LILO 的比较

所有引导加载程序都以类似的方式工作,满足共同的目的。不过,LILO 和 GRUB 之间有很多不同之处:

● LILO 没有交互式命令界面,而 GRUB 拥有。

● LILO 不支持网络引导,而 GRUB 支持。

● LILO 将关于可以引导的操作系统位置的信息物理上存储在 MBR 中。如果修改了 LILO 配置文件,必须将 LILO 第一阶段引导加载程序重写到 MBR。相对于 GRUB,这是一个更为危险的选择,因为错误配置的 MBR 可能会让系统无法引导。使用 GRUB,如果配置文件配置错误,则只是默认转到 GRUB 命令行界面。

我们以Grub为例来讲解。系统读取内存中的grub配置信息(一般为menu.lst),并依照此配置信息来启动不同的操作系统。 grub的引导分为两个阶段:第一阶段的引导主要是为引导第二阶段做铺垫,准确来说还有个1.5阶段作用是为了grub识别文件系统类别的

grub的存放位置:/boot/grub/grub.conf在配置文件中,可以修改启动项和一些信息

其中default:定义默认启动 项,timeout:定义默认的超时时间,splashp_w_picpath:用于定义背景图片,hiddenmenu:用于隐藏启动项,title:用于定义启动项及其参数的

当grub引导完成以后就开始加载内核 当内核映像被加载到内存后,内核阶段就开始了。 内核映像并不是一个可执行的内核,而是一个压缩过的内核映像。通常它是一个zImage(压缩映像,小于512KB)或bzImage(较大的压缩映像,大于512KB),它是自动解压缩的。

在内核 的加载过程中还需要个inintrd这个驱动加载程序,一般这个程序就像一个小linux程序主要是是为了引导真正的linux内核做铺垫的加载额外的驱动程序

然后开始执行init进程(/sbin/init)

init进程是所有进程的起点,内核在完成内核引导后,即在本线程(进程)空间内加载init程序,它的进程号为1。init进程是所有进程的发起者和控制者。因为在任何基于Unix的系统(比如Linux)中,它都是第一个运行的进程,所以init进程的编号(Process ID,PID)永远是1。如果init出现了问题,系统的其余部分也就随之而垮掉了。

init进程有两个作用:

● 扮演终结父进程的角色:所有的孤儿进程都会被init进程接管。快速执行一下ps -af 命令,可以列出许多父进程ID(Parent Process ID,PPID)为1的进程来。

● 进入某个特定的运行级别时运行相应的程序,以此对各种运行级别进行管理,这个作用由/etc/inittab文件定义的。 内核被加载后,第一个运行的程序便是/sbin/init,该文件会读取/etc/inittab文件,并依据此文件来进行初始化工作。

通过/etc/inittab文件进行初始化

etc/inittab主要定义一下内容:包括1,默认运行级别2,执行系统初始化脚本,完成系统初始化3执行指定运行级别下的每一个启动脚本4,捕获键盘序列(设定特别快捷键ctrl+alt+del功能)5设定电源故障时执行的脚本6,设定要启动的虚拟控制台/dev/tty1-67当运行级别为5时做图形初始化的脚本。

iniLinux的运行等级设定如下:

0:关机

1:单用户模式

2:无网络支持的多用户模式

3:有网络支持的多用户模式

4:保留,未使用

5:有网络支持有X-Window支持的多用户模式

6:重新引导系统,即重启

对于RedHat来说,按以下顺序执行:

a、执行/etc/rc.d/rc.sysinit(由init执行的第一个脚本)

在设定了运行等级后,Linux系统执行的第一个用户层文件就是/etc/rc.d/rc.sysinit脚本程序,它做的工作非常多,包括设定PATH、设定网络配置(/etc/sysconfig/network)、启动swap分区、设定/proc、把root文件系统输入到mtab、使用系统为装入模块做准备、查找模块的相关文件、检查文件系统,以进行必要的修复、加载所有其他文件系统、清除几个/etc文件,如/etc/mtab、/etc/fastboot和/etc/nologin、删除UUCP的lock文件、删除过时的子系统文件、删除过时的pid文件、设置系统时钟、打开交换、初始化串行端口、装入模块等等。可以到/etc/rc.d中查看一下rc.sysinit文件。

b、执行/etc/rc.d/rcX.d[KS]

首先终止K开头的服务(用来关闭一个服务),然后启动S开头的服务(用来启动一个服务);对每一个运行级别来说,在/etc/rc.d子目录中都有一个对应的下级目录。这些运行级别的下级子目录的命名方法上rcX.d, 其中X就是代表运行级别的数字。在各个运行级别的子目录中,都建立有到/etc/rc.d/init.d子目录中命令脚本程序的符号链接。链接的名称在K与S后有一个数字,表示执行顺序,数字小的先执行如K01tog-pegasus 、 S00microcode_ctl。对以K开头的脚本执行时系统会传递stop参数,而S开头的脚本系统会传递start参数。

c、执行/etc/rc.d/rc.local

Redhat中运行模式2,3,5都把/etc/rc.d/rc.local作为初始化脚本中的最后一个文件,所以用户可以自己在这个文件中添加一些需要在其他初始化工作之后,登陆之前执行的命令。

你如果打开了此文件,里面有一句话,读过之后,你就会对此命令的作用一目了然:

# This script will be executed *after* all the other init scripts.

# You can put your own initialization stuff in here if you don’t want to do the full Sys V style init stuff.

rc.local就是在一切初始化工作后,Linux留给用户进行个性化的地方。你可以把你想设置和启动的东西放到这里。

6、执行/bin/login

login程序会提示使用者需输入帐号与密码,接着编码并确认密码的正确性,若二者相合,则为使用者进行初始化环境,并将控制权交给shell,即用户登录。

linux的启动过程有个大概的认识后我们就该考虑下当出现故障时找原因了:当我们的grub损坏时我们就应该修复下使用grub命令,相当于我们windows中使用gost基本相似,

grub>boot (hd0,0)    指定boot的MBR引导分区

grub>find /      连键入两个tab键这时会显示目录下文件信息

grub>kernel  /vmlinuz-version     用于指定内核

grub>initrd   /initrd-version.img   指定initrd引导的

grub>boot    重新引导

或者使用命令直接修复

grub -install --root-directory=内核挂载点/dev/hda

内核的挂载点也是有讲究的:当我们的boot和跟目录是单独分区的话就不用写全路径,当没有单独分区时就需要写上全路径的

上面我们提到过linux也是有运行级别的,其中1级别是单用户模式我们在在忘记linux的密码时就可以进去该模式进行修改了方法:在开机运行时们进去内核启动项里输入e开始编辑选择对应的内核输入S然后按enter键确认输入b引导这时我们就可以不用输入密码登陆了,这时有人就会想这样虽然方面了但是那岂不是任何可以接触到我主机的人都可以进去该级别下修改root密码了这也太不安全了吧,不用担心我们也有安全机制的,可以给grub加密码让用户输入e修改时必须输入p后完成密码方可进去修改那岂不是很好的吗?

使用grub-md5-crypy命令使用的MD5加码后的密码 编辑/boot/grub/grub.conf

同时passwd放置的位置不同所起的作用也不同

放在title上面:password --md5给grub加密码

放在title下面:password --md5给内核加密码

linux初始化进程ppid号,linux基础(十一)--系统初始化的简谈相关推荐

  1. Linux进程ID号--Linux进程的管理与调度(三)

    进程ID概述 进程ID类型 要想了解内核如何来组织和管理进程ID,先要知道进程ID的类型: 内核中进程ID的类型用pid_type来描述,它被定义在include/linux/pid.h中 enum ...

  2. Linux的进程ID号分析

      本文中的代码摘自 Linux内核5.15.13版本.   Linux进程总是会分配一个号码用于在其命名空间中唯一地标识它们.该号码被称作进程ID号,简称PID.用fork或clone产生的每个进程 ...

  3. 给大家推荐一个优质Linux内核技术公众号-Linux阅码场

    作为一个Linux 技术公众号的作者,我觉得有义务推荐优秀的公众号,推广内容,希望对大家的学习有所帮助~ Linux阅码场是一个专注Linux内核和系统编程与调试调优技术的公众号,它的文章云集了国内众 ...

  4. linux php进程端口占用,linux如何查看端口占用情况

    在linux中可以使用lsof和netstat命令来查看端口占用情况,其中lsof语法为"lsof -i:端口号",netstat语法为"netstat -tunlp | ...

  5. linux stop进程不回收,Linux 进程中 Stop, Park, Freeze

    http://kernel.meizu.com/linux-process-stop.html 在调试内核的时候,经常会碰到几个相近的概念:进程 stop.进程 park.进程 freeze.这几个名 ...

  6. linux通过进程看端口,linux下通过进程名查看其占用端口

    linux下通过进程名查看其占用端口: 1.先查看进程pid ps -ef | grep 进程名 2.通过pid查看占用端口 netstat -nap | grep 进程pid 例:通过nginx进程 ...

  7. linux ps进程管理命令,Linux 进程管理命令之ps

    这个命令会显示某一时刻系统的进程状态. ps是通过/proc接口,让管理员查看内核进程状态信息. 为了响应一切皆文件,进程参数模拟成文件系统类型(文件),参数路径模拟成目录 /proc/# 每个进程都 ...

  8. linux下进程监控6,Linux进程监控技术—精通软件性能测试与LoadRunner最佳实战(6)...

    8.2.5  Linux操作系统进程监控技术 Linux在进程监控方面同样出色,不仅可以通过图形用户界面的管理工具,还可以用命令方式显示进程相关信息.像"Windows的任务管理器" ...

  9. linux下进程调度算法实验,Linux下进程调度算法的模拟实现.doc

    Linux下进程调度算法的模拟实现 枣 庄 学 院 信息科学与工程学院课程设计任务书 题目: Linux下进程调度算法的模拟实现 学 生1: 学 生2: 学 生3: 专 业: 计算机应用技术 课 程: ...

最新文章

  1. hdu3986 spfa + 枚举最短路上的边
  2. Ardino基础教程 14_倾斜开关
  3. R-CNN , Fast R-CNN , Faster R-CNN原理及区别
  4. idea 找不到或无法加载主类_解决IDEA中Groovy项目no Groovy library is defined的问题
  5. ElasticSearch是否有架构?
  6. solr简介——(九)
  7. 《数据结构》C++代码 堆(优先队列)
  8. Linux 命令(105)—— service 命令
  9. CDH修改PySpark默认的Python版本
  10. SQL*Plus和iSQL*Plus的区别(oracle)
  11. nvidia控制面板官方版-nvidia控制面板附安装教程
  12. i5功耗最低的cpu_探寻低电压CPU性能 i5-3330S对比测试
  13. 计算机发展对文学的影响,论计算机技术对文学接受的影响
  14. 报表开发工具ActiveReports实战应用教程——分组报表
  15. 手动挡你会开吗 八招教你开好手动挡车型
  16. FHQ-Treap 简介
  17. Linux网络配置常见问题
  18. Groovy on Grails(Java笨狗)系列---前言(二)
  19. android博客排行榜,新浪博文排行_新浪博客 新浪博客Android客户端
  20. 微软vs2012(visual Studio 2012)官方旗舰版下载地址

热门文章

  1. linux语言的说明顺序有哪些,(linux常用头文件详解.doc
  2. 12306订票助手java_12306订票助手
  3. mysql5.6.24怎么打开_mysql 5.6.24 安装配置方法图文教程
  4. 【树莓派学习笔记】四、OpenCV的安装与卸载
  5. ARM 汇编学习——编写简单的ARM汇编程序
  6. Python爬虫入门六Cookie的使用
  7. bash中时间、日期操作
  8. 我的C语言可变参数的实现
  9. Taro+react开发(36)每一个节点要一个view包裹
  10. React开发(128):ant design学习指南之input中addonBefore