Заводной пингвин j1m (j1m@list.ru) Хакер, номер #085, стр. 085-100-3 Конечно, решение несколько топорное, но зато очень простое. В данном случае хорошим дополнением может стать запись результатов выполнения команд в файл и отправка его по почте с помощью команды /usr/bin/mail (или mailx). [не привыкай к браузеру] С соединением разобрались, теперь поговорим об автоматическом скачивании файлов. Для начала попробуем заставить ftp-клиент работать в автономном режиме. Для осуществления задуманного нам понадобится продвинутый lftp (есть в любом дистрибутиве). Выполнение команд в пакетном режиме (читая их из файла) является одной из его особенностей. Чтобы воспользоваться ею, создай файл ~/lftp.auto примерно с таким содержимым: $ vi ~/lftp.auto # задаем имя и пароль пользователя (пустой пароль - "") user name passwd # подключаемся к серверу lftp ftp.kernel.org # далее идут любые стандартные команды ftp-протокола (get, put, ls) get ... # отключаемся exit Задай правильные права доступа на этот файл (чтобы никто не подсмотрел пароль): $ chmod 600 ~/lftp.auto И запусти lftp такой командой: $ lftp -f ~/lftp.auto > ~/lftp.log Ftp-клиент выполнит все твои команды и отключится от сервера. Ответы сервера на приведенные команды запишутся в файл ~/lftp.log (по умолчанию они выводятся на экран). Этот файл может стать очень полезным, если в скрипте применяется команда рекурсивного обхода каталогов (ls -R). Используя один скрипт, можно организовать соединение сразу с несколькими ftp-серверами. Соединения с ftp можно сделать еще более автономными, если использовать расширение zsh под названием zftp. Это встроенный в шелл ftp-клиент, позволяющий интегрировать команды ftp-протокола прямо в скрипты. Для демонстрации мощи такой технологии рассмотрим следующий скрипт: $ vi ~/get_kernel.zsh #!/bin/zsh FTP=ftp.kernel.org if [ $# != 0 ]; then VER=$1 else exit fi zmodload zsh/zftp echo -n "Connecting to $FTP... " zftp open $FTP zftp login anonymous "" >/dev/null 2>&1 zftp binary zftp cd pub/linux/kernel/v`echo $VER | cut -d "." -f 1-2`/ echo "Checking for new kernel..." zftp ls | grep linux-${VER} if [[ $? == 0 ]]; then echo -n "Downloading... " zftp get linux-${VER}.tar.bz2 > linux-${VER}.tar.bz2 zftp close else echo "Kernel $VER doesn't exist." zftp close fi Скрипт предназначен для закачки ядра Linux с официального ftp-сервера. Запускать следует с одним параметром - версией ядра. Как можно заметить, zftp оперирует стандартными командами любого ftp-клиента с той лишь разницей, что после исполнения каждой команды управление возвращается обратно к шеллу. Благодаря этой особенности можно полностью контролировать весь диалог клиента с сервером, для чего раньше приходилось использовать expect. Если есть необходимость слить файлы с http-сервера, можно воспользоваться неинтерактивным http-клиентом wget. Я применяю его в автономных интернет-соединениях, как было показано в предыдущем разделе. $ wget URL |