linux 学习笔记-系统的初始化和服务-详细版

我们运行程序只需要点击应用程序的图标就可以了,但在这之前,我们必须启动我们的系统。在一切之前,我们必须有某些程序去引导我们系统的内核,这些程序就是内核引导程序了,例如LILO、GRUB、U-Boot、RedBoot。而这些引导程序同样需要被其他程序加载和运行,这样说下去,何处才是尽头啊?想必大家可以想到的----硬件!这么长的过程复杂、崎岖!正所谓万事开头难,但不怕,我们来一起走过去吧!

CPU自身初始化-->POST加电自检-->BIOS(Boot Sequence)-->加载对应引导上的MBR(bootloader)-->主引导设置加载其BootLoader-->Kernel初始化-->initrd—>/etc/init进程加载/etc/inittab

在BIOS开始工作之前的硬件工作不在我们的讨论范围之内

启动第一步--加载BIOS
打开计算机电源,计算机会首先加载BIOS信息,BIOS中包含了CPU的相关信息、设备启动顺序信息、硬盘信息、内存信息、时钟信息、PnP特性等等。在此之后,计算机就知道去读取哪个硬件设备了。

启动第二步--读取MBR
众所周知,硬盘上第0磁道第一个扇区被称为MBR,也就是Master Boot Record,即主引导记录,它的大小是512字节,里面却放了预启动信息、分区表信息。
找到BIOS所指定的硬盘的MBR后,就会将其复制到0×7c00地址所在的物理内存中。其实被复制到物理内存的内容就是Boot Loader,而具体到你的电脑,那就是lilo或者grub了。

启动第三步--Boot Loader
Boot Loader 就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核做好一切准备。
Boot Loader有若干种,其中Grub、Lilo和spfdisk是常见的Loader。
我们以Grub为例来讲解吧,毕竟用lilo和spfdisk的人并不多。
系统读取内存中的grub配置信息(一般为menu.lst或grub.lst),并依照此配置信息来启动不同的操作系统。

启动第四步--加载内核
根据grub设定的内核映像所在路径,系统读取内存映像,并进行解压缩操作。此时,屏幕一般会输出“Uncompressing Linux”的提示。当解压缩内核完成后,屏幕输出“OK, booting the kernel”。
系统将解压后的内核放置在内存之中,并调用start_kernel()函数来启动一系列的初始化函数并初始化各种设备,完成Linux核心环境的建立。至此,Linux内核已经建立起来了,基于Linux的程序应该可以正常运行了。

启动第五步--用户层init依据inittab文件来设定运行等级
内核被加载后,第一个运行的程序便是/sbin/init,该文件会读取/etc/inittab文件,并依据此文件来进行初始化工作。
其实/etc/inittab文件最主要的作用就是设定Linux的运行等级,其设定形式是“:id:5:initdefault:”,这就表明Linux需要运行在等级5上。Linux的运行等级设定如下:
0:关机
1:单用户模式
2:无网络支持的多用户模式
3:有网络支持的多用户模式
4:保留,未使用
5:有网络支持有X-Window支持的多用户模式
6:重新引导系统,即重启
关于/etc/inittab文件的学问,其实还有很多

启动第六步--init进程执行rc.sysinit
在设定了运行等级后,Linux系统执行的第一个用户层文件就是/etc/rc.d/rc.sysinit脚本程序,它做的工作非常多,包括设定PATH、设定网络配置(/etc/sysconfig/network)、启动swap分区、设定/proc等等。如果你有兴趣,可以到/etc/rc.d中查看一下rc.sysinit文件,里面的脚本够你看几天的

启动第七步--启动内核模块
具体是依据/etc/modules.conf文件或/etc/modules.d目录下的文件来装载内核模块。

启动第八步--执行不同运行级别的脚本程序
根据运行级别的不同,系统会运行rc0.d到rc6.d中的相应的脚本程序,来完成相应的初始化工作和启动相应的服务。

启动第九步--执行/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留给用户进行个性化的地方。你可以把你想设置和启动的东西放到这里。

启动第十步--执行/bin/login程序,进入登录状态
此时,系统已经进入到了等待用户输入username和password的时候了,你已经可以用自己的帐号登入系统了。:)
===

时间: 2024-12-17 07:08:17

linux 学习笔记-系统的初始化和服务-详细版的相关文章

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

crontab:任务计划 -e:创建并编辑crontab配置文件,编辑结束时,文件被自动安装 -l:在标准输入设备上显示crontab配置文件的内容 -r:删除crontab配置文件 五个字段分别表示:分.时.日.月.周 eg: 每天凌晨1点20分清空/var/log/champly.log日志 20  1 *  *  * echo  "0"  > /var/log/champly.log 每隔8小时执行-- 0        */8  * *  *  -- anacron:和c

linux学习笔记-rsync+crond定时备份服务

定时备份数据方案 第1章 备份要求 公司里有一台Web服务器,里面的数据很重要,但是如果硬盘坏了,数据就会丢失,现在领导要求你把数据在其他机器上做一个周期性定时备份.要求如下: 每天晚上00点整在Web服务器A上打包备份系统配置文件.网站程序目录及访问日志,并通过rsync命令推送到服务器B上备份保留(备份思路可以是先在本地按日期打包,然后再推送到备份服务器B上). 具体要求如下: 1)web服务器A和备份服务器B的备份目录必须都为/backup. 2)要备份的系统配置文件包括但不限于: a. 

Linux学习笔记<二十九>——http服务

基础概念: HTTP:Hyper Text Transfer Protocol 超文本传输协议 versions: HTTP/0.9:只接收GET一种请求方法,只支持纯文本 HTTP/1.0:支持PUT.POST.DELETE和HEAD,支持MINE HTTP/1.1:在HTTP/1.0的基础上,增加了缓存功能,支持长连接,支持管道方式同时                  发送多个请求 HTTP请求方法:获取资源的方法 HTTP/0.9:GET HTTP/1.0:PUT(修改服务器上的内容),

Linux学习笔记<二十五>——openssh服务

ssh:Secure SHell ssh特点: 基于TCP22号端口: 密文认证: 密文传输数据 openssh是ssh的开源实现,支持ssh v1和ssh v2 但ssh v1无法解决中间层攻击,建议不要使用 客户端: Linux:ssh Windows:putty,SecureCRT,SSHSecureShellClient,Xmanager 服务器端: Linux:sshd openssh相关命令 1.ssh -X:enable X11 forwarding -Y:enable trust

Linux学习笔记<二十五>——openssl服务

openssl服务:SSL的开源实现,官方站点 www.openssl.org 组成: libcrypto:通用加密库 libssl:TLS/SSL的实现库 基于会话的,实现了身份认证,数据机密性和会话完整性的TLS/SSL库 openssl:多用途命令工具 可以实现私有证书颁发机构 openssl常用子命令: openssl version:查看openssl的版本 [[email protected] named]# openssl version OpenSSL 0.9.8e-fips-r

linux学习笔记-工程师技术:HTTP服务基础(Web服务基本搭建)、网页内容访问、安全Web服务、动态网站的部署

两台虚拟机,均要检测 1.IP地址     ifconfig 2.是否可以解析,nslookup server0.example.com 3.Yum是否可用   yum repolist 4.防火墙默认区域修改为trusted ------------------------------------------------------------------------------------------- HTTP服务基础 Web通信基本概念 基于 B/S (Browser/Server)架构

linux网络编程学习笔记之六 -----I/O多路复用服务端

多进程和多线程的目的是在于最大限度地利用CPU资源,当某个进程不需要占用太多CPU资源,而是需要I/O资源时,可以采用I/O多路复用,基本思路是让内核把进程挂起,直到有I/O事件发生时,再把控制返回给程序.这种事件驱动模型的高效之处在于,省去了进程和线程上下文切换的开销.整个程序运行在单一的进程上下文中,所有的逻辑流共享整个进程的地址空间.缺点是,编码复杂,而且随着每个逻辑流并发粒度的减小,编码复杂度会继续上升. I/O多路复用典型应用场合(摘自UNP6.1) select的模型就是这样一个实现

马哥Linux学习笔记之五——邮件服务

1.SMTP只负责将邮件发送到服务器,其他的,像身份认证检测邮件,都不能完成.(25/tcp) ESMTP:Extended SMTP POP3:Post Office Protocol IMAP4:Internet Mail Access Protocol 2.Open Relay:开放式中继 就是人家的邮件从这个邮件服务器过,你都帮忙转发,这样就会成为产生垃圾邮件的根源.所以都要关闭Open Relay 3.SASL,Simple Authintication Secure Layer,简单

Linux学习笔记——例说makefile 增加系统共享库

0.前言 从学习C语言开始就慢慢开始接触makefile,查阅了很多的makefile的资料但总感觉没有真正掌握makefile,如果自己动手写一个makefile总觉得非常吃力.所以特意借助博客总结makefile的相关知识,通过例子说明makefile的具体用法. 例说makefile大致分为4个部分 1.只有单个C文件 2.含有多个C文件 3.需要包括头文件路径 4.增加宏定义 5.增加系统共享库 6.增加自定义共享库 7.一个实际的例子 [代码仓库]--makefile-example