Linux之init.d、rc.d文件夹说明

今天是星期三,正常上班,主要研究了一些mysql的安装上面的残留问题,然后学了学consul的部署,还是有些疑问不太清楚的,等到研究清楚了再统一发出来。今天主要补充点Linux方面的知识。

Linux的几个重要文件

rc.d,init.d文件夹的说明

今天在研究mysql的安装的时候,最后一步要创建一个软连接,使得mysql服务可以自启动,代码如下:

ln -s /usr/local/mysql/bin/mysqld /etc/init.d/mysqld

这句Linux命令看着没什么问题,但是在网上搜索的时候,看到了另外一个版本,不同之处在于后面的路径是:

XXXXXXX /etc/rc.d/init.d/mysqld

看到这里,我产生了一点疑问,为什么两个文件夹不一样,却能实现一样的效果呢?之前简单研究过一些Linux开机自启动的东西,但是时间太长了,忘记了,所以又重新把这块儿捋了捋。

首先进入/etc目录下,可以看到这里有两个init相关的目录,分别是init和init.d,如下:

再看看rc相关的目录,可以发现,有11个相关的目录,如下:

不着急,一个一个分析,首先看看init相关的目录。

问题1:init目录和init.d目录有什么区别?

进入init目录观察,如下:

我们可以看到,里面都是一些配置文件,而进入init.d目录,可以看到:

里面都是各种各样的可执行文件,通过ll命令可以看到,init.d目录是rc.d/init.d目录的软连接,也就是说,这个目录和rc.d里面的init.d目录的内容保持一致。

通过将两者对比并查阅相关资料,得到如下结论:

1. /etc/init.d里的shell脚本(SysVinit工具所包含的函数库)能够响应start,stop,restart,reload命令来管理某个具体的应用。这些脚本也可被其他trigger直接激活执行,这些trigger被软连接在/etc/rcN.d/中。

2. /etc/init包含的是Upstart(Sysinit的替代版本)的配置文件,和/etc/init.d的作用几乎差不多。这样似乎/etc/init可以看作/etc/init.d的演化版本。而SysVinit脚本是和新的Upstart兼容的。这就是这两个文件目录的来历和前世今生。.d文件夹主要是为了方便和清楚的逻辑描述而命名成这样。

问题2:etc/init.d目录和etc/rc.d/init.d目录有什么区别?

其实是一样的,init.d是rc.d/init.d的一个软连接,内容都相同。

看完init.d命令,再来看看rc.d目录

问题3:rc.d目录和rc*.d目录有什么区别?

这里先看一张图,这是rc.d文件夹中的内容:

通过上面的图我们可以得到结论,rc0.d,rc1.d等等一系列的文件夹,都在rc.d文件夹里面,而rc.d文件夹外面的rc0.d文件都是软连接,连接的内容也正是rc.d文件夹里面的内容。

问题4:为什么要创建init.d和rc0.d等软连接?

其实他们都是用来放服务脚本的,当Linux启动时,会寻找这些目录中的服务脚本,并根据脚本的run level确定不同的启动级别。

  在制作服务脚本的过程中,使用了Linux的两个版本,CentOS和Ubuntu,需要在两个版本中都可以开机启动服务。但Ubuntu没有 /etc/rc.d/init.d这个目录,所以,为了保持同一种服务在CentOS和Ubuntu使用的统一性,将服务脚本(注:服务脚本在两个不同版本中是不同的)都放在 /etc/init.d 目录下,最终达到的效果是相同的。

  需要说明的是:在CentOS和Ubuntu两个版本中,除了服务脚本放置的目录是相同的,服务脚本的编写及服务配置都是不同的。比如CentOS使用Chkconfig进行配置,而Ubuntu使用sysv-rc-conf进行配置。

问题5:init.d和rc.d等文件夹的作用?

“/etc/rc.d/init.d/目录下的脚本就类似与windows中的注册表,在系统启动的时候某些指定脚本将被执行。“首先通过这句话,让大家多着写文件夹有一个直观的认识。

rc.d的内容如下: init.d/ :各种服务器和程序的二进制文件存放目录。这个目录存放的是一些脚本,一般是linux以rpm包安装时设定的一些服务的启动脚本。系统在安装时装了好多rpm包,这里面就有很多对应的脚本。执行这些脚本可以用来启动,停止,重启这些服务。 rc*.d/: 各个启动级别的执行程序连接目录。里头的东西都是指向init.d/的一些软连接。如下图:

还有三个脚本:rc.sysinit, rc, rc.local

这些脚本都是在程序启动的时候运行的,具体启动时, redhat的启动方式和执行次序是: 1.加载内核 2.执行init程序 3./etc/rc.d/rc.sysinit # 由init执行的第一个脚本 4./etc/rc.d/rc $RUNLEVEL # $RUNLEVEL为缺省的运行模式 5./etc/rc.d/rc.local 6./sbin/mingetty # 等待用户登录

上述第3步主要完成的工作有: 1.调入keymap以及系统字体 2.启动swapping 3.设置主机名 4.设置NIS域名 5.检查(fsck)并mount文件系统 6.打开quota 7.装载声卡模块 8.设置系统时钟等等。

上述第4步/etc/rc.d/rc则根据其参数指定的运行模式 (运行级别,下一个问题会讲到)来执行相应目录下的脚本。凡是以Kxx开头的 ,代表kill,即杀死进程,都以stop为参数来调用;凡是以Sxx开头的,代表开始进程,都以start为参数来调用。调用的顺序按xx从小到大来执行。例如,假设缺省的运行模式是3,/etc/rc.d/rc就会按上述方式调用 /etc/rc.d/rc3.d/下的脚本,值得一提的是,Redhat中的运行模式2、3、5都把/etc/rc.d/rc.local做为初始化脚本中的最后一个,该脚本是在系统初始化级别脚本运行之后再执行的,因此可以安全地在里面添加你想在系统启动之后执行的脚本。常见的情况是你可以再里面添加nfs挂载/mount脚本。此外,你也可以在里面添加一些调试用的脚本命令。所以用户可以自己在这个文件中添加一些需要在其他初始化工作之后,登录之前执行的命令。

问题6:什么是运行级别?

Init进程是系统启动之后的第一个用户进程,所以它的pid(进程编号)始终为1。init进程上来首先做的事是去读取/etc/目录下inittab文件中initdefault id值,这个值称为运行级别(run-level)。它决定了系统启动之后运行于什么级别。运行级别决定了系统启动的绝大部分行为和目的。这个级别从0到6 ,具有不同的功能。不同的运行级定义如下:   # 0 - 停机(千万别把initdefault设置为0,否则系统永远无法启动)   # 1 - 单用户模式   # 2 - 多用户,没有 NFS   # 3 - 完全多用户模式(标准的运行级)   # 4 – 系统保留的   # 5 - X11 (x window)   # 6 - 重新启动 (千万不要把initdefault 设置为6,否则将一直在重启 )

本文分享自微信公众号 - DBA随笔(gh_acc2bbc0d447)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-09-26

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏数据库干货铺

国产数据库部署初体验

达梦数据库管理系统是达梦公司推出的具有完全自主知识产权的高性能数据库管理系统,简称DM。本次将进行DM8的开发版本的部署。

12140
来自专栏Java那些事

高频面试题:什么是B树?为啥文件索引要用B树而不用二叉查找树?

小秋:树形结构例如想 B 树,B+ 树,二叉查找树都是有序的,所以查询效率很高,可以再 O(logn) 的时间复杂度查找到目标数据。

12430
来自专栏Java后端技术栈cwnait

如何写一手快SQL

博主负责的项目主要采用阿里云数据库MySQL,最近频繁出现慢SQL告警,执行时间最长的竟然高达5分钟。导出日志后分析,主要原因竟然是没有命中索引和没有分页处理。...

7340
来自专栏小小挖掘机

推荐系统数据集大列表

今天给大家介绍一个github仓库,收集了非常多的推荐系统的数据集,非常的全面,非常的实用,做推荐系统相关的同学可以收藏一下。

33040
来自专栏寂静小站

Serverless 最佳实践之数据库的连接和查询

在第一讲云函数的生命周期中,我们已经提到了在云函数 Mount 阶段创建数据库连接带来的两方面好处:

16740
来自专栏算法与编程之美

数据库|如何解决数据库插入中文字体时显示问号

我们在进行数据库的增删改查的操作时,当我们插入英文或者数字等字符串的时候能够正常显示,但的当我们插入中文字体的时候我们就会在我们的表中发现显示的是一连串的问号,...

8720
来自专栏aoho求索

​深入了解分布式事务组件 Seata (一)

分布式事务的问题,在微服务架构中一直是难题。单体应用实现本地事务即可,到了分布式环境,情况就变得复杂。一个请求可能涉及多个服务,上下游存在依赖关系,其中的一环失...

12930
来自专栏木木玲

「大型网站架构设计」—— 前言

根据大型网站的特点,该架构能够解决大多数的技术问题。下面我们将这个架构图进行简单的分解。

10530
来自专栏腾讯数据库技术

江湖急诏令:腾讯数据库王者挑战赛赏金万两募英豪!

导语 | 由腾讯云、腾讯云+社区、云+创业主办的腾讯数据库王者挑战赛开始啦!只需要花几分钟参加比赛免费将☟☟抱回家! MacBook/iPhone 11/Ai...

9720
来自专栏Linux知识积累

HTTP缓存和浏览器的本地存储

http请求做为影响前端性能极为重要的一环,因为请求受网络影响很大,如果网络很慢的情况下,页面很可能会空白很久。对于首次进入网站的用户可能要通过优化接口性能和接...

9720

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励