2011年4月

脚本如下:

#!/bin/bash
#test $() and ${} and $(())  useges
#by:key1088@163.com
#mail:key1088@163.com


file=$(pwd)
echo $file
echo
echo '${file#*/}'
echo ${file#*/}
echo

echo '${file##*/}'
echo ${file##*/}
echo

echo '$(file%/*)'
echo ${file%%/*}
echo

echo '${file/cis7/cis8/}'
echo ${file/cis7/cis8/}
echo

echo '${file//cis7/cis8/}'
echo ${file//cis7/cis8/}
echo

echo '${file:0:5}'
echo ${file:0:5}
echo

echo '${file:5:5}'
echo ${file:5:5}
echo

echo '$(#file)'
echo ${#file}
echo

echo " define arry=(a b c d)"
arry=(a b c d)
echo '$arry'
echo $arry
echo
echo '${arry[*]}'
echo ${arry[*]}
echo

echp "define arry="a b c d""
arry="a b c d"
echo '$arry'
echo $arry
echo

a=1
b=2

echo
echo '$(($a+$b))'
echo $(($a+$b))

echo
echo '$((a+1))'
echo $((a+1))  

#((i++))

#echo $i

 

 

脚本执行

shell>./text.sh

/videodata/cis7/pmkz/cis7

${file#*/}
videodata/cis7/pmkz/cis7

${file##*/}
cis7

$(file%/*)


${file/cis7/cis8/}
/videodata/cis8//pmkz/cis7

${file//cis7/cis8/}
/videodata/cis8//pmkz/cis8/

${file:0:5}
/vide

${file:5:5}
odata

$(#file)
25

 define arry=(a b c d)
$arry
a

${arry[*]}
a b c d

./test.sh: line 51: echp: command not found
$arry
a b c d


$(($a+$b))
3

$((a++))
2

#!/bin/sh
#This is check msyqld shell
#by:key1088@163.com
#守护mysqld脚本,防止意外崩溃。
#如果连接启动10次,依旧启动不来了。停止(可以写成运行某个程序),解决内存。
 
ERRLOG=/videodata/mysqldata/data/CHINASOFT.err
load_mysqld ()
{
/etc/init.d/mysqld start
}

while  true
do
  i=1
  PRO=ps aux|grep mysqld|grep -v grep
  if [ -z "$PRO" ]
  then
      while true
      do
          if [ -z "$PRO" ]
          then
            load_mysqld
            echo "date +'%y%m%d %H:%M:%S'   $0 LOAD MSYQLD-[$i]" >> $ERRLOG
            sleep 20
            PRO=ps aux|grep mysqld|grep -v grep
            if [ -z "$PRO" ]
            then   
                i=$((i+1))
            fi
          else
            break
          fi
         
          if [ $i -eq 10 ]
          then
          echo "date +'%y%m%d %H:%M:%S' HR_MYSQL_SAFE.SH LOAD MSQQLD --STOP" >> $ERRLOG
          exit 1
          fi
      done
  fi
  sleep 20
done

MySQL中my.cnf文件选项
mysqld服务器维护两种变量。全局变量影响服务器的全局操作。会话变量影响具体客户端连接相关操作。
可以在选项文件或命令行中设置全局变量。
用Set命令设置会话变量,当然它也可以设置全局变量。
就像oracle里面的初始化参数文件一样。下面是一些常用的选项说明,MySQL的管方文档上也有。



mysql> SET GLOBAL sort_buffer_size = 10 * 1024 * 1024;
mysql> SET SESSION sort_buffer_size = 10 * 1024 * 1024;
如果你想用SET语句限制系统变量可设的最大值,可以在服务器启动时通过--maximum-var_name形式的选项来指定。
例如,要想防止query_cache_size的值运行时超过32MB,使用选项--maximum-query_cache_size=32M。
mysqld_safe选项
--basedir=path
MySQL安装目录的路径。
--core-file-size
mysqld能够创建的内核文件的大小。选项值传递给ulimit -c。
--datadir=path
数据目录的路径。
--defaults-file=path
读取的代替通用选项文件的选项文件名。如果给出,必须首选该选项。
--log-error=path
将错误日志写入给定的文件。
-nice=priority
使用nice程序根据给定值来设置服务器的调度优先级。
--open-files-limit=count
mysqld能够打开的文件的数量。选项值传递给 ulimit -n。请注意你需要用root启动mysqld_safe来保证正确工作!
--pid-file=path
进程ID文件的路径。
--port=port_num
用来帧听TCP/IP连接的端口号。端口号必须为1024或更大值,除非MySQL以root系统用户运行。
每个mysqld的Unix套接字文件和TCP/IP端口号必须不同。
--ledir=path
包含mysqld程序的目录的路径。使用该选项来显式表示服务器位置。
--no-defaults
不要读任何选项文件。如果给出,必须首选该选项。
--skip-character-set-client-handshake
忽略客户端发送的字符集信息,使用服务器的默认字符集。
--socket=path
用于本地连接的Unix套接字文件。
每个mysqld的Unix套接字文件和TCP/IP端口号必须不同。
--timezone=zone
为给定的选项值设置TZ时区环境变量。
--user={user_name | user_id}
以用户名user_name或数字用户ID user_id运行mysqld服务器。
该"用户"指系统登录账户,而不是 授权表中的MySQL用户。
mysqld命令行选项
mysqld从[mysqld]和[server]组读取选项
--ansi
使用标准(ANSI)SQL语法代替MySQL语法。
--basedir=path, -b path
MySQL安装目录的路径。通常所有路径根据该路径来解析。
--bootstrap
mysql_install_db脚本使用该选项来创建MySQL授权表,不需要启动MySQL服务器
--console
将错误日志消息写入stderr和stdout,即使指定了--log-error。
--character_sets_dir=path
字符集安装的目录。
--chroot=path
通过chroot()系统调用在启动过程中将mysqld服务器放入一个封闭环境中。这是推荐的一个安全措施。请注意使用该选项可以 限制LOAD DATA INFILE和SELECT ... INTO OUTFILE。
--character_set_server=charset
使用charset作为 默认服务器字符集。
--core_file
如果mysqld终止,写内核文件。
--datadir=path, -h path
数据目录的路径。
--default_table_type=type
设置表的默认类型。
--debug[=debug_options], -# [debug_options]
如果MySQL配置了--with-debug,你可以使用该选项来获得一个跟踪文件,跟踪mysqld正进行的操作。debug_options字符串通常为'd:t:o,file_name'。
--default_time_zone=type
设置默认服务器时区。该选项设置全局time_zone系统变量。默认时区与系统时区相同(用system_time_zone系统变量值给定)
--delay_key_write[= OFF | ON | ALL]
如何使用DELAYED KEYS选项。键写入延迟会造成再次写MyISAM表时键缓冲区不能被清空。该选项只适用MyISAM表。
OFF DELAY_KEY_WRITE被忽略。
ON MySQL在CREATE TABLE中用DELAY_KEY_WRITE选项。这是 默认值。
ALL 用启用DELAY_KEY_WRITE选项创建表的相同方法对所有新打开表的进行处理。
如果启用了DELAY_KEY_WRITE,说明使用该项的表的键缓冲区在每次更新索引时不被清空,只有关闭表时才清空。
但如果你使用该特性,你应用--myisam_recover选项启动服务器,为所有MyISAM表添加自动检查。
--external_locking
用系统锁定。请注意如果你在lockd不能完全工作的系统上使用该选项(例如在Linux中),mysqld容易死锁。
如果你在许多MySQL进程中使用该选项来更新MyISAM表,你必须确保满足下述条件:
使用正被另一个进程更新的表的查询的缓存不可使用。
不应在共享表中使用--delay-key-write=ALL或DELAY_KEY_WRITE=1。
最简单的方法是结合使用--external-locking和--delay-key-write=OFF --query-cache-size=0。
(默认不能实现,因为在许多设置中,结合使用上述选项很有用)。
--flush
执行SQL语句后向硬盘上清空更改。一般情况执行SQL语句后 MySQL向硬盘写入所有更改,让操作系统处理与硬盘的同步。
--init_file=file
启动时从该文件读SQL语句。每个语句必须在同一行中并且不应包括注释。
--language=lang_name, -L lang_name
用给定语言给出客户端错误消息。默认情况下,mysqld用英语给出错误消息。
--large_pages
一些硬件/操作系统架构支持大于 默认值(通常4 KB)的内存页。实际支持取决于使用的硬件和OS。
大量访问内存的应用程序通过 使用较大的页,降低了Translation Lookaside Buffer (TLB)损失,可以改善性能。
默认情况下该选项被禁用。
---log[=file], -l [file]
如果你想要知道mysqld内部发生了什么,你应该用--log[=file_name]或-l [file_name]选项启动它。如果没有给定file_name的值, 默认名是host_name.log。所有连接和语句被记录到日志文件。当你怀疑在客户端发生了错误并想确切地知道该客户端发送给mysqld的语句时,该日志可能非常有用。
mysqld按照它接收的顺序记录语句到查询日志。这可能与执行的顺序不同。
--log_bin=[file]
二进制日志文件。将更改数据的所有查询记入该文件。用于备份和复制。
建议指定一个文件名,否则MySQL使用host_name-bin作为日志文件基本名。
运行服务器时若启用二进制日志则性能大约慢1%。
--binlog_do_db=db_name
告诉主服务器,如果当前的数据库(即USE选定的数据库)是db_name,应将更新记录到二进制日志中。
--binlog_ignore_db=db_name
告诉主服务器,如果当前的数据库(即USE选定的数据库)是db_name,不应将更新保存到二进制日志中。
--log_error[=file]
该文件的日志错误和启动消息.
如果你不指定文件名,MySQL使用host_name.err作为文件名。如果文件名没有扩展名,则加上.err扩展名。
--log_isam[=file]
将所有MyISAM更改记入该文件
--log_slow_queries[=file]
将所有执行时间超过long_query_time 秒的查询记入该文件。
--log_warnings, -W
将警告例如Aborted connection...打印到错误日志。建议启用该选项,默认也是启用的。
--memlock
将mysqld 进程锁定在内存中。请注意使用该选项时需要以root运行服务器,但从安全考虑并不是一个好注意。
--myisam_recover [=option[,option...]]]
存储引擎MyISAM设置为恢复模式。该选项值是DEFAULT、BACKUP、FORCE或QUICK值的任何组合。
如果你指定多个值,用逗号

二元比较操作符,比较变量或者比较数字.注意数字与字符串的区别. 
整数比较 
-eq       等于,如:if [ "$a" -eq "$b" ] -ne       不等于,如:if [ "$a" -ne "$b" ] -gt       大于,如:if [ "$a" -gt "$b" ] -ge       大于等于,如:if [ "$a" -ge "$b" ] -lt       小于,如:if [ "$a" -lt "$b" ] -le       小于等于,如:if [ "$a" -le "$b" ] <       小于(需要双括号),如:(("$a" < "$b")) <=       小于等于(需要双括号),如:(("$a" <= "$b")) >       大于(需要双括号),如:(("$a" > "$b")) >=       大于等于(需要双括号),如:(("$a" >= "$b")) 
字符串比较 =       等于,如:if [ "$a" = "$b" ] ==       等于,如:if [ "$a" == "$b" ],与=等价        注意:==的功能在[[]]和[]中的行为是不同的,如下:        1 [[ $a == z* ]]    # 如果$a以"z"开头(模式匹配)那么将为true        2 [[ $a == "z*" ]] # 如果$a等于z*(字符匹配),那么结果为true        3        4 [ $a == z* ]      # File globbing 和word splitting将会发生        5 [ "$a" == "z*" ] # 如果$a等于z*(字符匹配),那么结果为true        一点解释,关于File globbing是一种关于文件的速记法,比如"*.c"就是,再如~也是.        但是file globbing并不是严格的正则表达式,虽然绝大多数情况下结构比较像. !=       不等于,如:if [ "$a" != "$b" ]        这个操作符将在[[]]结构中使用模式匹配. <       小于,在ASCII字母顺序下.如:        if [[ "$a" < "$b" ]]        if [ "$a" < "$b" ]        注意:在[]结构中"<"需要被转义. >       大于,在ASCII字母顺序下.如:        if [[ "$a" > "$b" ]]        if [ "$a" > "$b" ]        注意:在[]结构中">"需要被转义. -z       字符串为"null".就是长度为0. -n       字符串不为"null"

  Linux

    服务器在启动时需要启动很多系统服务,它们向本地和网络用户提供了Linux的系统功能接口,直接面向应用程序和用户。提供这些服务的程序是由运行在后台的守护进程(daemons)

    来执行的。守护进程是生存期长的一种进程。它们独立于控制终端并且周期性的执行某种任务或等待处理某些发生的事件。他们常常在系统引导装入时启动,在系统

    关闭时终止。linux系统有很多守护进程,大多数服务器都是用守护进程实现的。同时,守护进程完成许多系统任务,比如,作业规划进程crond、打印进

    程lqd等。有些书籍和资料也把守护进程称作:“服务”。选择运行哪些守护进程,要根据具体需求决定。查看系统可以提供的守护进程对应的服务,使用下面方

    法,以root权限运行:

    #ntsysv

    

    

     图1 可以选择的系统服务

     界面如图1所示的窗口,下面详细介绍一下各项系统服务的功能。以英文字母为序:

     一、Linux守护进程简介

    1.alsasound

    :Alsa声卡驱动守护程序。Alsa声卡驱动程序本来是为了 一种声卡Gravis UltraSound(GUS)而写的,该程序被证

    明很优秀,于是作者就开始为一般的声卡写 驱动程序。 Alsa和OSS/Free 及OSS/Linux兼容,但是有自己的接

    口,甚至比OSS优秀。

    2.acpid:acpid(Advanced Configuration and Power Interface)是为替代传统的

    AP

    M电源管理标准而推出的新型电源管理标准。通常笔记本电脑需要启动电源进行管理。

    3.atalk:AppleTalk网络守护进程。注意不要在后台运行该程序,该程序的数据结构必须在运行其他进程前先花一定时间初始化。

    4.

    amd

    : 自动安装NFS守护进程。

    5.anacron:

    一个自动化运行任务守护进程。Red Hat Linux 随带四个自动化任务的工具:cron、 anacron、at、和

    batc。当你的Linux服务器并不是全天运行,这个anacron就可以帮你执行在"crontab"设定的时间内没有执行的工作。

    6.apmd:apmd(Advanced Power Management)是高级电源管理。传统的电源管理标准,对于笔记本电脑比较有用,可以了解系统的电池电量信息。并将相关信息通过syslogd 写入日志。也可以用来在电源不足时关机。

    7.

    arp

    tables_jf :为arptables网络的用户控制过滤的守护进程。

    8.arpwatch: 记录日志并构建一个在LAN接口上看到的以太网地址和IP地址对

    数据库

    

    atd:at和batch命令守护进程,用户用at命令调度的任务。Batch用于在系统负荷比较低时 运行批处理任务。

    9.autofs:自动安装管理进程automount,与NFS相关,依赖于NIS服务器。

    10.bootparamd:引导参数服务器,为LAN上的无盘工作站提供引导所需的相关信息。

    11.bluetooch:蓝牙服务器守护进程。

    12.crond :cron是

    Unix

    下的一个传统程序,该程序周期地运行用户 调度的任务。比起传统的Unix版本,Linux版本添加了不少属性,而且更安全,配置更简单。类似计划任务。

    13.chargen:使用tcp协议的chargen server,chargen(Character Generator

    Pro

    tocol)是一种网络服务,主要功能是提供类似远程打字的功能。

    14.chargen-udp:使用UDP协议的chargen server。

    15.cpuspeed:监测系统空闲百分比,降低或加快CPU时钟速度和电压从而在系统空闲时将能源消耗降为最小,而在系统繁忙时最大化加快系统执行速度。

    16.dhcpd:动态主机控制协议(Dynamic Host Control Protocol)的服务守护进程。

    17.cups: cups(Common UNIX Printing System)是通用UNIX打印守护进程,为Linux提供第三代打印功能。

    18.cups-config-daemons:cups打印系统切换守护进程。

    19.cups-lpd:cups行打印守护进程。

    20.daytime:使用TCP 协议的Daytime守护进程,该协议为客户机实现从远程服务器获取日期 和时间的功能。预设端口:13。

    21.daytime-udp:使用UDP 协议的Daytime守护进程。

    22.dc_server:使用SSL安全套接字的代理服务器守护进程。

    23.dc_cl

    ie

    nt:使用SSL安全套接字的客户端守护进程。

    24.diskdump:服务器磁盘备份守护进程。

    25.echo:服务器回显客户数据服务守护进程。

    26.echo-udp:使用UDP协议的服务器回显客户数据服务守护进程。

    27.eklogin:接受rlogin会话鉴证和用kerberos5加密的一种服务的守护进程。

    28.gated :网关路由守护进程。它支持各种路由协议,包括RIP版本1和2、DCN HELLO协议、 OSPF版本2以及EGP版本2到4。

    29.gpm:gpm(General Purpose Mouse Daemon )守护进程为文本模式下的Linux程序如mc(Midnight Commander)提供了鼠标的支持。它也支持控制台下鼠标 的拷贝,粘贴操作以及弹出式菜单。

    30.gssftp: 使用kerberos 5认证的ftp守护进程

    31.httpd:Web服务器Apache守护进程,可用来提供HTML文件以 及CGI动态内容服务。

    32.inetd :因特网操作守护程序。监控网络对各种它管理的服务的需求,并在必要的时候启动相应的服务程序。在Redhat 和Mandrake linux中被
xinetd代替。Debian, Slackware,

    SuSE

    仍然使用。

    33.innd:Usenet新闻服务器守护进程。

    34.

    ii

    im:中文输入法服务器守护进程。

    35.iptables:iptables防火墙守护进程。

    36.irda:红外端口守护进程。

    37.i

    sd

    n:isdn启动和中止服务守护进程。

    38.krb5-telnet:使用kerberos 5认证的telnet守护进程。

    39.klogin:远程登陆守护进程。

    40.keytable: 该进程的功能是转载在/etc/sysconfig/keyboards里定义的键盘映射表,该表可以通过kbdconfig工具进行选择。您应该使该程序处于激活状态。

    41.irqbalance:对多个系统处理器环境下的系统中断请求进行负载平衡的守护程序。如果你只安装了一个CPU,就不需要加载这个守护程序。

    42.kshell :kshell守护进程。

    43.kudzu:

    硬件自动检测程序,会自动检测硬件是否发生变动,并相应进行硬件的添加、删除工作。当系统启动时,kudzu会对当前的硬件进行检测,并且和存储

    在

    /etc/sysconfig/hwconf中的硬件信息进行对照,如果某个硬件从系统中被添加或者删除时,那么kudzu就会察觉到,并且通知用户是否

    进行相关配置,然后修改etc/sysconfig/hwconf,使硬件资料与系统保持同步。如果/etc/sysconfig/hwconf这个文件

    不存在,那么kudzu将会从/etc/modprobe.conf,/etc/sysconfig/network-scripts/和

    etc/X11/XF86Config中探测已经存在的硬件。如果你不打算增加新硬件,那么就可以关闭这个启动服务,以加快系统启动时间。

    44.ldap:ldap(Lightweight Directory Access Protocol)目录访问协议服务器守护进程。

    45.lm_ser

    oem

    s:检测主板工作情况守护进程。

    46.lpd :lpd是老式打印守护程序,负责将lpr等程序提交给打印 作业。

    47.mdmonitor:RAID相关设备的守护程序。

    48.messagebus:D-

    BUS是一个库,为两个或两个以上的应用程序提供一对一的通讯。

    dbus-daemon-1是一个应用程序,它使用这个库来实现messagebus守护程序。多个应用程序通过连接messagebus守护程序可以实

    现与其他程序交换信息。

    49.microcode_ctl:可编码以及发送新的微代码到内核以更新

    Intel

     IA32系列处理器守护进程。

    50.mysqld: 一个快速高效可靠的轻型SQL数据库引擎守护进程。

    51.named:DNS(BIND)服务器守护进程。

    52.netplugd:netplugd(network

    ca

    ble hotplug management daemon)守护程序,用于监控一个或多个网络接口的状态,当某些事件触发时运行一个外部脚本程序。

    53.netdump:远程网络备份服务器守护进程。

    54.netfs:Network Filesystem Mounter,该进程安装和卸载NFS、SAMBA和NCP网络文件系统。

    55.nfs:网络文件系统守护进程。

    56.nfslock:NFS是一个流行的通过TCP/IP网络共享文件的协议,此守护进程提供了NFS文件锁定功能。

    57.ntpd:Network time Protocol daemon(网络时间校正协议)。ntpd是用来使系统和一个精确的时间源保持时间同步的协议守护进程。

    58.network:激活/关闭启动时的各个网络接口守护进程。

    59.psacct:该守护进程包括几个工具用来监控进程活动的工具,包括ac,lastcomm, accton 和sa。

    60.pcmcia:主要用于支持笔记本电脑接口守护进程。

    61.portmap:该守护进程用来支持RPC连接,RPC被用于NFS以及NIS 等服务。

    62.postgresql: PostgreSQL 关系数据库引擎。

    63.proftpd: proftpd 是Unix下的一个配置灵活的ftp服务器的守护程序。

    64.pppoe:

    ADSL

    连接守护进程。

    65.random :保存和恢复系统的高质量随机数生成器,这些随机数是系 统一些随机行为提供的。

    66.rawdevices:在使用集群文件系统时用于加载raw设备的守护进程。

    67.readahead、

    readahead_early:readahead和readahead_early是在Fedora core

    2中最新推出的两个后台运行的守护程序。其作用是在启动系统期间,将启动系统所要用到的文件首先读取到内存中,然后在内存中进行执行,以加快系统的启动速

    度。

    68.rhnsd:Red Hat 网络服务守护进程。通知官方的安全信息以及为系统打补丁。

    69.routed :该守护程序支持RIP协议的自动IP路由表维护。RIP主要 使用在小型网络上,大一点的网络就需要复杂一点的协议。

    70.rsync:remote sync远程数据备份守护进程。

    71.rsh :远程主机上启动一个shell,并执行用户命令。

    72.rwhod: 允许远程用户获得运行rwho守护程序的机器上所有已登录用户的列表。

    73.rstatd:一个为LAN上的其它机器收集和提供系统信息的守候进程。

    74.ruserd:远程用户定位服务,这是一个基于RPC的服务,它提供关于当前记录到LAN上一个机器日志中的用户信息

    75.rwalld:激活rpc.rwall服务进程,这是一项基于RPC的服务,允许用户给每个注册到LAN机器上的其他终端写消息 。

    76.rwhod:激活rwhod服务进程,它支持LAN的rwho和ruptime服务。

    77.saslauthd: 使用SASL的认证守护进程。

    78.sendmail:邮件服务器sendmail守护进程。

    79.smb:Samba文件共享/打印服务守护进程。

  
;  80.snmpd:本地简单网络管理守护进程。

    81.squid:代理服务器squid守护进程。

    82.sshd:OpenSSH服务器守护进程。Secure Shell Protocol可以实现安全地远程管理主机。

    83.smartd:Self Monitor Analysis and Reporting Technology System,监控你的

    硬盘

    是否出现故障。

    84.syslog:一个让系统引导时起动syslog和klogd系统日志守候进程的脚本。

    85.time :该守护进程从远程主机获取时间和日期,采用TCP协议。

    86.time-udp: 该守护进程从远程主机获取时间和日期,采用UDP协议。

    87.tux:在Linux内核中运行apache服务器的守护进程。

    88.vsftpd:vsftpd服务器的守护进程。

    89.vncserver: VNC (Virtual Network Computing,虚拟网络计算),它提供了一种在本地系统上显示远程计算机整个"桌面"的轻量型协议。

    90.xfs:X Window字型服务器守护进程,为本地和远程X服务器提供字型集。

    91.xinetd:支持多种网络服务的核心守护进程。

    92.ypbind:为NIS(网络信息系统)客户机激活ypbind服务进程 。

    93.yppasswdd:NIS口令服务器守护进程。

    94.ypserv:NIS主服务器守护进程。

    95.yum:

    RPM

    

    操作系统

    自动升级和软件包管理守护进程。

     二、守护进程工作原理和方式

     在Cl

    ie

    nt/Server模式下。服务器监听(Listen)在一个特定的端口上等待客户连接。连接成功后服务器和客户端通过端口进行数据通信。守护进程的工作就是打开一个端口,并且等待(Listen)进入连接。如果客户端产生一个连接请求,守护进程就创建(Fork)一个子服务器响应这个连接,而主服务器继续监听其他的服务请求。

    2.守护进程工作方式:

    (1)运行独立的守护进程

     独立运行的守护进程由init脚本负责管理,所有独立运行的守护进程的脚本在/etc/rc.d/init.d/目录下。系统服务都是独立运行的守护进程包括:syslogd和cron等。运行独立的守护进程工作方式称作:stand-alone。它

    Unix

    传

    统的C/S模式的访问模式。服务器监听(Listen)在一个特点的端口上等待客户端的联机。如果客户端产生一个连接请求,守护进程就创建(Fork)一

    个子服务器响应这个连接,而主服务器继续监听。以保持多个子服务器池等待下一个客户端请求。stand-alone模式工作原理见图1。

    

    

     图1 stand-alone工作模式

    工作在stand-alone模式下的网络服务有route、gated。另外是大家最熟悉是Web服务器:

    Ap

    ache和邮件服务器Sendmail、域名服务器Bind。因为这些负载很大服务器上,预先创子服务器,可以通过客户的服务速度。在

    Linux

    系统中通过stand-alone工作模式启动的服务由/etc/rc.d/下面对应的运行级别当中的符号链接启动。

    (2)xinetd模式

    从守护进程的概念可以看出,对于系统所要通过的每一种服务,都必须运行

    一个监听某个端口连接所发生的守护进程,这通常意味着资源浪费。为了解决这个问题,Linux引进了“网络守护进程服务程序”的概念。Redhat

    Linux 9.0使用的网络守护进程是xinted(eXtended InterNET

    daemon)。和stand-alone模式相比xinted模式也称 Internet

    Super-Server(超级服务器)。xinetd能够同时监听多个指定的端口,在接受用户请求时,他能够根据用户请求的端口不同,启动不同的网络服

    务进程来处理这些用户请求。可以把xinetd看做一个管理启动服务的管理服务器,它决定把一个客户请求交给那个程序处理,然后启动相应的守护进程。

    xinetd模式工作原理见图3。

    

    

     图3 xinetd工作模式

    和

    stand-alone工作模式相比,系统不想要每一个网络服务进程都监听其服务端口。运行单个xinetd就可以同时监听所有服务端口,这样就降低了系

    统开销,保护系统资源。但是对于访问量大、经常出现并发访问时,xinetd想要频繁启动对应的网络服务进程,反而会导致系统性能下降。察看系统为

    Linux服务提供那种模式方法在Linux命令行可以使用pstree命令可以看到两种不同方式启动的网络服务。一般来说系统一些负载高的服

    务:sendmail、Apache服务是单独启动的。而其他服务类型都可以使用xinetd超级服务器管理。查看目前运行的守护进程可以使用命

    令:“pstree”

    三、守护进程管理工具

    Linux提供了三种不同的守护进程管理工具:redhat-config-services、ntsysv、chkconfig,可以根据具体需要灵活运用。

    (1) redhat-config-services

     redhat-config-services

    是一个一个图形化应用程序,它显示了每项服务的描述,以及每项服务是否在引导时启动(运行级别3、4、5),并允许你启动、停止、或重新启动/etc

    /rc.d/init.d 中的哪些 SysV 服务,哪些 xinetd 服务。要从桌面启动服务配置工具,点击面板上的「主菜单」 =>

    「系统设置」 => 「服务器设置」 => 「服务」,或在 shell

    提示下,键入命令:“redhat-config-services” (见图4)。

     mg src="http://img.20202060.xyz/wp-content/uploads/pic/0d2a1924d14d7554908f9d56.jpg" />

    

     图4 redhat-config-services配置工具

     redhat-

    config-services列出了 /etc/rc.d/init.d 中的服务和由 xinetd

    控制的服务。点击左侧列表中的服务名来显示该服务的简短描述以及它的服务状态。如果这个服务不是 xinetd

    服务,状态窗口会显示该服务目前是否在运行。如果该服务被 xinetd 所控制,状态窗口会显示「xinetd

    服务」这个短语。要立即启动、停止、或重新启动某项服务,从列表中选择该项服务,然后点击工具栏上的相应按钮(或从「行动」拉下菜单中选择行动)。如果该

    服务是一个 xinetd 服务,行动按钮会被禁用,因为它们不能被单个地启动或停止。 如果你通过选择或取消选择服务名旁的复选箱来启用或禁用了

    xinetd 服务,你必须从拉下菜单中选择「文件」 => 「保存改变」来重新启动 xinetd,并立即启用或禁用你所改变的 xinetd

    服务。xinetd 还被配置成自动记忆设置。你可以同时启用或禁用多个 xinetd 服务,在结束后再保存改变。

     (2)ntsysv

     ntsysv

    工具为激活或停运服务提供了简单的界面。你可以使用 ntsysv 来启动或关闭由 xinetd 管理的服务。你还可以使用 ntsysv

    来配置运行级别。按照默认设置,只有当前运行级别会被配置。要配置不同的运行级别,使用 --level 选项来指定一个或多个运行级别。譬如,命令

    ntsysv --level 345 配置运行级别3、4、和5。 ntsysv

    的工作界面见图1。使用上下箭头来上下查看列表。使用空格键来选择或取消选择服务,或用来“按”「确定」和「取消」按钮。要在服务列表和「确定」、「取

    消」按钮中切换,使用 [Tab]键。* 标明某服务被设为启动。[F1] 键会弹出每项服务的简短描述。

    (3)chkconfig

     chkconfig

    命令也可以用来激活和解除服务。chkconfig --list

    命令显示系统服务列表,以及这些服务在运行级别0到6中已被启动(on)还是停止(off)。chkconfig

    还能用来设置某一服务在某一指定的运行级别内被启动还是被停运。譬如,要在运行级别3、4、5中停运 nfs 服务,使用下面的命令:

    chkconfig --level 345 nfs off

     再结合一下脚本,需求不一样,自行修改。

     http://hi.baidu.com/key1088/blog/item/1e1cc63231a703b95fdf0e71.html

     四、合理选择守护进程规避安全隐患

     运行不必要或有漏洞的守护进程会给

    操作系统

    

    来安全和性能上的影响。对于系统安全来说,如果操作系统中的任何一个漏洞,都可能使整个系统受到攻击。所以,增加系统安全的最佳办法就是尽量监视系统的功

    能。文章开始介绍了重要的守护进程,其中“crond、syslog、keytable、xinetd、kudzu、iptables”等是需要运行

    的,echo、echo-udp、daytime、daytime-udp、chargen、chargen-udp主要是做调试用,普通用户基本用不

    到,可以关闭。

     r字开头的守护进程:rsh、rstatd、rsync、ruser

    sd

    、

    rwalld这些命令都是Berkley远程命令,因为都以字母r开头,故称r*命令。主要使用来使一台计算机上的某个用户以相同的帐户远程执行另一台计

    算机的一个程序。但是,r命令已经被证实存在安全风险。对于确实需要的守护进程,应该尽量选用最新的版本程序,并增加其安全防范。

     另外我们还要合理选择守护进程例如innd是运行新闻组服务的进程,如果用户不做Usenet服务器,应该关掉。

    

    总结:

     基于开放源代码的Linux给用户提供了这样一个平台:可以根据自己的软、硬件环境,定制自己的Linux守护进程。因此,根据每个用户不同的应用范围定制应用环境,可以将Linux系统的安全和性能提升到新的高度。