A0.运行级别
A1 启动体系
A0.运行级别
如同其他的UNIX类系统,Linux也分运行级别,不同级别有不同的功能。切换到某个运行级别的命令为“init 某”。
一般来说,Linux有7个运行级别:6.无论何时切换到这个级别,重新启动。
5.最常用的,从登录到注销都在图形界面下操作。
4.一般的发行版没定义这个级别。红旗Linux桌面4.0把它定义为“安全模式”,切换到这里会自动启动显示设置程序。
3.除了需要在登录后手动启动图形界面外,与级别5相同。
2.与级别3相比,网络部分不启动。但是红旗Linux桌面4.0似乎没遵循这个常规。
1.单用户模式,真正的“安全模式”。只有一个控制台终端,供“root”帐号做系统维护。但是作为新手,如果你的系统坏到你必须用这个,那建议你重装。
0.无论何时切换到这个级别,关机。
个人总结:简单来说,运行级别就是让一些程序在一个级别启动,而另外一个级别的时候不启动。/etc/rc.d/init.d中放着各种脚本,每个运行级别对应的文件/etc/rc.d/rcN.d中,选择你想在该级别运行的脚本,从/etc/rc.d/init.d中链接过来。而运行级别的文件定义在/etc/inittab下面。
init是Linux系统里的根进程,是系统所有进程的祖先。它的主要作用是根据记录在/etc/inittab里的一个脚本(script)程序产生进程。这个文件通常用于控制用户的登录模式。Linux系统的有效登录模式有0~9共十种,不过沿用UNIX系统的至多6种的限制,一般只有1到6有效。
运行级别就是操作系统当前正在运行的功能级别。这个级别从1到6 ,具有不同的功能。这些级别在/etc/inittab文件里指定。这个文件是init程序寻找的主要文件,最先运行的服务是那些放在/etc/rc.d 目录下的文件。
大多数的Linux发行版本中,启动脚本位于/etc/rc.d/init.d。这些脚本被ln命令来连接到 /etc/rc.d/rcn.d目录。(这里的n 就是运行级0-6) 例如/etc/rc.d/rc2.d下面的S10network就是连接到/etc/rc.d/init.d下的network脚本的。
因此,我们可以知道,rc2.d下面的文件就是和运行级2有关的。文件开头的S代表start就是启动服务的意思,后面的数字10就是启动的顺序。例如,在同一个目录下,你还可以看到S80postfix这个文件,80就是顺序在10以后,因为没有启动网络的情况下,启动postfix是没有任何作用的。
再看一下/etc/rc.d/rc3.d,可以看到文件S60nfslock,但是这个文件不存在于/etc/rc.d/rc2.d目录下。NFS要用到这个文件,一般用在多用户环境下,所以放在rc3.d目录下。
另外,在/etc/rc.d/rc2.d还可以看到那些K开头的文件,例/etc/rc.d/rc2.d/K45named,K代表kill。
标准的Linux运行级为3或者5,如果是3的话,系统就在多用户状态。如果是5的话,则是运行着X Window 系统。如果目前正在3或5,而你把运行级降低到2的话,init就会执行K45named脚本。
不同的运行级定义如下:(可以参考Linux里面的/etc/inittab)
# 缺省的运行级,RHS用到的级别如下:
# 0 - 停机 ,机器关闭。
# 1 - 单用户模式 。就像Win9x下的安全模式类似
# 2 - 多用户,但是没有NFS 进入无网络服务的多用户模式
# 3 - 完全多用户模式 ,是标准的运行级。
# 4 - 没有用到 ,一般不用,在一些特殊情况下可以用它来做一些事情。例如在笔记本 电脑的电池用尽时,可以切换到这个模式来
# 5 - X11 ,进到X Window系统了。
# 6 - 重新启动 ,运行init 6机器就会重启
init一般在系统启动时自动运行,也可以由root用户调用。它的作用是切换系统的运行状态。它的命令格式是:init NUM〈回车〉,其中NUM表示1到6的任一数字。
6种模式中有两种是系统内定的:
0:停止系统运行。init 0〈回车〉相当于 halt〈回车〉。
6:重启系统。init 6〈回车〉相当于 reboot〈回车〉。
在终端中,我们可以键入
init <运行级别>
来切换运行级别来达到某种目的,如输入 init 0 使系统关机,输入 init 6 使系统重启。
如果你使用的是文本登录屏幕,你是在运行级别 3 中操作。如果你使用的是图形化登录屏幕,你是在运行级别 5 中操作。
默认的运行级别可以通过修改 /etc/inittab 文件来改变,该文件在接近开头的地方有一行与下面相似:
id:5:initdefault:
把这一行中的数字改成你想要的运行级别。所做改变在系统重新引导之后才会生效。
要立即改变运行级别,使用命令 telinit,其后跟随运行级别数字。你必须是根用户才能使用这项命令
不同的运行级有不同的用处,也应该根据自己的不同情形来设置。例如,如果丢失了root口令,那么可以让机器启动进入单用户状态来设置。在启动后的lilo提示符下输入:
init=/bin/sh rw
就可以使机器进入运行级1 ,并把root文件系统挂为读写。它会跳过所有系统认证,让你使用passwd程序来改变root口令,然后启动到一个新的运行级
A1 启动体系
linux有自己一套完整的启动体系,抓住了linux启动的脉络,linux的启动过程将不再神秘。
本文中假设inittab中设置的init tree为:
/etc/rc.d/rc0.d
/etc/rc.d/rc1.d
/etc/rc.d/rc2.d
/etc/rc.d/rc3.d
/etc/rc.d/rc4.d
/etc/rc.d/rc5.d
/etc/rc.d/rc6.d
/etc/rc.d/init.d
目录
1. 关于linux的启动
2. 关于rc.d
3. 启动脚本示例
4. 关于rc.local
5. 关于bash启动脚本
6. 关于开机程序的自动启动
1. 关于linux的启动
init是所有进程的顶层
init读取/etc/inittab,执行rc.sysinit脚本
(注意文件名是不一定的,有些unix甚至会将语句直接写在inittab中)
rc.sysinit脚本作了很多工作:
init $PATH
config network
start swap function
set hostname
check root file system, repair if needed
check root space
....
rc.sysinit根据inittab执行rc?.d脚本
linux是多用户系统,getty是多用户与单用户的分水岭
在getty之前运行的是系统脚本
2. 关于rc.d
所有启动脚本放置在 /etc/rc.d/init.d下
rc?.d中放置的是init.d中脚本的链接,命名格式是:
S{number}{name}
K{number}{name}
S开始的文件向脚本传递start参数
K开始的文件向脚本传递stop参数
number决定执行的顺序
3. 启动脚本示例
这是一个用来启动httpd的 /etc/rc.d/init.d/apache 脚本:
代码:
#!/bin/bash
......
可以看出他接受start,stop,restart,status参数
然后可以这样建立rc?.d的链接:
代码:
cd /etc/rc.d/init.d &&
ln -sf ../init.d/apache ../rc0.d/K28apache &&
ln -sf ../init.d/apache ../rc1.d/K28apache &&
ln -sf ../init.d/apache ../rc2.d/K28apache &&
ln -sf ../init.d/apache ../rc3.d/S32apache &&
ln -sf ../init.d/apache ../rc4.d/S32apache &&
ln -sf ../init.d/apache ../rc5.d/S32apache &&
ln -sf ../init.d/apache ../rc6.d/K28apache
4. 关于rc.local
经常使用的 rc.local 则完全是习惯问题,不是标准。
各个发行版有不同的实现方法,可以这样实现:
代码:
touch /etc/rc.d/rc.local
chmod +x /etc/rc.d/rc.local
ln -sf /etc/rc.d/rc.local /etc/rc.d/rc1.d/S999rc.local &&
ln -sf /etc/rc.d/rc.local /etc/rc.d/rc2.d/S999rc.local &&
ln -sf /etc/rc.d/rc.local /etc/rc.d/rc3.d/S999rc.local &&
ln -sf /etc/rc.d/rc.local /etc/rc.d/rc4.d/S999rc.local &&
ln -sf /etc/rc.d/rc.local /etc/rc.d/rc5.d/S999rc.local &&
ln -sf /etc/rc.d/rc.local /etc/rc.d/rc6.d/S999rc.local
5. 关于bash启动脚本
/etc/profile
/etc/bashrc
~/.bash_profile
~/.bashrc
是bash的启动脚本
一般用来设置单用户的启动环境,也可以实现开机单用户的程序,但要明确他们都是属于bash范畴而不是系统范畴。
他们的具体作用介绍如下:
/bin/bash这个命令解释程序(后面简称shell)使用了一系列启动文件来建立一个运行环境:
/etc/profile
/etc/bashrc
~/.bash_profile
~/.bashrc
~/.bash_logout
每一个文件都有特殊的功用并对登陆和交互环境有不同的影响。
/etc/profile 和 ~/.bash_profile 是在启动一个交互登陆shell的时候被调用。
/etc/bashrc 和 ~/.bashrc 是在一个交互的非登陆shell启动的时候被调用。
~/.bash_logout 在用户注销登陆的时候被读取
一个交互的登陆shell会在 /bin/login 成功登陆之后运行。一个交互的非登陆shell是通过命令行来运行的,如[prompt]$/bin/bash。一般一个非交互的shell出现在运行 shell脚本的时候。之所以叫非交互的shell,是因为它不在命令行上等待输入而只是执行脚本程序。
6. 关于开机程序的自动启动
系统脚本可以放置在/etc/rc.d/init.d中并建立/etc/rc.d/rc?.d链接,也可以直接放置在/etc/rc.d/rc.local中。
init.d脚本包含完整的start,stop,status,reload等参数,是标准做法,推荐使用。
为特定用户使用的程序(如有的用户需要使用中文输入法而有的不需要)放置在~/中的bash启动脚本中。
========================================================================
设置系统自动启动
在/etc/init.d/下创建smsafe文件
内容:
#!/bin/bash
# chkconfig: 35 95 1
# description: script to start/stop smsafe
case
1instart)sh/opt/startsms.sh;;stop)sh/opt/stopsms.sh;;∗)echo"Usage:
0 (start|stop)"
;;
esac
更改权限
# chmod 775 smsafe
加入自动启动
# chkconfig –add smsafe
查看自动启动设置
# chkconfig –list smsafe
smsafe 0:off 1:off 2:off 3:on 4:off 5:on 6:off
以后可以用以下命令启动和停止脚本
# service smsafe start 启动
# service smsafe stop 停止
=======================================================================
jira 的启动主要依靠的是bin目录下的catalina.sh脚本,提供了如init脚本的start,stop等参数
#!/bin/bash
#
# chkconfig: 2345 85 15
# description: jira
# processname: jira
# source function library
. /etc/init.d/functions
#下面一行比较重要,为jira的安装路径,没有的话,将会提示找不到文件
CATALINA_HOME="/var/www/jira"
RETVAL=0
start() {
echo -n $"Starting jira services: "
. /var/www/jira/bin/catalina.sh start
RETVAL=$?
echo
}
stop() {
echo -n $"Shutting down jira services: "
. /var/www/jira/bin/catalina.sh stop
RETVAL=$?
echo
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart|reload)
stop
start
;;
status)
status jira
RETVAL=$?
;;
*)
echo "Usage: 0 {start|stop|restart|status}"
exit 1
esac
exit $RETVAL
-------------------------------
保存为/etc/init.d/jira
然后利用chkconfig --add jira
OK
启动/etc/init.d/jira start
停止/etc/init.d/jira stop
=======================================================================
(以Websphere为例子)
1. 在/etc/rc.d/init.d目录下新建启动脚本startWebsphere,键入以下内容:
#!/bin/sh
/opt/WebSphere/AppServer/bin/startServer.sh server1
修改该文件的权限:
chmod 755 startWebsphere
2. 在对应的目录下建立软连接(假设系统默认进入X11)
cd /etc/rc.d/rc5.d
ln -s ../init.d/startWebsphere S99startWebsphere
3. 重启系统即可
=======================================================================
linux下oracle的自启动脚本
1.写一个StartOracle.sql,假设放在/目录下
vi /StartOracle.sql加入如下两行保存
startup
exit
2.配置/etc/rc.local
vi /etc/rc.local加入如下内容,保存
su - oracle -c '
ORACLEHOME/bin/lsnrctlstart′su−oracle−c′
ORACLE_HOME/bin/sqlplus "/as sysdba" @/StartOracle.sql'
3. 如果还要自动启动oracle enterprise manager(em)和isqlplus可以如下配置
vi /etc/rc.local 加入:
su - oracle -c '
ORACLEHOME/bin/emctlstartdbconsole′su−oracle−c′
ORACLE_HOME/bin/isqlplusctl start'
要知道em和isqlplus等使用的端口可以查询文件:
$ORACLE_HOME/install/portlist.ini(以oracle 10.1.0.3为例)
=======================================================================
#root命令行下直接绑定演示:
arp -s 192.x.x.x. 00:ea:se绑定.
arp -d 删除
arp -f 批量导入