Объяснение 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:

# Check that networking is up.
    [ ${NETWORKING} = "no" ] && exit 1

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

Вопрос II

я понял что -eq а также -gt является (equal to, greater than) но есть простой сайт, который объясняет, что -x, -d а также -f являются?

Вопрос III

Он говорит, что необходимые старты $local_fs $network $named $remote_fs $syslog но я не могу видеть, где он проверяет те.

Любая помощь будет оценена

Запуск Fedora 12 на моей ОС. Сценарий скопирован с /etc/init.d/vsftpd

2 ответа

Решение

Ответь я

Это просто сокращенная запись.

Вот:

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

Это проверяет, если ${NETWORKING} установлен в "no", Если это возвращает false (сеть включена), то вторая часть не оценивается (выход 1), потому что это уже false (&&, логическое соединение).

И наоборот:

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

У нас есть "или" здесь. Таким образом, в основном, если vsftpd существует, то первая часть верна и дальнейшие проверки не выполняются (нет выхода).

Ответ II

человек тест:

   -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

Ответ III

Эти части должны быть проанализированы извне. Смотрите здесь для получения дополнительной информации о заголовках LSB.

Все эти вопросы связаны с bash, поэтому вашим основным источником информации должен быть man bash (что я согласен, может быть очень... интенсивным опытом).

Что касается ваших вопросов:

  • Синтаксис [...] является сокращением для "если [...]", так что на самом деле это условная проверка; "&&" означает "и" и "||" означает "или" (как в языках, производных от C), и оба эти оператора не оценивают свой второй операнд, если первого достаточно для получения ответа; таким образом, если сеть работает, инструкция после "&&" не будет выполнена (условие and не может быть истинным, если его первый операнд равен false), а если файл "vsftpd" существует, скрипт не завершится (условие или истинно, если его первый операнд истинен). Этот синтаксис (использующий условное выражение для фактического выполнения чего-либо) мутирует с C, и хакеры C считают его запутанным, но очень умным.
  • "-x" проверяет наличие исполняемых файлов, "-d" проверяет наличие каталога, "-f" проверяет наличие файла.
  • Часть с комментариями вверху на самом деле не состоит из комментариев: они являются директивами для chkconfig диспетчер сервисов, который будет обрабатывать зависимости и порядок запуска / выключения сервисов на основе этих "комментариев". Да, я согласен, что это тоже сбивает с толку.
Другие вопросы по тегам