Объяснение 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
диспетчер сервисов, который будет обрабатывать зависимости и порядок запуска / выключения сервисов на основе этих "комментариев". Да, я согласен, что это тоже сбивает с толку.