Передача файлов между машинами — очень распространенная задача, с которой вы как разработчик будете сталкиваться постоянно.
Для передачи файлов в Linux есть специальные утилиты. В этой статье мы рассмотрим FTP и SCP. Они широко используются в скриптах автоматизации.
Что такое FTP?
FTP — это сетевой протокол, применяемый для обмена файлами по сети. Он использует порт 21. FTP позволяет вам подключаться к удаленной системе для обмена файлами при помощи команды ftp
.
Синтаксис FTP
FTP-синтаксис довольно прост:
ftp host
Здесь host
может быть как именем, так и IP-адресом удаленного хоста, к которому вы хотите подключиться.
Команды FTP
FTP-команды напоминают команды Linux. Вот некоторые из них:
Команда | Использование |
---|---|
open | Открывает удаленное соединение с другим компьютером. |
get | Копирует файл из удаленной системы в локальную. |
put | Копирует файл из локальной системы в директорию удаленной. |
mget | Передача нескольких файлов из удаленной системы в текущую директорию локальной. |
mput | Передача нескольких файлов из локальной системы в директорию удаленной. |
bye/quit | Подготовка к выходу из FTP-окружения. |
close | Закрывает FTP-соединение. |
ascii | Включает ASCII-режим передачи файлов. |
binary | Включает бинарный режим передачи файлов. |
Как передавать файлы через FTP
FTP предлагает два режима передачи файлов: ASCII и бинарный.
- ASCII расшифровывается как American Standard Code for Information Interchange («Американский стандартный код для обмена информацией»). Используется для передачи простых файлов, например, текстовых.
- Бинарный режим используется для передачи нетекстовых файлов, например, изображений.
По умолчанию FTP использует режим передачи ASCII.
Шаг 1 — установка FTP-соединения
В этом примере hostA
— удаленный хост. После ввода команды вам будет предложено ввести имя пользователя и пароль.
$ ftp hostA Connected to hostA. 220 hostA FTP server ready. Name (hostA:user): user 331 Password required for user. Password: password 230 User user logged in. Remote system type is LINUX.
Когда соединение будет успешно установлено, вы заметите символы ftp>
в начале строки. Это значит, что теперь вы можете вводить FTP-команды.
Шаг 2 — выбор режима передачи
Вы можете выбрать режим передачи файлов (бинарный или ASCII) в зависимости от их типа.
ftp> ascii 200 Type set to A.
Шаг 3 — передача файла
Здесь мы использовали команду get
для передачи файла sample.txt с удаленного FTP-сервера на локальную машину.
ftp> get sample.txt 200 PORT command successful. 150 Opening ASCII mode data connection for sample.txt (22 bytes). 226 Transfer complete. local: sample.txt remote: sample.txt 22 bytes received in 0.012 seconds (1.54 Kbytes/s)
Шаг 4 — завершение сессии
ftp> bye 221-You have transferred 22 bytes in 1 files. 221-Total traffic for this session was 126 bytes in 2 transfers. 221-Thank you for using the FTP service on hostA. 221 Goodbye.
Как передать несколько файлов через FTP
Для передачи нескольких файлов одновременно используются две команды: mget
и mput
.
mget
используется для скачивания файлов с сервера, а mput
— для заливки на сервер.
ftp> mget sample_file.1 sample_file.2
Здесь мы скачиваем файлы с удаленного хоста на локальную машину.
ftp> mput sample_file.1 sample_file.2
А здесь — наоборот: заливаем с локальной машины на удаленный хост.
Все команды, описанные в этом разделе, можно поместить в исполняемый файл и запускать по расписанию.
От редакции Techrocks. К сожалению, автор не раскрыла тему защищенной передачи файлов по FTPS, SFTP и FTP через SSH.
Что такое SCP?
SCP расшифровывается как Secure Copy («защищенное копирование»). Для этого копирования используется протокол SSH и порт 22. Данные, передаваемые по SCP, шифруются, и злоумышленники не смогут получить к ним доступ. Это делает передачу файлов по SCP очень безопасной.
С помощью SCP можно передавать файлы как с локальной машины на удаленный хост, так и обратно.
Синтаксис SCP
Давайте рассмотрим SCP-синтаксис.
scp [FLAG] [user@]SOURCE_HOST:]/path/to/file1 [user@]DESTINATION_HOST:]/path/to/file2
[FLAG]. Здесь могут стоять различные опции — флаги. Вот некоторые из них:
Флаг | Описание |
---|---|
-r | Рекурсивное копирование директорий. |
-q | Используется, чтобы спрятать показатель прогресса копирования и всю другую информацию, кроме сообщений об ошибках. |
-C | Сжатие данных при передаче. |
-P | Указание SSH-порта на машине, куда пересылаются файлы. |
-p | Сохраняет начальное время модификации файла. |
[user@]SOURCE_HOST. Имя пользователя и машина, с которой отправляется файл.
[user@]DESTINATION_HOST:]. Имя пользователя и машина, куда отправляется файл.
Примечание. Для передачи файлов по SCP нужно знать логин и пароль соответствующего пользователя на удаленной машине, а также иметь права на запись файлов.
Как передать файлы по SCP с локальной машины на удаленный хост
Для передачи файлов на удаленный хост введите следующую команду:
scp source_file.txt remote_username@10.13.13.11:/path/to/remote/directory
Здесь source_file.txt — файл, который нужно скопировать. Remote_username — имя пользователя на удаленном хосте 10.13.13.11. После двоеточия указывается путь на удаленной машине, куда нужно поместить файл.
Пример вывода:
remote_username@10.13.13.11's password: source_file.txt 100% 0 0.0KB/s 00:00
Теперь файл source_file.txt находится на удаленной машине, в директории по адресу /path/to/remote/directory.
Для копирования директорий используется флаг -r
, как показано ниже.
scp -r /local/directory remote_username@10.13.13.11:/path/to/remote/directory
Как передать файлы по SCP с удаленного хоста на локальную машину
Для копирования файлов с удаленного хоста используется следующий формат команды:
scp remote_username@10.13.13.11:/remote/source_file.txt /path/to/local/directory
По сути, здесь все так же, как в предыдущем примере, просто исходный адрес и адрес назначения меняются местами.
При передаче файлов будьте предельно внимательны! SCP перезаписывает уже существующие файлы.
Итоги
Из этого руководства вы узнали, как передавать файлы и директории в командной строке, с использованием FTP и SCP.
При использовании в скриптах автоматизации эти команды очень полезны для сохранения, архивирования и пакетной обработки файлов.
Перевод статьи «How to Transfer Files Between Servers in Linux using SCP and FTP».
[customscript]techrocks_custom_after_post_html[/customscript]
[customscript]techrocks_custom_script[/customscript]
Ну а почему не показал пример как переносить с помощью scp файлы с одного хоста на другой??