Explicação do init.d / scripts Fedora

2

Abaixo está uma cópia do vsftpd, eu preciso de algumas explicações de alguns dos scripts mencionados abaixo neste script:

#!/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

Pergunta I

Qual é a diferença entre o & & e || assina os comandos abaixo, e é apenas uma maneira fácil de fazer um simples check ou é completamente diferente de um if[..something..]; then ..something.. fi :

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

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

Pergunta II

eu obtenho o que é -eq e -gt ( equal to , greater than ), mas existe um site simples que explique o -x , -d e -f ?

Pergunta III

Ele diz que os começos exigidos são $local_fs $network $named $remote_fs $syslog , mas eu não consigo ver onde ele os verifica.

Qualquer ajuda seria apreciada

Executando o Fedora 12 no meu sistema operacional. Script copiado de /etc/init.d/vsftpd

    
por Sparky 26.04.2010 / 11:36

2 respostas

4

Responda I

É apenas uma notação abreviada.

Aqui:

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

Verifica se ${NETWORKING} está definido como "no" . Se isso retornar falso (a rede está habilitada), a segunda parte não será avaliada (saída 1), porque ela já é falsa (& & amp ;, conjunção lógica).

O contrário vai:

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

Temos "ou" aqui. Então, basicamente, se vsftpd existe, então a primeira parte é verdadeira e nenhuma verificação adicional é feita (sem saída).

Resposta II

teste do homem :

   -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

Resposta III

Essas partes devem ser analisadas externamente. Veja aqui mais informações sobre cabeçalhos de LSB .

    
por 26.04.2010 / 11:59
3

Estas são todas as questões relacionadas ao bash, então sua principal fonte de informação deve ser um man bash (que eu concordo que pode ser uma experiência muito ... intensa).

Quanto às suas perguntas:

  • A sintaxe é um atalho para "if [...]", então, na verdade, é uma verificação condicional; "& &" significa "e" e "||" significa "ou" (como nas linguagens derivadas de C), e ambos os operadores não avaliam seu segundo operando se o primeiro for suficiente para produzir uma resposta; então, se a rede estiver funcionando depois de "& &" será não executado (uma condição e não pode ser verdadeira se o primeiro operando for falso), enquanto que se o arquivo "vsftpd" existir, o script não será ou condição é verdadeira se o primeiro operando for verdadeiro). Esta sintaxe (usando um condicional para realmente fazer algo) é mutuada em C, e é considerada confusa, mas muito inteligente por hackers C.
  • "- x" verifica a existência de arquivos executáveis, "-d" verifica a existência de um diretório, "-f" verifica a existência de um arquivo.
  • A parte comentada na parte superior, na verdade, não consiste em comentários: elas são diretivas para o chkconfig service manager, que manipulará dependências e a ordem de inicialização / encerramento dos serviços com base nesses "comentários". Sim, eu concordo que isso é bastante confuso também.
por 26.04.2010 / 12:02