Назад | Перейти на главную страницу

Пояснения к 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

Вопрос I

Какая, черт возьми, разница между && и || в приведенных ниже командах, и это просто простой способ сделать простую проверку if или это полностью отличается от 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

Ответ I

Это просто сокращенное обозначение.

Вот:

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

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

И наоборот:

[ -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 (что, я согласен, может быть очень ... интенсивным опытом).

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

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