Linux启动脚本执行顺序

原文地址::https://blog.csdn.net/o0Avalon0o/article/details/53526772?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task

 

1.一般内核启动后。
①先识别存储器分区,根据root=/dev/block/mtd/mmcblk0p6这样的的参数挂载文件系统
②运行文件系统中的init=/sbin/init执行启动脚本
③一般这个时候脚本中可能会有分区识别脚本,将分区再识别一次,或者重新挂载nfs(当然,直接在root=nfs,让内核去挂载网络文件系统也是可以的)

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

3.Ubuntu的RunLevel
运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动
运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登陆
运行级别2:多用户GUI
运行级别3:多用户GUI
运行级别4:多用户GUI
运行级别5:多用户GUI
运行级别6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动

4.旧式System V initialization启动流程:
①运行第一个进程/sbin/init,找到/etc/inittab;
②根据inittab首先执行/etc/rcS.d/;
③随后根据“id:5:initdefault”,设置runlevel(这里为5),并根据runlevel执行/etc/init.d/rc 5,这个命令会找到/etc/rc5.d/,运行其中的脚本,这些脚本实际是/etc/init.d/目录下脚本的软连接,可能根据传入的文件名作为参数执行相应动作,类似busybox,这些脚本以S开头的为启动的意思,以K开头的为停止。并且S/K后面的两位数数字代表了服务的启动顺序。

5.Ubuntu启动脚本执行流程:
使用upstart启动流程,并且兼容System V初始化。
①.首先,/sbin/init进程首先找到/etc/init/目录下的rc-sysinit.conf、rc.conf、、rcS.conf,rc-sysinit在startup事件发生时被启动,rc在系统runlevel变化时被启动,rcS在系统runlevel为S时启动。
②.其中rc-sysinit.conf的主要工作是检测是否存在/etc/inittab或内核命令行,若存在,则按内核命令行>/etc/inittab>默认runlevel的顺序设置系统 runlevel,不存在则忽略。
③.随后rc-sysinit.conf主动调用/etc/init.d/rcS,其作用就是调用/etc/rcS.d目录下的脚本;
④.之后rc-sysinit.conf设置系统默认runlevel(2),由于runlevel变化,rc.conf和rcS.conf服务启动,其中rc.conf最后会执行“exec /etc/init.d/rc RUNLEVEL”,从而SystemVinitialization的流程被启动,进入/etc/rc(RUNLEVEL”,从而SystemVinitialization的流程被启动,进入/etc/rc(RUNLEVEL).d/执行相应脚本,其中rc($RUNLEVEL).d文件夹中一般会有一个执行优先级最低的/etc/init.d/rc.local,里面的内容其实就是调用/etc/rc.local。
综合上述描述,系统登录之前的脚本主要有:/etc/rcS.d -> /etc/rc2.d/ -> /etc/rc.local,这些目录下的脚本一般以数字开头,数字越小越先被执行。

6.Ubuntu各个时间段执行的脚本:
①.启动过程最后会调用/etc/rc.local;
②.用户登录先执行全局登录脚本/etc/enviroment->/etc/profile,然后在用户目录按顺序查找三个特殊文件中的一个:.bash_profile、.bash_login、.profile;但只执行先找到的一个;
③.退出登录时执行用户目录的.bash_logout;
————————————————
版权声明:本文为CSDN博主「太陽金貨」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/o0Avalon0o/article/details/53526772

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux系统中,systemctl是一个与服务相关的命令行工具。它可以管理系统级别的服务,包括启动、停止、重启、查看状态等操作。而服务启动脚本则是一个用来定义服务启动流程的脚本文件。 systemctl使用服务启动脚本来初始化、启动服务,并实现常规的任务管理和控制。这些任务包括定义服务的名称、描述、监听端口、指定运行进程等。 服务启动脚本一般位于系统特定的目录中,如/etc/systemd/system/目录下。当管理员使用systemctl命令开始管理服务时,它会在这个目录下搜索同名的服务启动脚本。如果找到匹配的脚本,systemctl将调用它来启动和管理服务。 服务启动脚本具有一定的规范结构,其中包含了服务的所有信息。它包括以下几个关键信息: 1.服务名称:用来标识服务的名称,通常与服务启动脚本的文件名一致。 2.描述:对服务进行简单介绍。 3.依赖性:定义服务启动的依赖关系,确保相关服务在需要时按正确的顺序启动。 4.运行参数:定义服务运行的参数,如监听端口、运行用户等。 5.启动脚本:定义启动服务时需要执行的命令。 总的来说,服务启动脚本是一种定义服务初始化、启动和管理流程的脚本。它是systemctl命令能够有效管理服务的重要组成部分。通过对服务启动脚本的定义和管理,Linux系统可以更方便地管理各种系统级别的服务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值