sysinit文件写法详解

sysinit文件是linux初始化文件系统时执行的第一个脚本文件。它主要做在各个运行级别中进行初始化工作,包括: 启动交换分区;检查磁盘;设置主机名;检查并挂载文件系统;加载并初始化硬件模块.

具体执行的脚本由inittab文件中的action为sysinit的一行确定。如LFS中为如下一行:
si::sysinit:/etc/rc.d/init.d/rc sysinit
这代表init初始化程序执行的第一个脚本为/etc/rc.d/init.d/rc,并传入sysinit参数。一般linux传入的参数为一数字,代表运行级别。rc会用参数合成/etc/init.d/rcsysinit.d目录,并执行其中的文件完成服务初始化。

下面是/etc/init.d/rcsysinit.d目录中的文件。
│ └── rcsysinit.d
│ ├── S00mountkernfs -> ../init.d/mountkernfs
│ ├── S02consolelog -> ../init.d/consolelog
│ ├── S05modules -> ../init.d/modules
│ ├── S10udev -> ../init.d/udev
│ ├── S20swap -> ../init.d/swap
│ ├── S30checkfs -> ../init.d/checkfs
│ ├── S40mountfs -> ../init.d/mountfs
│ ├── S45cleanfs -> ../init.d/cleanfs
│ ├── S50udev_retry -> ../init.d/udev_retry
│ ├── S70console -> ../init.d/console
│ ├── S80localnet -> ../init.d/localnet
│ └── S90sysctl -> ../init.d/sysctl

下面我们来看一下LFS中rc文件的写法。

 #!/bin/sh
#------------------------------------
#sysconfig/rc只定义了几个变量,内容如下:
#rc_base=/etc/rc.d
#rc_functions=${rc_base}/init.d/functions
#network_devices=/etc/sysconfig/network-devices
#----------------------------------------------
. /etc/sysconfig/rc
#由上面知rc_function为 "/etc/rc.d/init.d/functions"
#文件只设置了一变量,如PATH="/bin:/usr/bin:/sbin:/usr/sbin".还有一些函数
. ${rc_functions} # This sets a few default terminal options.
stty sane # These signals will not cause our script to exit
trap "" INT QUIT TSTP
#如果 ${}不为空,runlevel 为 ${}。${}是脚本的第一个参数
[ "${1}" != "" ] && runlevel=${} #如果runlevel为空则退出.${}为脚本名字
if [ "${runlevel}" = "" ]; then
echo "Usage: ${0} " >&
exit
fi
#当运行级变化时,PREVLEVEL存储当前runlevel变量.
previous=${PREVLEVEL}
#if previous is null, previous is setted N.
#when boot system,the previous is null.
[ "${previous}" = "" ] && previous=N
#对应runlevel的目录不存在则退出。
#boot_mesg为一个向屏幕输出字符串的函数
if [ ! -d ${rc_base}/rc${runlevel}.d ]; then
boot_mesg "${rc_base}/rc${runlevel}.d does not exist." ${WARNING}
boot_mesg_flush
exit
fi # 停止前一个运行级的所有服务,退出这一runlevel
# 当启动系统时,下面不会运行。不必细看
if [ "${previous}" != "N" ]; then
for i in $(ls -v ${rc_base}/rc${runlevel}.d/K* > /dev/null)
do
check_script_status suffix=${i#$rc_base/rc$runlevel.d/K[-][-]}
prev_start=$rc_base/rc$previous.d/S[-][-]$suffix
sysinit_start=$rc_base/rcsysinit.d/S[-][-]$suffix if [ "${runlevel}" != "" ] && [ "${runlevel}" != "" ]; then
if [ ! -f ${prev_start} ] && [ ! -f ${sysinit_start} ]; then
boot_mesg -n "WARNING:\n\n${i} can't be" ${WARNING}
boot_mesg -n " executed because it was not"
boot_mesg -n " not started in the previous"
boot_mesg -n " runlevel (${previous})."
boot_mesg "" ${NORMAL}
boot_mesg_flush
continue
fi
fi
${i} stop
error_value=${?} if [ "${error_value}" != "" ]; then
print_error_msg
fi
done
fi #开启当前runlevel的所有服务,主要是这一段要明白。
for i in $( ls -v ${rc_base}/rc${runlevel}.d/S* > /dev/null)
do if [ "${previous}" != "N" ]; then #this if is false when booting.
suffix=${i#$rc_base/rc$runlevel.d/S[-][-]}
stop=$rc_base/rc$runlevel.d/K[-][-]$suffix
prev_start=$rc_base/rc$previous.d/S[-][-]$suffix [ -f ${prev_start} ] && [ ! -f ${stop} ] && continue
fi check_script_status #a function judgeing the file if is a file and executable. case ${runlevel} in
|) #if runleve is 0 or 6, stop the service i.
${i} stop
;;
*)
${i} start
;;
esac
error_value=${?} if [ "${error_value}" != "" ]; then
print_error_msg
fi
done # End $rc_base/init.d/rc

linux系统初始化——sysinit文件写法详解的更多相关文章

  1. linux系统中的文件权限详解(转)

    一.在<Linux系统中如何查看文件属性>中介绍了通过ls指令来查看文件的属性,具体如下: [命令] letuknowit@ubuntu:/$ cd /tmp letuknowit@ubu ...

  2. 【Linux学习】Linux下用户组、文件权限详解

    原文地址:http://www.cnblogs.com/123-/p/4189072.html Linux下用户组.文件权限详解 用户组 在linux中的每个用户必须属于一个组,不能独立于组外.在li ...

  3. Oracle 11g客户端在Linux系统上的配置步骤详解

    Oracle 11g客户端在Linux系统上的配置步骤详解 2011-07-26 10:47 newhappy2008 CSDN博客 字号:T | T 本文我们主要介绍了Oracle 11g客户端在L ...

  4. (转)Mysql数据库之Binlog日志使用总结Linux下用户组、文件权限详解

    Linux下用户组.文件权限详解 原文:http://blog.csdn.net/sdulibh/article/details/51566772 用户组 在linux中的每个用户必须属于一个组,不能 ...

  5. Jmeter(五十三) - 从入门到精通高级篇 - 懒人教你在Linux系统中安装Jmeter(详解教程)

    1.简介 我们绝大多数使用的都是Windows操作系统,因此在Windows系统上安装JMeter已经成了家常便饭,而且安装也相对简单,但是服务器为了安全.灵活小巧,特别是前几年的勒索病毒,现在绝大多 ...

  6. 【夯实Mysql基础】MySQL在Linux系统下配置文件及日志详解

    本文地址 分享提纲: 1. 概述 2. 详解配置文件 3. 详解日志 1.概述 MySQL配置文件在Windows下叫my.ini,在MySQL的安装根目录下:在Linux下叫my.cnf,该文件位于 ...

  7. linux系统运维常用基本命令详解

      1.ls 文件属性:  -:普通文件  d:目录文件  b:块设备  c:字符设备文件  l:符号连接文件  p:命令管道  s:套接字文件  文件权限: 9位数字,每3位一组  文件硬链接次数  ...

  8. Linux 系统的用户和组详解_【all】

    1.Linux 用户和用户组详解 2.Linux 文件特殊权限详解 3.Linux 文件的读写执行权限的说明 4.Linux 架构之简述企业网站 5.Linux 环境变量设置详解 6.企业生产环境用户 ...

  9. linux系统中whereis的用法详解

    whereis命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b).man说明文件(参数-m)和源代码文件(参数-s).如果省略参数,则返回所有信息. 和find相比,whereis查找的速度非 ...

随机推荐

  1. 项目实战15.1—企业级堡垒机 jumpserver一步一步搭建

    本文收录在Linux运维企业架构实战系列 环境准备 系统:CentOS 7 IP:192.168.10.101 关闭selinux 和防火墙 # CentOS 7 $ setenforce 0 # 可 ...

  2. DDOS与DOS的区别

    0x01 在说之前,先看一些例子吧 还有众所周知的中美黑客大战,新闻我就不说了 0x02 什么是DOS DoS是Denial of Service的简称,即拒绝服务,造成DoS的攻击行为被称为DoS攻 ...

  3. L2TP用户添加和删除、搜索脚本

    #!/bin/bash #author Template . /etc/init.d/functions DATE_TIME=$(date +%F-%T) FILE_PATH='/etc/ppp/ch ...

  4. scrapy框架简介和基础使用

    概念 为了爬取网站数据而编写的一款应用框架,出名,强大.所谓的框架其实就是一个集成了相应的功能且具有很强通用性的项目模板.(高性能的异步下载,解析,持久化……) 安装 linux mac os:pip ...

  5. linux命令学习-2

    1. 对于已经在前台执行的命令,可以重新放到后台执行,首先按ctrl+z暂停已经运行的进程,然后使用jobs查看进程编号n:2. bg命令将停止的作业放到后台运行 bg %n3. kill -9 XX ...

  6. python函数调用顺序、高阶函数、嵌套函数、闭包详解

    一:函数调用顺序:其他高级语言类似,Python 不允许在函数未声明之前,对其进行引用或者调用错误示范: def foo(): print 'in the foo' bar() foo() 报错: i ...

  7. MySQL的增、删、查、改操作命令

    MySQL的增.删.查.改操作命令: 一.修改mysql数据库密码 格式:mysqladmin -u用户名 -p旧密码 password 新密码. 二.查看 查看多少个数据库:注意 后面带s #查看 ...

  8. BFS:Nightmare(可返回路径)

    解题心得: 1.point:关于可以返回路径的BFS的标记方法,并非是简单的0-1,而是可以用时间比较之后判断是否push. 2.queue创建的地点(初始化问题),在全局中创建queue在一次调用B ...

  9. [USACO]玉米实验(单调队列)

    Description 约翰决定培育新的玉米品种以提高奶牛的产奶效率.约翰所有的土地被分成 N ×N 块,其中第 r行第 c 列的玉米质量为 Ar,c.他打算找一块质量比较均匀的土地开始自己的实验.经 ...

  10. 用私有构造器或者枚举类型强化Singleton属性

    1.Singleton指仅仅被实例化一次的类.Singleton通常被用来代表那些本质上唯一的系统组件,如窗口管理器或者文件系统.使类称为Singleton会使它的客户端调试变的十分困难,因为无法给S ...