资讯专栏INFORMATION COLUMN

细说 linux 开机及服务启动

VEIGHTZ / 1889人阅读

摘要:原文细说开机及服务启动后续如果变动,在原文更新。内核调用进程可以看到,此进程的为,最重要的作用就是准备软件执行环境,如系统主机名网络设置语言文件系统格式等,以及其他服务启动。当然如果用户自己编写的程序想以系统服务模式启动,也可以放到里面。

原文:细说 linux 开机及服务启动 后续如果变动,在原文更新。

电源接通。

这个没得说。

加载 BIOS,自检,并取得启动设备
BIOS(Basic Input/Output System的缩写、中文:基本输入输出系统),在IBM
PC兼容系统上,是一种业界标准的固件接口。[1]。BIOS这个字眼是在1975年第一次由CP/M操作系统中出现。BIOS是个人电脑启动时加载的第一个软件。

BIOS用于电脑开机时运行系统各部分的的自我检测(Power On Self
Test),并加载引导程序(IPL)或存储在主存的操作系统。此外,BIOS还向操作系统提供一些系统参数。系统硬件的变化是由BIOS隐藏,程序使用BIOS功能而不是直接控制硬件。现代操作系统会忽略BIOS提供的抽象层并直接控制硬件组件。

上面的内容取自维基百科,BIOS(Basic Input Output System) 是一个软件,这个软件已经成为业界标准。一般运行在主板中,通电后会首先启动这个软件,根据设置(主要保存在 COMS 中) 取得各种硬件信息,并进行自我检测,并读取启动设备(即系统所在设备,一般为磁盘,U盘也可以)

读取并执行第一个启动设备内的装载程序

读取到启动设备之后就需要启动引导装载程序(BootLoader,因为各个操作系统的内核文件及格式不一样,所以需要一个装载程序来处理各类操作系统的装载,gurp,spfdisk等)来加载操作系统和内核文件。而所有的操作系统的 BootLoader 都放在启动设备(磁盘)的第一个扇区内,也就是 MBR(Master Boot Record,主引导分区),BOIS 通过 INT13 中断功能即可读取到。

通过 BootLoader 读取到的内核文件,加载驱动程序

读取到内核文件(一般在 /boot 下,如图所示)之后,linux 会将内核文件加压到内存中,利用内核功能,测试并驱动各种硬件(储存设备,cpu,网卡,声卡)。此时,操作系统以自己的需求重新检测了硬件,开始接管 BIOS。

内核调用 init(/sbin/init) 进程


可以看到,此进程的 pid 为1,init 最重要的作用就是准备软件执行环境,如:系统主机名、网络设置、语言、文件系统格式等,以及其他服务启动。所有的操作都会通过 init 的默认配置文件 /etc/inittab(部分操作系统不使用该文件,如 ubuntu) 来规划。并且 /etc/inittab (部分操作系统将各项配置分开) 可以设置 run level(执行级别)。

部分操作系统(centos7/ubuntu)将 init 换为 systemd ,其功能大致一样,但是做了许多优化和修改。

执行级别0:系统停机状态,系统默认执行级别不能设为0,否则不能正常启动
执行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登陆
执行级别2:多用户状态(没有NFS服务)
执行级别3:完全的多用户状态(有NFS),登陆后进入控制台命令行模式,一般 vps 及云服务器都运行在这个级别
执行级别4:系统未使用,保留
执行级别5:X11控制台,登陆后进入图形GUI模式,一般桌面版系统都运行在这个级别
执行级别6:系统正常关闭并重启,默认执行级别不能设为6,否则不能正常启动

run level是什么?就是通过设置 run level 来规定系统使用不同的服务启动。比如设置 run level 为3,系统将会启动命令行模式。runlevel命令可以查看当前的运行级别。init 命令可以切换当前系统的模式,比如 init 0就会关机,init 6会重启。修改配置文件 /etc/inittab 可以设置默认执行级别,下次启动后直接以某种执行级别启动,但是切记不能设置0和6。

init进程处理系统初始化
此时,操作系统中只有 init 进程,其 pid 为1,后续所有进程都是通过 init 启动,所以所有进程都是init的子进程。init 会先设置系统的基础环境,主要利用 /etc/rc.d/rc.sysinit 这个脚本来进行系统初始化的各项操作。比如设置时间,磁盘,文件系统,字体等等
启动系统服务(/etc/rc.d/rc)

系统初始化之后,整个操作系统核心功能已经正常了,但是为了用户正常使用,还要启动一些服务,这时候就要根据执行级别来执行对应的脚本来开启服务器。


一般在 /etc/rc.d 目录下面会有各个级别的配置,而 /etc/rc*.d/ 下面就是脚本的映射

用户自定义开机启动程序(/etc/rc.d/rc.local)

启动完各项服务之后,意味着整个系统的功能都可以正常使用了,用户如果有其他操作想完成的话,就可以创建脚本,或者编写命令,放在 /etc/rc.d/rc.local 中执行,这样开机启动之后就会执行这个脚本或命令。为什么不是直接放在启动级别中目录下,然后修改启动脚本呢?第一是因为服务没启动完之前,某些功能或命令是无法使用的。第二是麻烦。当然如果用户自己编写的程序想以系统服务模式启动,也可以放到里面。

加载终端机或桌面环境

启动各项服务之后就会加载终端或界面等待用户登录,也就是出现登录界面/登录提示。

图示

整个过程整理后,如下图所示

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/10527.html

相关文章

  • 一天一点linux(6)

    摘要:系统目录结构逻辑上所有的目录只有一个顶点根所有的目录的起点。根下面类似一个倒挂的树一样的层次结构,只有一颗树区别,每个盘符都是一棵树显示层数的目录结构也是有规律的,而且也是按照类别组织的。清空去除系统及内核版本登录前的屏幕显示。 Linux系统目录结构: 逻辑上所有的目录只有一个顶点/(根),所有的目录的起点。根下面类似一个倒挂的树一样的层次结构,只有一颗树(区别window,每个盘符...

    lijinke666 评论0 收藏0
  • 一天一点linux(6)

    摘要:系统目录结构逻辑上所有的目录只有一个顶点根所有的目录的起点。根下面类似一个倒挂的树一样的层次结构,只有一颗树区别,每个盘符都是一棵树显示层数的目录结构也是有规律的,而且也是按照类别组织的。清空去除系统及内核版本登录前的屏幕显示。 Linux系统目录结构: 逻辑上所有的目录只有一个顶点/(根),所有的目录的起点。根下面类似一个倒挂的树一样的层次结构,只有一颗树(区别window,每个盘符...

    isaced 评论0 收藏0
  • Linux运维:系统服务管理

    摘要:环境命令主要用来更新启动或停止和查询系统服务的运行级信息。删除所指定的系统服务,不再由指令管理,并同时在系统启动的叙述文内删除相关数据。等级代号指定读系统服务要在哪一个执行等级中开启或关毕。该命令可用于查看系统状态和管理系统及服务。 环境:CentOS Linux release 7.5.1804 (Core) chkconfig chkconfig命令主要用来更新(启动或停止)和查询...

    yintaolaowanzi 评论0 收藏0
  • 搭建Linux工作环境之VirtualBox

    摘要:序最近需要搭建多虚拟机模拟集群来运行平台我又重新翻开了之前的使用笔记重新整理后发了上来搭建虚拟机主要使用和两个软件通常情况如果建立服务器环境的虚拟机我使用否则使用考虑到任务主要是运行平台并不需要桌面环境要尽可能节省资源又考虑到的开源免费跨平 showImg(https://segmentfault.com/img/bVxR0K); live with scope 序 最近需要搭建多虚拟...

    yexiaobai 评论0 收藏0
  • Centos7大管家systemctl

    摘要:系统启动和服务器守护进程管理器,负责在系统启动或运行时,激活系统资源,服务器进程和其他进程,根据管理,字母是守护进程的缩写,这个名字的含义就是它要守护整个系统。该命令可用于查看系统状态和管理系统及服务。 博文参考 http://www.178linux.com/48343 http://www.178linux.com/48674 http://www.178linux.com/485...

    TerryCai 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<