linux系统的运行定义在,Linux系统运行级管理

运行级的概念来自SystemV运行级别将启动过程分成不同的集合每个集合包含一

组脚本当init程序切换运行级到对应的级别时相应的脚本就被触发切换运行

级可以通过执行init[级别号]完成(比如在Linux中runlevel代表reboot所

以执行init就会引起系统重新启动)

下面是一个标准的Linux的/etc/inittab注意这里解释的内容来自redhat但是其他的

版本也大同小异我们将它分成若干段来解释如同一般情况那样用#开始的行是注释

而非注释行的语法是

标号运行级别操作方式命令

标号是这一行的标签运行级别用于定义这一行应该用于那些级别如果为空就定义

为所有级别操作方式可以是一些确定的字符串代表如何执行后面的命令而命令则

给处在进入这一级别时执行的程序

下面是它的内容

#DefaultrunlevelTherunlevelsusedbyRHSare:

#halt(DoNOTsetinitdefaulttothis)

#Singleusermode

#MultiuserwithoutNFS(Thesameasifyoudonothavenetworking)

#Fullmultiusermode

#unused

#X

#reboot(DoNOTsetinitdefaulttothis)

#

上面的几行解释了缺省的运行级别定义

停机系统进入这一级别后关机

单用户模式在这个模式中只能从控制台操作计算机网络和终端不启动许多文件

系统也没有连结

多用户模式但关闭了网络服务支持

完全的多用户模式就是我们一般使用的模式

无定义

图形界面模式系统切入这一运行级后自动启动XWindow系统

重新启动

这些级别的定义是任意的然而你最好不要修改它尤其是level和因为许多

程序都使用init之类的方式实现对系统的控制其他的Linux发行版本可能会更改

的定义你需要参考/etc/inittab才能判断到底那个级别是什么意思不过一般来说

和6总是上面的定义

下面开始才是真正的内容首先系统必须定义缺省的运行级别

id::initdefault:

initdefault关键字决定了缺省的运行级别在这里是也就是在执行了公共的系统

启动脚本之后系统将会执行与级别对应的那些行

#Systeminitialization

si::sysinit:/etc/rcd/rcsysinit

这里的sysinit关键字定义了公共的系统初始化脚本在相应于运行级的地方是空

表示适用于所有运行级别注意它将在系统进入任何运行级别以前完成一会我们再

研究这个脚本的内容

l::wait:/etc/rcd/rc

l::wait:/etc/rcd/rc

l::wait:/etc/rcd/rc

l::wait:/etc/rcd/rc

l::wait:/etc/rcd/rc

l::wait:/etc/rcd/rc

l::wait:/etc/rcd/rc

这里开出了六个运行级别的定义运行级就去执行命令/etc/rcd/rc运行级是

/etc/rcd/rc诸如此类wait关键字表示系统必须等待此命令执行完才能开始

下一步工作

#Thingstorunineveryrunlevel

ud::once:/sbin/update

这又是一个适用于所有级别的命令update命令实际是去启动updated守护进程以便

定期刷新内存中的超级块表Once关键字说明这个项只被执行一次

#TrapCTRLALTDELETE

ca::ctrlaltdel:/sbin/shutdowntrnow

ctrlaltdel定义当热启动组合键被触发时系统的行为这里定义所有的运行级别对它

的响应都是重新启动(shutdown–r)

pf::powerfail:/sbin/shutdownfh+"PowerFailure;SystemShuttingDown

"

pr::powerokwait:/sbin/shutdownc"PowerRestored;ShutdownCancelled

"

这两行定义如何响应ups信息如果系统掉电(powerfail)执行两分钟后关机的指令

如果关机之前电源恢复取消关机操作

#Rungettysinstandardrunlevels

::respawn:/sbin/mingettytty

::respawn:/sbin/mingettytty

::respawn:/sbin/mingettytty

::respawn:/sbin/mingettytty

::respawn:/sbin/mingettytty

::respawn:/sbin/mingettytty

都是多用户级别为系统开出个虚拟屏幕(就是用Alt+Fn即获得虚拟屏幕)

respawn关键字表示这个动作在每次进入相应运行级别时都会执行

#Runxdminrunlevel

#xdmisnowaseparateservice

x::respawn:/etc/X/prefdmnodaemon

对于级别启动图形界面

归纳一下系统在读入inittab以后要做什么?设置Ctrl+Alt+Del响应设置好对UPS

的支持然后应该执行/etc/rcd/rcsysinit然后是/etc/rcd/rc最后是update

和启动虚拟屏幕显然系统的主要初始化命令应该在/etc/rcd/rcsysinit和/etc/r

cd/rc中完成

rcd下的基本脚本

下面我们来研究启动脚本这里的脚本来自redhat因为这是个最为广泛使用的

版本其他的版本的特有问题将在下一节讨论

首先系统将执行/etc/rcd/rcsysinit这是个shell脚本你可以用普通的文本编

辑工具对它进行处理为了简便我们只研究其中较为重要的部分或者较为典型的段落

#!/bin/sh

#

#/etc/rcd/rcsysinitrunonceatboottime

#

#TakeninpartfromMiquelvanSmoorenburgsbcheckrc

#

#Rerunourselvesthroughinitlog

if[z"$IN_INITLOG"];then

[f/sbin/initlog]&&exec/sbin/initlog$INITLOG_ARGSr/etc/rcd/rc

sysinit

fi

首先确定系统中是否存在/sbin/initlog文件如果存在那么需要记录初始化信息

#Setthepath

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

exportPATH

设置缺省路径

#Readinconfigdata

if[f/etc/sysconfig/network];then

/etc/sysconfig/network

else

NETWORKING=no

HOSTNAME=localhost

fi

这一段是网络的参数设置/etc/sysconfig/network的内容是这样

NETWORKING=yes

FORWARD_IPV="yes"

HOSTNAME="openlabasnceducn"

GATEWAY=""

GATEWAYDEV=""

显然如果这个文件存在那么设置网络的运行参数如域名网关等等这个文件

中可以包含很多的东西详细的内容我们在设置网络的部分介绍

#Sourcefunctions

/etc/rcd/initd/functions

/etc/rcd/initd是所有的服务脚本存放的地方而functions是各种服务脚本需要的

一些参数的设置有兴趣的话你可以看一看不看也不影响什么

以下有一段是设置一些显示信息接下来是这样的内容

#Mount/proc(doneheresovolumelabelscanworkwithfsck)

action"Mountingprocfilesystem"mountntproc/proc/proc

连结/proc文件系统应该记得/proc是用来显示系统状态的虚拟文件系统注意acti

on命令的语法它显示一段提示信息然后去执行相应的命令

然后的段落有一点意思

#Turnoffsysrq

#if["$MAGIC_SYSRQ"="no"];then

#echo"">/proc/sys/kernel/sysrq

#fi

$MAGIC_SYSRQ=no意味着你决定不使用内核调试脚本必须把系统的内核调试功能关闭

注意接下来的处理方法在/proc/sys/kernel下建立一个名叫sysrq的文件并且设置

其内容为""就关闭了这项功能这也是在运行中打开或者关闭内核的某个功能的标准

方法以后我们会经常看到这样的例子

接下来要设置时钟和键盘映射表装入系统字体又是一段冗长的代码这里将它省

略反正你总可以在自己的系统上看到他们

#Startupswapping

action"Activatingswappartitions"swapona

swapon–a将读/etc/fstab文件这个文件中包含有系统中存在的应该自动挂接的各

种文件系统的列表同时也包含了关于交换分区的知识swapon–a将启动其中标注的

所有交换分区

#Setthehostname

action"Settinghostname${HOSTNAME}"hostname${HOSTNAME}

#SettheNISdomainname

if[n"$NISDOMAIN"];then

action"SettingNISdomainname$NISDOMAIN"domainname$NISDOMAIN

else

domainname""

fi

这两段设置系统名字我们应该记得$HOSTNAME已经在/etc/sysconfig/network文件中

设置过所以这里的action被执行而$NISDOMAIN现在是空字符串所以执行后hostna

me被设置而NIS域名不存在

if[f/fsckoptions];then

fsckoptions=`cat/fsckoptions`

else

fsckoptions=

fi

if[f/forcefsck];then

fsckoptions="f$fsckoptions"

fi

这里是与管理员相关的行了如果系统的/下将存在/forcefsck文件于是系统自动启

动fsck程序去检查文件系统是否有错误接下来是一段关于是否存在/fastboot文件的判

断与其大同小异然后系统将会决定是否启用PNP方法和处理MAGIC_SYSRQ是类似的

这两段我们不讨论了你可以自己看一下

#Remounttherootfilesystemreadwrite

action"Remountingrootfilesysteminreadwritemode"mountnoremount

rw/

#Add/procto/etc/mtab

mountftproc/proc/proc

检测根文件系统完毕后系统重新将/连结成读写方式并且将/proc加入到/etc/mta

b中下面是非常重要的一步如果系统内核支持可装载模块需要把$USEMODULES变量

设置成"y"并且设置模块的缺省路径参数等等然后系统开始装入模块

#loadsoundmodules

if[n"$USEMODULES"];then

ifgrepsq"^aliassound"/etc/confmodules;then

action"Loadingsoundmodule"modprobesound

fi

fi

当这些直接装入的模块结束后为了和以前的方式兼容也为了管理员的方便这个

脚本试图去寻找/etc/rcd/rcmodules如果存在就执行它

#Loadmodules(forbackwardcompatibilitywithVARs)

if[f/etc/rcd/rcmodules];then

/etc/rcd/rcmodules

fi

显然你可以将自己的模块初始化命令加入/etc/rcd/rcmodules使它在启动时得到

运行

完成主要模块的装入后系统将开始一系列日常工作如检测有问题的文件系统连

结所有本地文件系统启动磁盘限额等等如果系统还没有被配置那么将启动配置脚

本设置网络超级用户口令等等否则对于已经配置好的系统清理记账文件准

备进行系统工作

当一切都完成之后系统按照inittab的设定进入运行级执行/etc/rcd/rc

/etc/rcd/rc是一个很有意思的程序它是一个shell脚本其行为是这样根据提供

给它的参数它去寻找相应的目录rc${arg}d例如在/etc/rcd/rc执行时它去

查询/etc/rcd/rcd下的所有文件试图执行那些所有用S或K打头的脚本凡是用S开

头的脚本它给加上一个start参数凡是用K打头的脚本加上一个stop参数执行次

序是按照S或K后跟的数值顺序

例如在现在的例子中/etc/rcd/rc下存在一个Sinet的脚本于是rc脚本去

执行Sinetstart而Sinet其实是到/etc/rcd/initd/inet的一个符号连结其内

容是(这里只给出了部分内容)

/etc/rcd/initd/functions

/etc/sysconfig/network

if[${NETWORKING}="no"]

then

exit

fi

[f/usr/sbin/inetd]||exit

RETVAL=

#Seehowwewerecalled

case"$"in

start)

echon"StartingINETservices:"

daemoninetd

RETVAL=$?

echo

[$RETVALeq]&&touch/var/lock/subsys/inet

;;

stop)

echon"StoppingINETservices:"

killprocinetd

RETVAL=$?

echo

[$RETVALeq]&&rmf/var/lock/subsys/inet

;;

*)

echo"Usage:inet{start|stop|status|restart|reload}"

exit

esac

exit$REVAL

daemon和killproc是在/etc/rcd/initd/functions里面定义的函数daemon将命令

当成守护进程执行killproc则杀掉对应进程显然Sinetstart的结果是inetd程

序被启动为一个守护进程

这里的方法是启动服务进程的标准模式例如你要设置某个服务在runlevel被启动

那么你可以自己写一个脚本比如说mydaemon让mydaemonstart启动服务mydaem

onstop停止服务然后将这个脚本复制到/etc/rcd/initd中接着在/etc/rcd/rc?

d中建立连接在rcd中连结为Smydaemon而在其他目录中为Kmydaemon这样你

的脚本就会在进入和退出运行级时自动处理了

除此与runlevel相关的启动指令之外Linux还从BSD中引入了另外一些配置文件其

中最重要的是/etc/rcd/rclocal通常它在执行了全部运行级脚本以后运行你可以

在这里定制自己的设置如欢迎信息等等

版本之间的区别

如同我们看到的那样Redhat的启动脚本看上去井井有条要寻找某个功能很容易

但是要寻找某个命令在何处启动就显得比较困难经常需要从/etc/inittab开始

TurboLinux和RedFlag的脚本和Redhat颇为相似尤其是红旗几乎就是RedHat的中文

版它们的配置也相当近似

Slackware的启动脚本使用另外一种风格实际上看上去很象BSD系列启动脚本也

在/etc/rcd下面但是它把一些在大部分运行级别必须使用的脚本做在了一起冠以r

cmodulesrcinetrcinet等等的名字这样对于手工配置系统确实简单的多不

过这些文件都相当大看起来需要耐心对于这个系统你只要看一遍/etc/inittab就

能掌握它的配置文件位置了

Debian/Corel使用一种有趣的方式看上去颇像Sun的Solaris实际上它和RedHat

的方式几乎是一样的但是启动脚本不是在/etc/rcd而是直接位于/etc下例如/et

c/rcd/etc/rcd等等知道了这一点之后配置debian就不会感到困难了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/263770.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【翻译】怎样使用css制作迷人的button

英文原文:How to make sexy buttons with css 作者:Alex 这是一个教程,作者Alex一步步地叫我们怎样使用css来制作一个迷人的按钮,看后觉得挺好,很想大家都看看,翻译的可能稍有不妥,望谅解…… 这…

猜数游戏,随机目标数字,直到猜中退出

/* 猜数游戏&#xff08;其三&#xff1a;目标数字是0~999的随机数&#xff09;*/#include <time.h> #include <stdio.h> #include <stdlib.h>int main(void) {int no; /* 读取的值 */int ans; /* 目标数字 */srand(time(NULL)); /* 设定随…

Linux内核分析(三)----初识linux内存管理子系统

原文:Linux内核分析&#xff08;三&#xff09;----初识linux内存管理子系统Linux内核分析&#xff08;三&#xff09; 昨天我们对内核模块进行了简单的分析&#xff0c;今天为了让我们今后的分析没有太多障碍&#xff0c;我们今天先简单的分析一下linux的内存管理子系统&#…

linux交叉编译静态,使用静态链接在Linux上交叉编译Windows的GLUT项目

我正在尝试交叉编译这个最小的GLUT程序&#xff1a;#include int main(int argc, char **argv){glutInit(&argc,argv);glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);glutCreateWindow("Cross-compile testing");glutMainLoop();return 0;}我使用的…

Python笔记(十五)_异常处理

try-except语句 try: 被检测代码 except Exception [as reason]: 出现异常后的处理代码 例&#xff1a; >>>try: sum 11 fopen(未定义文件.txt) print(f.read()) f.close except OSError as reason: print(文件出错啦&#xff01;错误原因&#xff1a; str(reason))…

配置左菜单控制点

IsModuleAdmin!"1"&ISSYSTEMDBA!"1"1.判断是否模块管理员 2.判断是否系统管理员转载于:https://www.cnblogs.com/sheme/archive/2010/10/07/1845196.html

为MFC中的ListBox添加水平滚动条

我们知道&#xff0c;MFC中的水平滚动条并不像垂直滚动条那样的智能。当文字超出ListBox的宽度时&#xff0c;水平滚动条并不会自己出现&#xff0c;我们需要手动的调用CListBox中的函数SetHorizontalExtent设置宽度&#xff0c;单位为像素。 我们可以自己添加智能水平滚动条&a…

linux常用高级命令,Linux常用高级文件操作命令

Linux常用高级文件操作命令 cat 查看文本#cat 文件名 打印文件内容到当前屏幕上#cat -n 文件名 显示行号#cat gt;Linux常用高级文件操作命令cat 查看文本#cat 文件名 打印文件内容到当前屏幕上#cat -n 文件名 显示行号#cat > a.txt 可以用这种方法修改或…

java高并发实战Netty+协程(Fiber)|系列1|事件驱动模式和零拷贝

今天开始写一些高并发实战系列。 本系列主要讲两大主流框架&#xff1a; Netty和Quasar(java纤程库) 先介绍netty吧&#xff0c;netty是业界比较成熟的高性能异步NIO框架。 简单来说&#xff0c;它就是对NIO2的封装&#xff0c;但提供了更好用&#xff0c;bug更少的API。 为什么…

诗歌rails 之rails g

http://www.viget.com/extend/rails-3-generators-the-old-faithful/转载于:https://www.cnblogs.com/orez88/articles/1852408.html

桌面级linux推荐,七大顶级桌面比较!Linux平台自由选择

七大顶级Linux桌面&#xff1a;Unity对于开源Linux平台来说&#xff0c;如何选择就是首要解决的问题。通常Linux发行版都有默认的桌面成为你的首选&#xff0c;但目前可供选择的桌面环境种类繁多。特别是Ubuntu系统一个平台就提供9种正式备选版本&#xff0c;且各自拥有不同的桌…

最大子列和问题

问题陈述&#xff1a; 给定N个整数的序列{A1, A2, ... , AN}&#xff0c;求函数ƒ(i, j) max{0, Ai Ai1 ... Aj}(1<i<j<N)的最大值。 问题分析&#xff1a; 求给定数列的最大子列和。 算法设计&#xff1a; 算法1&#xff1a;计算每个子列的和 时间复杂度: T(N) …

蓝牙模块音频BLE数据数传串口AT指令的使用方法

一、简介 蓝牙模块&#xff0c;使用其实是非常简单的&#xff0c;因为它把比较麻烦的蓝牙射频以及外围的电路&#xff0c;都集成在一起&#xff0c;对于用户来说&#xff0c;就是一个黑盒子&#xff0c;只用关注应用&#xff0c;大可不必关心他实现的细节&#xff0c;所以深受广…

flash 及 flex 技术

前天&#xff0c;一个好朋友开发了一个新版本的基因组浏览器&#xff0c;效果及影响非常好。且说今天是2010年10月19日&#xff0c;一个让我感受良多的日子。此时&#xff0c;我想借这篇文章记录两个重要的心得。一个是关于人的执着及长成&#xff0c;另一个是关于技术的“执着…

linux下生成源程序控制流图,Linux下控制(统计)文件的生成的C代码实现

本文分享了Linux下控制(统计)文件的生成的C代码实现案例&#xff0c;供大家参考&#xff0c;具体内容如下一、需求描述不定时地在Linux机器下的某目录中放入文件&#xff0c;文件内容中包含了用户号码、起止时间等字段&#xff0c;现要求编写一程序来统计目前该目录中所有文件中…

SharePoint Online 创建门户网站系列之首页布局

前 言 SharePoint Online中创建首页布局&#xff0c;一般都是首先将美工提供的效果图&#xff0c;切图成为Html Css Script的形式&#xff0c;然后&#xff0c;将所有资源文件传到SharePoint Online的资源库&#xff0c;在Designer中创建页面&#xff0c;添加Html页面&#x…

Android 3.0细节曝光:Google程序更耀眼

来源&#xff1a;腾讯科技 发布者&#xff1a;腾讯科技 Phandroid 网站今天披露了Android 3.0&#xff08;Gingerbread&#xff09;的一些细节。新系统仍在开发之中&#xff0c;不过有些 Google 员工已经在自己的 Nexus One 上安装了 Android 3.0&#xff0c;下面是一张模糊到…

2014技术总结

2014年,毕业的第四年,技术感觉遇到了瓶颈。整天只会写写crud.偶尔写写其他语言的hello world.写写博客,聊以安慰。 新公司,新契机 公司NLNDIDEeclipseeclipse/ideaJDK57jsjqueryknockoutjs开发框架ssh(spring2.5hibernate3)sh(spring4hibernate5)代码管理svngitmaven项目管理do…

解决无法将java项目部署到tomcat中去

project facets java转成web项目 用Eclipse开发项目的时候&#xff0c;把一个Web项目导入到Eclipse里会变成了一个Java工程&#xff0c;将无法在Tomcat中进行部署运行。 方法&#xff1a; 1.找到.project文件&#xff0c;找到里面的<natures>标签&#xff0c;查看是否有下…

linux查看fcsan设备,fc-san存储

对象存储服务 OBS对象存储服务(Object Storage Service)是一款稳定、安全、高效、易用的云存储服务&#xff0c;具备标准Restful API接口&#xff0c;可存储任意数量和形式的非结构化数据对象存储服务 OBS对象存储服务(Object Storage Service)是一款稳定、安全、高效、易用的云…