init.d /脚本Fedora的解释

下面是vsftpd的一个副本,我需要一些在这个脚本中提到的一些脚本的解释:

#!/bin/bash # ### BEGIN INIT INFO # Provides: vsftpd # Required-Start: $local_fs $network $named $remote_fs $syslog # Required-Stop: $local_fs $network $named $remote_fs $syslog # Short-Description: Very Secure Ftp Daemon # Description: vsftpd is a Very Secure FTP daemon. It was written completely from # scratch ### END INIT INFO # vsftpd This shell script takes care of starting and stopping # standalone vsftpd. # # chkconfig: - 60 50 # description: Vsftpd is a ftp daemon, which is the program \ # that answers incoming ftp service requests. # processname: vsftpd # config: /etc/vsftpd/vsftpd.conf # Source function library. . /etc/rc.d/init.d/functions # Source networking configuration. . /etc/sysconfig/network RETVAL=0 prog="vsftpd" start() { # Start daemons. # Check that networking is up. [ ${NETWORKING} = "no" ] && exit 1 [ -x /usr/sbin/vsftpd ] || exit 1 if [ -d /etc/vsftpd ] ; then CONFS=`ls /etc/vsftpd/*.conf 2>/dev/null` [ -z "$CONFS" ] && exit 6 for i in $CONFS; do site=`basename $i .conf` echo -n $"Starting $prog for $site: " daemon /usr/sbin/vsftpd $i RETVAL=$? echo if [ $RETVAL -eq 0 ]; then touch /var/lock/subsys/$prog break else if [ -f /var/lock/subsys/$prog ]; then RETVAL=0 break fi fi done else RETVAL=1 fi return $RETVAL } stop() { # Stop daemons. echo -n $"Shutting down $prog: " killproc $prog RETVAL=$? echo [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/$prog return $RETVAL } # See how we were called. case "$1" in start) start ;; stop) stop ;; restart|reload) stop start RETVAL=$? ;; condrestart|try-restart|force-reload) if [ -f /var/lock/subsys/$prog ]; then stop start RETVAL=$? fi ;; status) status $prog RETVAL=$? ;; *) echo $"Usage: $0 {start|stop|restart|try-restart|force-reload|status}" exit 1 esac exit $RETVAL 

问题一

&&和||之间的区别是什么? 在下面的命令中签名,这只是一个简单的方法来做一个简单的检查,或者是完全不同的一个if[..something..]; then ..something.. fi if[..something..]; then ..something.. fi

 # Check that networking is up. [ ${NETWORKING} = "no" ] && exit 1 [ -x /usr/sbin/vsftpd ] || exit 1 

问题二

我得到什么-eq-gt是( equal togreater than ),但有一个简单的网站,解释什么-x-d-f是?

问题三

它说,所需的启动是$local_fs $network $named $remote_fs $syslog但我不能看到任何地方检查这些。

任何帮助将是apreciated

在我的操作系统上运行Fedora 12。 从/etc/init.d/vsftpd复制的脚本

回答我

这只是一个速记符号。

这里:

 [ ${NETWORKING} = "no" ] && exit 1 

它检查${NETWORKING}是否设置为"no" 。 如果这返回false(networking启用),那么第二部分不会被评估(出口1),因为它已经是假的(&&,逻辑连接)。

反过来说:

 [ -x /usr/sbin/vsftpd ] || exit 1 

我们有“或”在这里。 所以,基本上,如果vsftpd存在,那么第一部分是真实的,没有进一步的检查(无退出)。

答案二

男子testing :

  -x FILE FILE exists and execute (or search) permission is granted -d FILE FILE exists and is a directory -f FILE FILE exists and is a regular file 

答案三

这些部分应该从外部parsing。 有关LSB标题的更多信息,请参阅此处。

这些都是与bash有关的问题,所以你的主要信息来源应该是一个man bash (我同意可以是一个非常…强烈的经验)。

至于你的问题:

  • 语法是“if […]”的快捷方式,所以实际上一个有条件的检查; “&&”表示“和”和“||” 意思是“或”(如在C派生语言中),如果第一个操作数足以产生答案,那么这两个操作符都不会评估它们的第二个操作数。 因此,如果networking连接到“&&”之后的指令将不会被执行(如果其第一个操作数为假,则条件不成立),而如果文件“vsftpd”存在,则脚本不会退出如果它的第一个操作数是真的,则为真)。 这个语法(使用条件来实际执行某些操作)是从C中突变出来的,它被认为是混淆的,但被C黑客非常聪明地使用。
  • “-x”检查是否存在可执行文件,“-d”检查是否存在目录,“-f”检查是否存在文件。
  • 顶部的注释部分实际上并不包含注释:它们是chkconfig服务pipe理器的指令,它将处理依赖关系以及基于这些“注释”的服务的启动/closures顺序。 是的,我同意这也相当混乱。