rc.conf和rc.local的区别

如题所述

FreeBSD和system V还是一些不大一样的,在rc(Resource Configuration)的使用机制上可以略见一斑了..
..rc系列的系统文件在FreeBSD中是非常常见的,这里我们可以find一下...
alex# find /etc -name 'rc*' -print;find /usr/local/etc -name 'rc*' -print
/etc/defaults/rc.conf
/etc/rc.d
/etc/rc.d/rcconf.sh
/etc/rc
/etc/rc.firewall
/etc/rc.firewall6
/etc/rc.sendmail
/etc/rc.shutdown
/etc/rc.subr
/etc/rc.suspend
/etc/rc.resume
/etc/rc.conf
/usr/local/etc/rc.d
可以说掌握了它们的原理你就可以很快地熟悉FreeBSD系统的一些基本配置了。在初学者的角度来说我们需要
掌握的是:
/etc/rc.conf----------------系统主配置文件
/etc/defaults/rc.conf----默认系统配置文件
/etc/rc.d-------------------预处理目录
/usr/local/etc/rc.d-------用户级别预处理目录
/etc/rc.local---------------系统预处理SHELL脚本
剩下的都是rc.conf的辅助文件了。

/etc/rc.conf大家可能不会陌生了(PS:如果以前有看过我的笔记的话),以前我把网关的rc.conf改成:
sendmail_enable='NONE'
sshd_enable='NO'
gateway_enable='YES'
hostname='alex.demon'
ifconfig_rl0='inet 192.168.1.1 netmask 255.255.255.0'
natd_enable='YES'
natd_interface='tun0'
ppp_enable='YES'
ppp_nat='YES'
ppp_mode='ddial'
ppp_profile='gzDSL'
上面的意思看上去好象谁都懂,但如何是一个空白的文件,现在要你'touch'一个rc.conf,要你'cat>>'一个出
来又如何呢?...对,这里就涉及到一个'语法'与'关键字'的问题了...你知道哪个关键字是代表哪个服务
的吗(看了上面的部分你可能会猜到一些,如何不看呢?又或者是没看过的部分呢?)?另外,这些关键字所
对应的值究竟是BOOL值(这里指的是'YES'或者'NO')又或者是字符串值呢?....问了上面的问题后可能你会
想答案可能会非常的复杂,其实只要你会E文就可以知道答案了...
alex# cat /etc/defaults/rc.conf|less
因为有N页纸,所以我就挑出其中的一部分吧
pccard_enable='NO' # Set to YES if you want to configure PCCARD devices.
pccard_mem='DEFAULT' # If pccard_enable=YES, this is card memory address.
pccard_beep='2' # pccard beep type.
pccard_ifconfig='NO' # Specialized pccard ethernet configuration (or NO).
pccardd_flags='-z' # Additional flags for pccardd.
pccard_conf='/etc/defaults/pccard.conf' # pccardd(8) config file
pccard_ether_delay='5' # Delay before trying to start dhclient in pccard_ether
#
ipfilter_enable='NO' # Set to YES to enable ipfilter functionality
ipfilter_program='/sbin/ipf' # where the ipfilter program lives
ipfilter_rules='/etc/ipf.rules' # rules definition file for ipfilter, see
# /usr/src/contrib/ipfilter/rules for examples
ipfilter_flags='' # additional flags for ipfilter
ipnat_enable='NO' # Set to YES to enable ipnat functionality
ipnat_program='/sbin/ipnat' # where the ipnat program lives
ipnat_rules='/etc/ipnat.rules' # rules definition file for ipnat
ipnat_flags='' # additional flags for ipnat
ipmon_enable='NO' # Set to YES for ipmon; needs ipfilter or ipnat
ipmon_program='/sbin/ipmon' # where the ipfilter monitor program lives
ipmon_flags='-Ds' # typically '-Ds' or '-D /var/log/ipflog'
看到右边有注释了吧?如果你想要更详细的说明可以man rc.conf(PS:现在知道为什么IT人都要学E文了...
)...上面我从/etc/defaults/rc.conf中节选了两个部分,第一个部分是PC卡的控制段,第二部分是ipfilte
r系列的控制段,看出它们有什么共通点了吗?是的,它们各自的段都有相同的关键字:*_enable和*_flags。
它们是什么关系呢?*_enable关键字是击活这个段的开关(或者说是击活这种功能的开关),它的值是BOOL
值(字符串YES或者NO);*_flags则是执行这个功能所附带的参数,它的值是一串等同于在SHELL下执行该Da
emon时所使用的参数字符串。另外还有一个是非常常用的关键字(但它不是一定有的,具体哪个控制段有哪
个控制段没有可以参看/etc/defaults/rc.conf),名为*_program,它是用来定位这个要执行的Daemon的程
序的执行文件位置的。举个例子,如何你在/etc/rc.conf里添加内容为:
ipmon_enable='YES'
ipmon_program='/sbin/ipmon'
ipmon_flags='-Ds'
其实就等同于系统在启动时在SHELL下自动帮你执行:
alex# /sbin/ipmon -Ds
上面的例子为什么是在/etc/rc.conf里添加,而不是在/etc/defaults/rc.conf里添加呢?这里又引入这两个
文件之间的关系这个概念了。/etc/defaults/rc.conf是系统的默认rc.conf,当/etc/rc.conf不存在时系统
也会正常地读取rc.conf,读取的部分就是/etc/defaults/rc.conf了;若/etc/rc.conf存在,则系统读取该
文件的内容,当该文件中没有提及的其他部分的设置系统将按/etc/defaults/rc.conf来制定,也就是说/etc
/rc.conf的优先级别比/etc/defaults/rc.conf高(这就是为什么/etc/defaults/rc.conf中每个段的开关关
键字的值都为'NO'的缘故了)。上面提及的是rc.conf文件的优先问题,下面说说rc.conf中段设置的优先问
题。上面我曾说过rc.conf中每个段结构都有一个开关关键字*_enable的,当/etc/rc.conf设置启用了该段所
代表的Daemon,则系统就会向/etc/rc.conf读取下面的参数关键字,若某些关键字不存在,系统也会向/etc/
defaults/rc.conf读取参数关键字;若/etc/rc.conf设置某Daemon段的开关关键字值为'NO',则就算/etc/de
faults/rc.conf设置该开关关键字的值为'YES',系统既不会启动该Daemon也不会再向任何一个文件读取关于
该Daemon下的参数关键字的值的。还有一点是需要注意的:就是/etc/rc.conf里是可以写进SHELL脚本的(但
不推崇那么做)。

关于/etc/rc.d与/usr/local/etc/rc.d这两个目录文件的使用方法大致是相同的。在它们里面的预处理文件
必须满足三个条件:
1)都是以.sh结尾的SHELL脚本文件
2)文件的mask都有x(执行权限)
3)必须有'start'这个启动程序的参数存在
满足上面三点的话,系统在启动时会自动将这两个目录下的SHELL脚本执行以start参数形式运行。至于这个
两目录文件的不同点就是:/etc/rc.d主要用于存放操作系统级别的Daemon控制脚本,而/usr/local/etc/rc.
d则用于存放用户级别的Daemon控制脚本。所以如果是我们自己写的*.sh最好还是放在/usr/local/etc/rc.d
里。

至于最后一个介绍的文件/etc/rc.local通常是系统的预处理中最后被调用出来的,它的内容完全没什么限制
,只要是能执行SHELL脚本就可以了。
////////////////////////////////////////////////////////////////////////////////////////////////
/*Linux下的预处理机制*/

linux下与FREEBSD并不完全一样,它的主要特点是它对runlevel有非常明确的定义的。下面我就自己的LINUX
(FEDORA 2)对此发表一下自己的看法(PS:当然,不同的发行版之间是有一定的差别的)。一台PC引导LIN
UX系统的步骤应该是(下面纯粹是我个人的见解):

PC从BIOS ROM中找到硬引导设备-》从引导设备中找到MBR-》载入并初始化内核-》检测硬件设备-》建立必要
的系统进程-》(必要的手工干预)-》预处理[DAEMON等]-》多用户操作

前5步都是与预处理机制无关的,在第6部是可选的(所以用括号括起来),一但第6步正常退出,“运作的主
线”还是会回到第7步的,第7步就是本文的重点。LINUX是如何完成预处理的呢?它通常是根据一种init的机
制(PS:前面也说了,它非常的注重runlevel),首先系统在这个步骤是进行一系列有“预谋”的固定SHELL
脚本集执行,然后再根据发行版的不同而进行一些其他的预处理。

就我目前用的FEDORA 2而言,它本身也是有一套顺序的:首先执行/etc/sysconfig目录的脚本集,然后进行i
nit机制工作,最后读取一下为兼容BSD系统而设立的/etc/rc.local脚本文件(这个是可选的)。

关于/etc/sysconfig的脚本集这个是REDHAT特
温馨提示:答案为网友推荐,仅供参考

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网