<< Предыдущий раздел | /\ Содержание | >> Следующий раздел

ftp: протокол для передачи файлов и программа

FTP (file transfer protocol) как следует из названия -- протокол для передачи файлов. Программа, использующая этот протокол, называется аналогично -- ftp.

Стандартный способ запуска ftp -- "ftp <имя-компьютера>":

bobby:~% ftp class
Connected to class.inp.nsk.su.
220 class.inp.nsk.su FTP server (Version wu-2.4.2-academ[BETA-18](1)
Mon Aug 3 19:17:20 EDT 1998) ready.
Name (class:ivanov): goofy
331 Password required for goofy.
Password:
230 User goofy logged in.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> _

Соединившись с компьютером, ftp запрашивает имя пользователя (если оно то же самое, можно просто нажать Enter), а затем, возможно, пароль.

Для доступа к публичным ftp-архивам используется специальное имя пользователя -- anonymous ("аноним"; через "y", а не "anonimous"). В качестве пароля при этом принято вводить свой e-mail, к примеру, goofy@inp.nsk.su. Правильность адреса обычно не проверяется (хотя ответы типа "a@b.c" многие серверы не принимают).

После авторизации можно с помощью команд ftp работать с файлами на удаленном сервере почти как с локальными. Команда "cd" позволяет перейти в другую директорию, "pwd" показывает текущую директорию, "ls" выдает листинг (причем всегда как с ключом "-l").

Хотя ftp поддерживает множество команд (таких, как переименование, удаление, смена прав и т.д.), упомянем лишь наиболее часто используемые и их особенности. Узнать какие еще бывают команды, можно при помощи команды "?", а посмотреть краткое описание -- "? имя-команды".

Сводка основных команд ftp


КомандаНазначение
cd Перейти в другую директорию
pwd Показать текущую директорию
lcd Перейти в другую локальную директорию
mkdir Создать директорию на сервере
ls Показать листинг
get Взять файл с сервера к себе
put Положить файл от себя на сервер
reget Продолжить прерванную перекачку файла к себе
bin Включить бинарный режим перекачки
hash Включить/выключить печать символов "#" для индикации перекачки
mget Взять несколько файлов по шаблону (multiple get)
mput Положить несколько файлов по шаблону (multiple put)
promptВключить/выключить запрос подтверждения для каждого файла в mget/mput
open Открыть соединение с сервером (если ftp запущена без указания компьютера)
quit Выход из ftp

Перекачка


Чтобы перекачать файл к себе, используется команда get, которой указывается имя файла. Если дать команду вида

get file.txt myfile.txt
то файл "file.txt" будет скопирован в локальный файл под именем "myfile.txt". Аналогичное правило действует и в отношении команд put и ls -- если указать два параметра, то второй -- это имя файла-получателя (в случае ls туда попадет листинг).

Для того, чтобы скачать сразу несколько файлов, используется mget -- этой команде вместо имени указывается шаблон, который может содержать метасимволы *, ?, [] -- как в shell. Mget спрашивает подтверждение для каждого файла, что иногда довольно утомительно. Отключить эти вопросы можно командой prompt.

Поскольку команды перекачки работают "молча", то трудно понять -- происходит что-либо, или же связь "оборвалась". Командой hash можно включить печать символа "#" при перекачке каждого килобайта (мнемоника: "#" по-английски называется "hash").

Если связь во время передачи оборвется, то можно не перекачивать весь файл заново, а продолжить -- для этого служит команда reget (дословно "перевзять", т.е. "продолжить взятие").

Замечание
В некоторых старых ftp-серверах (например, в поставляемом с Solaris, и в некоторых серверах под Windows) команда продолжения не поддерживается. Хотя это -- крайне редкая ситуация, стоит иметь в виду, что такое бывает.

Исторически в FTP предусмотрено два режима передачи файлов: бинарный (binary) и текстовый (ascii). В текстовом режиме символы концов строк в файлах преобразуются в "локальное" представление (Unix -- ^J, Dos -- ^M^J, Mac -- ^M). Если же попробовать перекачать в текстовом режиме, например, .zip-файл, то его содержимое просто испортится. Реально текстовый режим практически никогда не нужен. Хотя при перекачке Unix<->Unix преобразование реально не производится, сам просмотр содержимого файлов может занимать некоторое время (на стареньком Sun Sparcstation 1+ режим ascii почти вдвое медленнее, чем binary). Для переключения в бинарный режим служит команда bin. И хотя ftp может даже автоматически определить, что на другом конце тоже Unix -- "Remote system type is UNIX. Using binary mode to transfer files.", лучше все же завести привычку "руками" включать "bin" при каждом соединении (к примеру, под тем же Solaris как сервер, так и программа ftp довольно "тупы" и по умолчанию работают в ascii).

Команды put и mput служат для перекачки файлов в обратном направлении -- на сервер, и работают совершенно аналогично get и mget. К сожалению, команды "reput" нет, хотя протокол и дает такую возможность.

Прервать выполнение любой команды можно нажатием Ctrl+C.

Иногда возникает необходимость находясь в ftp, выполнить какую-либо команду на локальном компьютере -- к примеру, создать директорию. Чтобы не открывать новое окно (или не выполнять лишний telnet, если сам ftp запущен не с локального компьютера) можно воспользоваться командой "!". Просто "!" без параметров вызовет оболочку (shell). Если же указать после "!" какую-нибудь команду, то она будет выполнена -- например,

!mkdir zzz
создаст в текущей (для ftp) директории поддиректорию "zzz".

Предупреждение
Но для перехода по локальным директориям пользоваться командой "!cd" нельзя -- она будет выполнена в порожденном процессе и на текущую директорию самой программы ftp никакого влияния не окажет. Надо пользоваться командой lcd.

Для завершения ftp служит команда quit, но для краткости можно просто нажимать Ctrl+D -- так же как и shell, ftp понимает это как "конец ввода" и завершается.

А зачем, собственно, нужна программа ftp, если есть Netscape?


Половина ответа очевидна -- Netscape, в отличие от ftp, умеет только брать файлы, но не умеет класть их на сервер. Даже при использовании Midnight Commander нельзя полностью воспользоваться возможностями протокола FTP -- MC представляет содержимое сервера как просто содержимое панели, а это всего лишь абстракция, скрывающая некоторую специфику FTP (например, MC не показывает информационные сообщения от сервера, а те бывают весьма полезны).

Вторая половина ответа заключается в том, что и Netscape, и MC -- интерактивные программы, и при запуске их с удаленного компьютера (например, в другой части света) они будут пожирать значительную часть пропускной способности сети до пользователя на эту "интерактивность". Netscape, скорее всего, запустить не удастся, а MC будет ворочаться очень медленно.

Вот в этой-то ситуации единственное, чем можно будет воспользоваться -- это ftp или его развитием -- программами lftp или ncftp (последняя, впрочем, страдает излишней интерактивностью). Lftp, кстати имеет команду "reput". Обе эти программы умеют перекачивать целые директории (рекурсивная перекачка), а lftp позволяет делать все в фоновом режиме, понимая "&" в конце команды (аналогично shell). Кроме того, есть очень мощная пакетная программа для скачивания данных по ftp и http -- wget (о ней будет рассказано в одной из последних лекций).

Ncftp и wget входят в стандартный дистрибутив RedHat Linux, а lftp находится в дистрибутиве в секции "пожертвований" -- contrib.


<< Предыдущий раздел | /\ Содержание | >> Следующий раздел