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

我们在深入学习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:用于定义启动项及其参数的

154958308.jpg

当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给内核加密码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/408877.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vim 快速入门

本文大约 5000 字, 阅读大约需要 10 分钟在 Linux 下最常使用的文本编辑器就是 vi 或者 vim 了,如果能很好掌握这个编辑器,非常有利于我们更好的在 Linux 下面进行编程开发。vim 和 viVim是从 vi 发展出来的一个文本编辑器。代码补完、编译及…

(转载)Qt中使用cout输出的方法

&#xff08;转载&#xff09;http://blog.sina.com.cn/s/blog_4f183d960100sdxf.html最近用QT写一个控制台程序&#xff0c;却不能将提示文本输出到屏幕。 cout<<"abcd"正常运行但是屏幕上却没有输出。 解决办法&#xff1a; 在qt的工程文件(.pro文件)中加入以…

Vim快速入门

本文大约 5000 字&#xff0c; 阅读大约需要 10 分钟 在 Linux 下最常使用的文本编辑器就是 vi 或者 vim 了&#xff0c;如果能很好掌握这个编辑器&#xff0c;非常有利于我们更好的在 Linux 下面进行编程开发。 vim 和 vi Vim是从 vi 发展出来的一个文本编辑器。代码补完、编…

linux内核 cpu_die,Linux内核Crash分析

结合上面的知识&#xff0c;看下当内核打印堆栈信息时&#xff0c;都打印了上面信息。下面的打印信息是工作中遇到的一种情况&#xff0c;打印了内核的堆栈信息&#xff0c;PC指针在dev_get_by_flags中&#xff0c;不能访问的内核虚地址为45685516&#xff0c;内核中一般可访问…

[GAN学习系列] 初识GAN

本文大约 3800 字&#xff0c;阅读大约需要 8 分钟 要说最近几年在深度学习领域最火的莫过于生成对抗网络&#xff0c;即 Generative Adversarial Networks(GANs)了。它是 Ian Goodfellow 在 2014 年发表的&#xff0c;也是这四年来出现的各种 GAN 的变种的开山鼻祖了&#xff…

[GAN学习系列] 初始GAN

本文大约 3800 字&#xff0c;阅读大约需要 8 分钟要说最近几年在深度学习领域最火的莫过于生成对抗网络&#xff0c;即 Generative Adversarial Networks(GANs)了。它是 Ian Goodfellow 在 2014 年发表的&#xff0c;也是这四年来出现的各种 GAN 的变种的开山鼻祖了&#xff0…

[资源分享] 吴恩达最新《机器学习训练秘籍》中文版可以免费下载了

本文大约 600 字&#xff0c; 阅读大约需要 2 分钟 吴恩达老师在上个月底宣布终于完成了他最新的书籍《Machine Learning Yearning》的最后几个章节&#xff1a; 而最近这本书也有了免费的完整中文版下载了&#xff0c;中文版的名称是《机器学习训练秘籍》&#xff0c;封面如下…

Android学习笔记44:JSON数据解析

JSON&#xff08;JavaScript Object Notation&#xff09;是一种轻量级的数据交换格式&#xff0c;采用完全独立于语言的文本格式&#xff0c;为Web应用开发提供了一种理想的数据交换格式。 本文将主要介绍在Android开发中&#xff0c;如何在服务器端创建JSON数据&#xff0c;以…

[GAN学习系列2] GAN的起源

本文大约 5000 字&#xff0c;阅读大约需要 10 分钟 这是 GAN 学习系列的第二篇文章&#xff0c;这篇文章将开始介绍 GAN 的起源之作&#xff0c;鼻祖&#xff0c;也就是 Ian Goodfellow 在 2014 年发表在 ICLR 的论文–Generative Adversarial Networks”&#xff0c;当然由于…

[资源分享] Github上八千Star的深度学习500问教程

本文大约 600 字&#xff0c;阅读大约需要 2 分钟这周要分享的一个资源是来自 Github 上的已经有八千多 Star 的一个深度学习知识总结&#xff0c;如下图所示&#xff1a;其 Github 地址为&#xff1a;https://github.com/scutan90/DeepLearning-500-questions它目前是有 16 个…

谷歌开源的 GAN 库--TFGAN

本文大约 8000 字&#xff0c;阅读大约需要 12 分钟 第一次翻译&#xff0c;限于英语水平&#xff0c;可能不少地方翻译不准确&#xff0c;请见谅&#xff01; 最近谷歌开源了一个基于 TensorFlow 的库–TFGAN&#xff0c;方便开发者快速上手 GAN 的训练&#xff0c;其 Github …