Инициатива #SaveFirst
поддержка онлайн-проектов, которые помогают людям в период кризиса COVID-19
Подробнее

Удалённая работа с FTP-хранилищем: ftp, cURL, wget

Удалённые хранилища позволяют экономить дисковое пространство сервера. Храниться там может что угодно: какие-то редко используемые файлы, документы, изображения, видео. Но чаще всего — бэкапы

В большинстве случаев такие хранилища предлагают графический интерфейс, чтобы можно было быстро посмотреть список копий и скачать нужную в несколько кликов. Тем не менее, всё то же самое можно сделать, не выходя из консоли вашего сервера — достаточно знать доступы к хранилищу для подключения по FTP.

Существуют разные инструменты для управления файлами на удалённом сервере. Рассмотрим самые базовые: 

Для начала работы необходимо подключиться к серверу по SSH.

Работа с консольным клиентом ftp

ftp — консольный клиент для работы с файлами по протоколу FTP. Доступен для установки в каждом дистрибутиве операционных систем семейства Linux:

Ubuntu и DebianCentOS
-- установлен по умолчанию --

apt-get update
apt-get install ftp
yum install ftp

 

Предположим, что у нас есть несколько резервных копий в каталоге /root/backup/ Перед началом работы с хранилищем нужно перейти в него с помощью команды: 

cd /root/backup/

Таким образом после подключения к хранилищу мы сможем работать с файлами этого каталога без лишних действий.

Тестовый набор файлов
Тестовый набор файлов

Подключение и отключение

Для работы с внешним FTP-диском нам потребуются:

  • адрес хранилища
  • логин FTP-пользователя
  • пароль FTP-пользователя

Если вы используете Диск для бэкапов, эти данные доступа можно найти в Личном кабинете — раздел ТоварыВнешний диск для бэкапов. Выберите ваш диск в списке и сверху нажмите «Инструкция». В разделе «Доступ по протоколу FTP» будут указаны нужные данные: 

Доступы к FTP-диску
Доступы к FTP-диску

Для подключения в терминале введите команду:

ftp [адрес хранилища]

Система запросит у вас имя и пароль FTP-пользователя:

Подключение через ftp
Подключение через ftp
Ввод логина и пароля
Ввод логина и пароля

Чтобы завершить работу с хранилищем, введите команду bye или quit 

Отключение от FTP-сервера
Отключение от FTP-сервера

Автоматическая авторизация

Настроив автоматическую авторизацию, можно сэкономить немного времени на вводе данных. Для этого в корневой папке вашего пользователя нужно создать файл .netrc

touch ~/.netrc
chmod 600 ~/.netrc

В файле нужно прописать данные хранилища: адрес (вместо ftp.storage.address), логин (вместо ftp_login), и пароль (вместо ftp_password). В один файл можно записать доступы сразу к нескольким таким хранилищам.

#Диск для бэкапов
machine ftp1.storage.address
login ftp1_login
password ftp1_password

#Архив сайта
machine ftp2.storage.address
login ftp2_login
password ftp2_password

#Секреты админа
machine ftp3.storage.address
login ftp3_login
password ftp3_password

Клиент ftp использует этот файл по умолчанию. Чтобы отменить принудительную авторизацию, при подключении используйте ключ -n:

ftp -n [адрес хранилища]

Тогда система запросит логин и пароль для подключения в обычном режиме.

Возможности

После авторизации откроется интерфейс для работы с хранилищем. Синтаксис команд напоминает стандартные команды Linux:

Навигация

  • pwd — отображает текущую директорию, в которой мы находимся на удалённом хранилище;

  • ls — отображает список файлов и папок, размещенных в текущей директории хранилища;

    Пример работы команд pw и ls
    Пример работы команд pw и ls
  • mkdir folder_name и rmdir folder_name — используются соответственно для создания и удаления директорий хранилища;

  • cd /path/to/directory/ — используется для перемещения по каталогам;

    Создание папки с помощью mkdir и переход в неё с помощью cd
    Создание папки с помощью mkdir и переход в неё с помощью cd
  • lcd /path/to/directory/ — переключает текущую рабочую директорию на локальном сервере. Пригодится, когда нужно загрузить в хранилище несколько файлов из разных каталогов текущего сервера.

    Переключение локальной рабочей директории с помощью lcd
    Переключение локальной рабочей директории с помощью lcd

Управление файлами

  • put file — используется для загрузки на хранилище одиночного файла file. Для загрузки доступны файлы только из текущей рабочей директории локального сервера.

    Загрузка файла с помощью put
    Загрузка файла с помощью put
  • mput file1 file2 — позволяет загрузить в хранилище несколько файлов за раз. При этом после ввода команда будет запрашивать подтверждение для передачи каждого файла — нужно ввести yes и нажать клавишу Enter.

    Загрузка нескольких файлов за раз с помощью mput
    Загрузка нескольких файлов за раз с помощью mput
  • get file — скачивает файл file с хранилища в текущую рабочую директорию на локальном сервере;

    Скачивание файлов с помощью get
    Скачивание файлов с помощью get
  • mget file1 file2 — позволяет скачать из хранилища несколько файлов за один раз. Для скачивания каждого файла будет запрошено подтверждение.

    Скачивание нескольких файлов с помощью mget
    Скачивание нескольких файлов с помощью mget
  • delete file — безвозвратно удаляет одиночный файл из текущей директории хранилища.

    mdelete file1 file2 — позволяет удалить несколько файлов из хранилища за один раз.

    Удаление файлов с delete и mdelete
    Удаление файлов с delete и mdelete

Работа с cURL

cURL — кроссплатформенная утилита, позволяющая обрабатывать и передавать данные по URL. Поддерживает огромное количество различных протоколов (FTP, HTTP, HTTPS, IMAP, POP3, SCP, SFTP, SMB,  SMTP, Telnet и др.).

cURL предустановлен в большинстве современных Linux-дистрибутивов. 

Ubuntu и DebianCentOS
-- установлен по умолчанию --

apt-get update
apt-get install curl
-- установлен по умолчанию --

yum install curl

 

Подключение

В отличие от клиента ftp, cURL не обеспечивает отдельный интерфейс для работы. Вместо этого он единовременно подключается к хранилищу, авторизуется, запрашивает данные и отключается, выводя требуемую информацию.

Подключиться к хранилищу можно двумя способами:

  1. Указав авторизационные данные прямо в команде. Это быстро и удобно, но небезопасно — использованный вами пароль можно подсмотреть в истории команд.

    curl -u ftp_login:ftp_password ftp://ftp.storage.address
  2. Указав авторизационные данные в файле .netrc Тогда для работы в команде будет достаточно указать только адрес хранилища:

    curl -n ftp://ftp.storage.address

В обоих примерах cURL выведет в терминал список содержимого корневой папки хранилища. Аналогично можно вывести содержимое отдельных директорий хранилища, просто дописав путь после адреса FTP-сервера:

curl -n ftp://ftp.storage.address/backup/

Возможности

Чтобы работать с файлами через cURL, нужно знать их название и расположение. 

Загрузка файлов

Загрузить файл filename на удалённое хранилище в условную папку backup/ можно с помощью следующей команды:

curl -T filename -u ftp_login:ftp_password ftp://ftp.storage.address/backup/

Если каталога backup/, в который нужно загрузить файл, ещё не существует, можно добавить к команде опцию --ftp-create-dirs Тогда cURL автоматически создаст в хранилище недостающие директории и загрузит туда файл. 

Скачивание файлов

Скачать файл filename из условной папки backup/ с хранилища также просто. Для сохранения файла с его текущим именем используйте опцию -O:

curl -O -u ftp_login:ftp_password ftp://ftp.storage.address/filename

Если же нужно сохранить файл на локальном сервере с новым именем local-filename, можно использовать опцию -o, указав после неё новое название файла:

curl -o local-filename -u ftp_login:ftp_password ftp://ftp.storage.address/backup/filename

Если вы скачиваете или загружаете большой файл, и процесс загрузки по какой-то причине вдруг прервался, можно возобновить его с места остановки. Для этого в предыдущую команду, которую вы запустили для скачивания/загрузки, добавьте опцию -С -

curl -С - -O -u ftp_login:ftp_password ftp://ftp.storage.address/backup/filename

Управление файлами

cURL может передавать команды FTP-серверу хранилища, тем самым позволяя управлять папками и файлами:

  • Создать папку backup/ на FTP-хранилище можно командой: 

    curl -u ftp_login:ftp_password ftp://ftp.storage.address/ -Q '-MKD backup'
  • Удалить папку backup/  можно командой 

    curl -u ftp_login:ftp_password ftp://ftp.storage.address/ -Q '-RMD backup'
  • Переименовать файл filename в new-filename можно так:

    curl -u ftp_login:ftp_password ftp://ftp.storage.address/backup/ -Q '-RNFR filename' -Q ‘-RNTO new-filename’
  • Удалить файл filename из папки backup/ хранилища можно следующим образом:

    curl -u ftp_login:ftp_password ftp://ftp.storage.address/backup/ -Q '-DELE filename'

Загрузка файлов с wget

wget — базовая утилита загрузки файлов. Доступна по умолчанию в любом дистрибутиве семейства Linux. 

Чтобы скачать файл filename, размещённый в папке backup/ удалённого хранилища, достаточно ввести команду:

wget -m ftp://'ftp-login':'ftp-password'@ftp.server.address/backup/filename

Или, при наличии файла .netrc :

wget -m ftp://ftp.server.address/backup/filename

По умолчанию файл будет сохранён в вашу текущую рабочую директорию. Можно изменить путь для сохранения, использовав опцию -P /path/to/directory/

wget -m -P ~/user-downloads ftp://ftp.server.address/backup/filename

Также wget может возобновить прерванную загрузку файла — для этого нужно повторить команду на скачивание файла с ключом

wget -c ftp://ftp.server.address/backup/filename