Файл туда и обратно это просто

Posted by

В сегодняшней заметке я рассмотрю консольную утилиту которая умеет делать лишь наверное что-то одно, но хорошо. Это взять определенные файлы к себе и посредством FTP загрузить их обратно, конечно такую же задачу можно решить и обычным копированием через безопасное подключение с одной системы на другую (scp) или просто задействовать утилиту rsync. В зависимости от задачи и имеющихся инструментов каждый выбирает что-то удобное по себе. Но сейчас речь пойдет об утилите lftp.

Исходные данные следующие:

Мой FTP ресурс в локальной сети, который используется только как простой обмен определенными файлами с другими серверами, доступ на него и видят его только определенные хосты (да здравствуют правила iptables).

Устанавливаю утилиту lftp к себе в систему простой командой:

ekzorchik@dv6:~$ sudo apt-get install lftp -y

Теперь подключусь к удаленной системе с использование безопасной передачи аутентификационных данных:

ekzorchik@dv6:~$ ://ekzorchik:712mbddr@@ekzorchik.net -p 22222

Успешно соединение к хосту в консоль командной строки выглядит так:

lftp ekzorchik@ekzorchik.net:/>

Выведу список файлов на удаленной системе:

lftp ekzorchik@ekzorchik.net:~> ls

drwx—— ekzorchik/4395 4096 2014-12-19 19:10 .

drwx—— ekzorchik/4395 4096 2014-12-19 19:10 ..

-rw——- ekzorchik/4395 11750 2014-11-16 14:12 .bash_history

-rw——- ekzorchik/4395 35 2013-06-12 09:56 .lesshst

drwxr-xr-x ekzorchik/4395 4096 2012-11-23 16:51 .mc

-rw——- ekzorchik/4395 656 2013-02-03 15:33 .mysql_history

-rw-r—r— ekzorchik/4395 2681518 2012-10-16 22:31 111.jpg

drwxr-xr-x ekzorchik/4395 4096 2015-06-18 17:31 backup

drwxr-xr-x ekzorchik/4395 4096 2015-06-18 13:02 backups

drwxr-xr-x ekzorchik/4395 4096 2014-02-01 23:40 doci

drwxr-xr-x ekzorchik/4395 4096 2013-07-12 17:59 domains

drwxr-xr-x ekzorchik/4395 4096 2015-06-15 01:29 logs

drwxr-xr-x ekzorchik/4395 4096 2013-06-12 09:59 script

drwxr-xr-x ekzorchik/4395 16384 2015-06-18 12:31 tmp

Отлично, просто как дважды два,

Основные команды которые можно использовать в текущем подключении:

exit — > завершить соединение проведенное через lftp

pwd → отобразить текущее местоположение на удаленной системе

ls → листинг файлов в текущем каталоге

lpwd — текущий путь на локальной станции куда можно будет скачивать файлы с удаленной системы

lftp ekzorchik@ekzorchik.net:~> lpwd

/home/ekzorchik

lcd <любая_директория> — смена текущего путя на локальной станции

lftp ekzorchik@ekzorchik.net:~> lcd /home

lcd ok, локальный каталог=/home

lftp ekzorchik@ekzorchik.net:~> lpwd

/home

!ls — отобразить файлы локальной системы в текущем каталоге

!rm — удалить файл на локальной системе

lftp ekzorchik@ekzorchik.net:/backup> !rm file.tar.gz

по такому же принципу можно использовать все консольные команды локальной станции предваряя их символом восклицательного знака.

get file → произвести скачивание из текущего каталого удаленного сервера в текущую директорию локальной системы

get file -o localfile — скачать с удаленного сервера файл file и сохранить его на локальной системе под именем localfile

lftp ekzorchik@ekzorchik.net:/backup> get tips_firma_v1_18_06_2015_17.tar.gz -o file.tar.gz

26506589 байтов перемещено за 52 секунды (500.5Кб/с)

put file → произвести закачку файлы с локальной системы на удаленную систему

put file -o remotefile → по аналогии что и get но на оборот

Еще интересной особенностью утилиты lftp есть возможность использовать синхронизацию, а именно, как:

Директория удаленного сервера и ее полное содержимое синхронизируется с локальной директорией — ключ mirror remote_directory

Пример:

ekzorchik@dv6:~$ lftp sftp://ekzorchik:712mbddr@@ekzorchik.net -p 22222 -e 'mirror -e logs blog; bye;'

Всего: 6 каталогов, 20 файлов, 0 ссылок Созданы: 20 файлов, 0 ссылок 93312327 байтов перемещено за 182 секунды (500.2Кб/с)

Переношу файлы бекапа с онлайн-хранилища На локальную машину: ekzorchik@dv6:~$ lftp sftp://ekzorchik:712mbddr@@ekzorchik.net -p 22222 -e 'mirror -e backup blog; bye;'

 

а после уже на следующий день, с моего хостинга переносится только один файл который я туда добавил скриптом наработок за целый день:

ekzorchik@dv6:~$ lftp sftp://ekzorchik:712mbddr@@ekzorchik.net -p 22222 -e 'mirror -e backup blog; bye;'

Всего: 1 каталог, 16 файлов, 0 ссылок Созданы: 1 файл, 0 ссылок 27198631 байт перемещен за 53 секунды (499.9Кб/с)

Удаляю на удаленном сервере файл из каталога Logs и заново запускаю строку выше

lftp ekzorchik@ekzorchik.net:/logs> rm mysql-slow.log

rm ok, `mysql-slow.log’ удален lftp

ekzorchik@ekzorchik.net:/logs> exit

ekzorchik@dv6:~$ lftp sftp://ekzorchik:712mbddr@@ekzorchik.net -p 22222 -e 'mirror -e logs blog; bye;'

Всего: 6 каталогов, 19 файлов, 0 ссылок Изменены: 3 файла, 0 ссылок 25978403 байта перемещены за 51 секунду (500.1Кб/с) Удалены: 0 каталогов, 1 файл, 0 ссылок и файла на локальной системе тоже удаляется.

А теперь локальная директория синхронизируется с удаленной — ключ mirror -R remote_directory

ekzorchik@dv6:~$ lftp sftp://ekzorchik:712mbddr@@ekzorchik.net -p 22222 -e 'mirror -R blog logs; bye;'

Всего: 6 каталогов, 19 файлов, 0 ссылок Изменены: 1 файл, 0 ссылок 6073283 байта перемещены за 12 секунд (500.6Кб/с)

ekzorchik@dv6:~$ rm blog/cpu_usage.log

ekzorchik@dv6:~$ lftp sftp://ekzorchik:712mbddr@@ekzorchik.net -p 22222 -e 'mirror -R blog logs; bye;'

Всего: 6 каталогов, 18 файлов, 0 ссылок

Изменены: 1 файл, 0 ссылок

6073283 байта перемещены за 12 секунд (500.1Кб/с)

To be removed: 0 directories, 1 file, 0 symlinks

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

ekzorchik@dv6:~$ lftp -f script

, где содержимое файла script следующее

open sftp://ekzorchik:712mbddr@@ekzorchik.net -p 22222

mirror -e -c backup blog; bye;

exit

, где ключ

-c → продолжить копирование если оно по каким-либо причинам было прервано.

А вообще если для процесса синхронизации нужно из опций что-то определенное то мой совет почитайте справку по ключам использования. Не пренебрегайте ею там много всего интересного. Заставьте себя.

Запускаю скрипт, но предварительно из каталога blog на текущей локальной системе удалю один файл наработок за 30 число:

ekzorchik@dv6:~/blog$ rm tips_firma_v1_30_06_2015_17.tar.gz

ekzorchik@dv6:~$ lftp -f script

Скрипт отработает и заново с моего ftp ресурса скачает недостающий файл:

ekzorchik@dv6:~$ ls -lsh blog/tips_firma_v1_30_06_2015_17.tar.gz

30M -rw-r—r— 1 ekzorchik ekzorchik 30M июня 30 18:00 blog/tips_firma_v1_30_06_2015_17.tar.gz

Работает. Функционал данной утилиты мне очень нравится, советую попробовать возможно это как раз то что Вы и искали но не могли выразить словами поиска Вашего решения в google. А пока все, с уважением автор блога — ekzorchik.

Leave a Reply

Ваш e-mail не будет опубликован. Обязательные поля помечены *

четыре × 1 =