Ниже представлена копия 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
(что, я согласен, может быть очень ... интенсивным опытом).
Что касается ваших вопросов:
chkconfig
диспетчер служб, который будет обрабатывать зависимости и порядок запуска / выключения служб на основе этих «комментариев». Да, я согласен, это тоже довольно запутанно.