1. 写在前面

Linux系统作为一个高级系统,其调度机理、调度链路非常复杂,仅仅是初启动阶段就非常复杂。如果要深究Linux系统的启动服务,需要理解Linux系统原理、文件管理、脚本链接等。但,如果是作为初学者,以“使用”为目的时,比如“期望在系统启动的时候自动执行指定程序”,则只需知道如何配置启动脚本即可。正比如,学开车,一开始并不需要知道发动机是如何工作的,会操控即可。

2. 启动脚本

2.1 文件位置

Linux启动脚本,即rcS文件。rcS文件位于系统根目录下的“/etc/init.d”下,可以查看到该文件的文件属主和文件属组都是root,只有root的权限可以修改和执行。

2.2 rcS文件格式

rcS文件本质是一个bash shell脚本,因此遵循bash脚本的语法规则。bash shell也是一门复杂的语言,深入研究可以独立出来研究,但我们知道基本的规则即可满足我们应用。

[1]文件首行必须为“#!  /bin/sh”。

[2] 注释一行用“#”。

[3]基本的赋值语句,如打印字符串。

[4] 打印特殊符号需加“\”。

[5] 逻辑语句、循环语句等。

2.3 实现功能

启动脚本可以做很多事情,只要我们需要初始化时配置或者执行的功能,几乎都满足,总结几点下来及常用的有如下几种。

[1] 启动某个进程程序,最常用的,如启动串口收发进程。

[2] 加载驱动模块(.ko文件);如驱动编译成模块时,可以在这里增加加载(insmod/modprobe)驱动模块命令。

[3] 启动其他模块启动脚本,如网络服务。

[4] 配置功能,该项功能比较实用,实现期望系统起来后进行某些配置,如:配置环境变量、创建临时文件(夹)、挂在文件到指定文件夹、设置默认IP参数,以及配置系统主机名称等基础配置。

[5]其他,如增加打印功能,方便在调试终端(串口)查看初始化过程,或者两者执行间进行延时(sleep)等。

3.一个简单的rcS文件示例分析

#!/bin/sh

PATH=/sbin:/bin:/usr/sbin:/usr/bin

runlevel=S

prevlevel=N

umask 022

export PATH runlevel prevlevel

mount -a

//将mdev设为热插拔的监视程序,可以形象的理解为将mdev写入hotplug中

echo /sbin/mdev > /proc/sys/kernel/hotplug

mdev -s //扫描并创建所有设备

/bin/hostname -F /etc/sysconfig/HOSTNAME

ifconfig eth0 192.168.1.10

1.PATH=xxx

(1)首先从shell脚本的语法角度分析,这一行定义了一个变量PATH,值等于后面的字符串

(2)后面用export导出了这个PATH,那么PATH就变成了一个环境变量。

(3)PATH这个环境变量是linux系统内部定义的一个环境变量,含义是操作系统去执行程序时会默认到PATH指定的各个目录下去寻找。如果找不到就认定这个程序不存在,如果找到了就去执行它。将一个可执行程序的目录导出到PATH,可以让我们不带路径来执行这个程序。

(4)rcS中为什么要先导出PATH?就是因为我们希望一旦进入命令行下时,PATH环境变量中就有默认的/bin /sbin /usr/bin /usr/sbin 这几个常见的可执行程序的路径,这样我们进入命令行后就可以ls、cd等直接使用了。

(5)为什么我们的rcS文件还没添加,系统启动就有了PATH中的值?原因在于busybox自己用代码硬编码为我们导出了一些环境变量,其中就有PATH。

2、runlevel=

(1)runlevel也是一个shell变量,并且被导出为环境变量。

(2)runlevel这个环境变量到底有什么用?

(3)runlevel=S表示将系统设置为单用户模式

3、umask=

(1)umask是linux的一个命令,作用是设置linux系统的umask值。

(2)umask值决定当前用户在创建文件时的默认权限。

4、umask测试

(1)umask是022的时候,默认touch创建一个文件的权限是644

(2)umask是044的时候,默认touch创建一个文件的权限是622

(3)umask是444的时候,默认touch创建一个文件的权限是222

总结:umask的规律就是:umask值和默认创建文件的权限值加起来是666.

5、mount -a

(1)mount命令是用来挂载文件系统的

(2)mount -a是挂载所有的应该被挂载的文件系统,在busybox中mount -a时busybox会去查找一个文件/etc/fstab文件,这个文件按照一定的格式列出来所有应该被挂载的文件系统(包括了虚拟文件系统)

6、mdev

(1)mdev是udev的嵌入式简化版本,udev/mdev是用来配合linux驱动工作的一个应用层的软件,udev/mdev的工作就是配合linux驱动生成相应的/dev目录下的设备文件。

(2)因为这个问题涉及到驱动,因此详细讲解要等到驱动部分。这里我们只是通过一些直观的现象来初步理解udev/mdev的工作效果。

(3)在rcS文件中没有启动mdev的时候,/dev目录下启动后是空的;在rcS文件中添加上mdev有关的2行配置项后,再次启动系统后发现/dev目录下生成了很多的设备驱动文件。

(4)/dev目录下的设备驱动文件就是mdev生成的,这就是mdev的效果和意义。

7、hostname

(1)hostname是linux中的一个shell命令。命令(hostname xxx)执行后可以用来设置当前系统的主机名为xxx,直接hostname不加参数可以显示当前系统的主机名。

(2)/bin/hostname -F /etc/sysconfig/HOSTNAME -F来指定了一个主机名配置文件(这个文件一般文件名叫hostname或者HOSTNAME)

8、ifconfig

(1)有时候我们希望开机后进入命令行时ip地址就是一个指定的ip地址(譬如192.168.1.30),这时候就可以在rcS文件中ifconfig eth0 192.168.1.30

linux不启动修改rcs文件,Linux启动脚本rcS相关推荐

  1. Linux查看谁修改的文件,linux如何查看近来修改的文件

    下面用不同的方式只列出所有你今天创建或修改的文件(直接或间接). 1. 使用 ls 命令,只列出你的 home 文件夹中今天的文件. # ls -al --time-style=+%D | grep ...

  2. linux不启动修改rcs文件,linux根文件系统制作之rcS文件分析

    先把我的rcS文件贴出来,然后逐行解析: ***************************************************************************** # ...

  3. linux fstab 启动,修改-etc-fstab后Linux不能启动

    修改-etc-fstab后Linux不能启动 (2011-08-23 00:31:38) 标签: 杂谈 修改/etc/fstab后Linux不能启动/etc/fstabLABEL=/ / ext3 d ...

  4. Linux内核开发——内核镜像文件及启动过程

    1. 内核镜像文件 1.1. vmlinux vmlinux是elf(Excutable And Linkable),即可执行文件.里面含有调试信息,可用于调试,所以占有空间较大.gcc编译连接之后直 ...

  5. Linux三种修改打开文件数量限制的方法

    系统环境 Centos7 为什么要限制打开文件的数量? 因为操作系统需要内存来管理每个文件,所以可以打开的文件数可能会受到限制.由于程序也可以关闭文件处理程序,它可以创建任意大小的文件,直到所有可用磁 ...

  6. linux下递归修改目录/文件权限命令

    1.切换到该目录下: 1 cd /yourplace 2.递归修改当前目录下所有文件夹的权限755: 1 find -type d -exec chmod 755 {} \; /一般用这条就可以了 2 ...

  7. linux误修改文件名恢复,如何在 Linux 中找出最近或今天被修改的文件-linux修改文件名...

    Linux 用户在命令行上遇到的常见问题之一是定位具有特定名称的文件,如果你知道确定的文件名则可能会容易得假设你忘记了白天早些时候创建的文件的名称(在你包含了数百个文件的 home 文件夹中),但现在 ...

  8. linux 修改sh文件生效,Linux-shell脚本基础

    本章内容 编程基础 脚本基本格式 变量 运算 条件测试 配置用户环境 编程基础 程序:指令+数据 程序编程风格: 过程式:以指令为中心,数据服务于指令 对象式:以数据为中心,指令服务于数据 shell ...

  9. linux怎么修改passwd文件,linux 普通用户修改passwd文件

    今天一台服务器root用户登录不了,普通用户可以登录. 普通用户su到root用户也报错 su: bash: No such file or directory 查看下passwd文件 oracle@ ...

最新文章

  1. 条件注释判断浏览器!--[if !IE]!--[if IE]!--[if lt IE 6]!--[if gte IE 6]
  2. SQL Server中的命名规范(个人使用)
  3. PriorBox 改进
  4. iis5顺利安装诀窍
  5. Python3 实现用户登陆,输入三次密码
  6. 说实话,你的API接口在高并发面前不堪一击!
  7. 取后端数据_用 Flask+Axios 实现前后端数据通信:查询动森鱼类价格
  8. [leetcode]145.二叉树的后序遍历
  9. call,apply
  10. 30+ 新鲜惊奇的 jQuery 插件与教程
  11. 开启自己的博客园,在学习成长的路上一路向前
  12. 8月23号,来上海整整一年
  13. 2.PHP 扩展开始以及内核应用(1) --- PHP 变量在内核中的实现
  14. 如何修复MySQL配置文件?
  15. 自学-Linux-老男孩Linux77期-day3
  16. PaaS平台设计思想
  17. 聊聊新股市盈率的那些事
  18. php 微信token验证失败,php下微信token验证失败怎么办?
  19. 风云编程python基础语法(5)
  20. 分享二维码领红包系统开发

热门文章

  1. 分析计算机网络流量控制论文,线性规划控制论文,关于线性规划的网络流量流向控制技术相关参考文献资料-免费论文范文...
  2. vue3 reactive函数用法
  3. PHP一行代码集成雅虎宝贝鱼在线翻译功能 -- JAVAEYE不支持IE8
  4. 学习ES6(六)--函数 Lambda函数(=) 详解
  5. 计算机ntc中国教育考试网,中国教育考试网ntcecf1.neea.edu.cn-2018河北教师资格证成绩查询网址...
  6. linux网卡断流测试,RouterOS断流解决办法探讨
  7. 打造无懈可击的Web设计——流动布局和弹性布局
  8. 基于python的图片序列转gif
  9. 华为云PaaS平台微服务治理5云容器引擎CCE
  10. originos和鸿蒙系统的区别,originos是什么系统_originos和安卓有什么区别