Fedora 中 init.d/scripts 的解释

Fedora 中 init.d/scripts 的解释

下面是 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 检查的简单方法,还是与以下完全不同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但我看不到任何地方检查这些。

任何帮助都将不胜感激

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

答案1

答案一

这只是一种简写符号。

这里:

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

检查是否${NETWORKING}设置为"no"。如果返回 false(网络已启用),则第二部分不会被评估(退出 1),因为它已经为 false(&&,逻辑与)。

反过来说:

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

这里我们有“或”。因此,基本上,如果vsftpd存在,则第一部分为真,不再进行进一步检查(不退出)。

答案二

男人测试

   -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

答案三

这些部分应该由外部解析。有关更多信息,请参阅此处LSB 标头

答案2

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

至于你的问题:

  • [...] 语法是“if [...]”的快捷方式,因此实际上条件检查;“&&”表示“与”,“||”表示“或”(与 C 语言类似),这两个运算符如果第一个操作数足以产生答案,则评估它们的第二个操作数;因此,如果网络已启动,则“&&”之后的指令将不是被执行(如果第一个操作数为假,则 and 条件不能为真),而如果文件“vsftpd”存在,则脚本将不会退出(或条件在其第一个操作数为真时为真)。此语法(使用条件来实际某种东西(英语:something)是从 C 语言变异而来的,C 语言黑客认为它很令人困惑,但又非常聪明。
  • “-x”检查可执行文件是否存在,“-d”检查目录是否存在,“-f”检查文件是否存在。
  • 顶部的注释部分实际上不是注释:它们是chkconfig服务管理器的指令,服务管理器将根据这些“注释”处理依赖关系以及服务的启动/关闭顺序。是的,我也同意这很令人困惑。

相关内容