Полный гайд по команде LFTP: Работа с локальными и удалёнными серверами
-
Полный гайд по команде LFTP: Работа с локальными и удалёнными серверами
Введение в LFTP
LFTP — это мощный командный FTP-клиент, который поддерживает множество протоколов: FTP, SFTP, FTPS, HTTP, HTTPS, и другие. Инструмент позволяет управлять файлами на удалённых серверах с использованием простой shell-подобной синтаксиса.
Основное преимущество LFTP перед стандартным FTP — встроенная поддержка зеркалирования директорий (mirror), асинхронные операции, способность к восстановлению прерванных передач и многое другое.
Установка LFTP
Debian/Ubuntu
sudo apt install lftpFedora/RHEL
sudo dnf install lftpArch Linux
sudo pacman -S lftpПроверка установки
lftp --versionБазовое подключение к серверу
Подключение по FTP
lftp ftp.example.comПодключение с указанием пользователя
lftp username@ftp.example.comСистема запросит пароль.
Подключение с пароль в команде
lftp -u username,password ftp.example.comПодключение по SFTP
lftp sftp://username@example.comПодключение на нестандартный порт
lftp -p 2222 sftp://username@example.comСинтаксис LFTP: Локальные и Удалённые команды
Различие между локальными и удалёнными командами
В интерактивной сессии LFTP существует две перспективы — локальная (ваша машина) и удалённая (FTP-сервер).
Удалённые команды выполняются без префикса:
lftp> ls # Показать содержимое удалённой директории lftp> cd /path # Перейти в удалённую директорию lftp> pwd # Показать текущую удалённую директориюЛокальные команды требуют префикса
!:lftp> !ls # Показать содержимое локальной директории lftp> !cd /path # Перейти в локальную директорию lftp> !pwd # Показать текущую локальную директориюСпециальные локальные команды
Некоторые команды имеют специальные префиксы для работы с локальной системой:
lftp> lpwd # Показать текущую локальную директорию (print local working directory) lftp> lcd /path # Изменить локальную директорию (local change directory) lftp> lls # Вывести содержимое локальной директории (local list)Практические примеры команд
Раздел 1: Навигация по директориям
Работа с удалёнными директориями
lftp> pwd /home/user/documents lftp> ls drwxr-xr-x 4 user group 4096 Oct 15 10:30 projects drwxr-xr-x 2 user group 4096 Oct 14 09:15 backups -rw-r--r-- 1 user group 2048 Oct 13 14:20 report.pdf -rw-r--r-- 1 user group 1024 Oct 13 11:05 notes.txt lftp> cd projects lftp> pwd /home/user/documents/projects lftp> cd .. lftp> pwd /home/user/documentsРабота с локальными директориями
lftp> lpwd /home/localuser/downloads lftp> lls Desktop Documents Downloads Music lftp> lcd Documents lftp> lpwd /home/localuser/downloads/Documents lftp> lcd .. lftp> lpwd /home/localuser/downloadsРаздел 2: Загрузка файлов (с сервера на локальную машину)
Загрузка одного файла
# Базовая загрузка lftp> get report.pdf # Загрузка с переименованием lftp> get report.pdf -o report_latest.pdf # Загрузка с указанием полного пути lftp> get /home/user/documents/report.pdf # Загрузка в определённую локальную директорию lftp> get report.pdf -o /home/localuser/downloads/report.pdfЗагрузка с проверкой статуса
# При длительной загрузке lftp> get largefile.zip Total: 1024 MB [##### ] 45% 10.5 MB/s 00:05 ETAЗагрузка нескольких файлов
lftp> get file1.txt file2.txt file3.txt lftp> get *.txt lftp> get report*.pdfРаздел 3: Загрузка файлов (с локальной машины на сервер)
Загрузка одного файла
# Базовая загрузка lftp> put local_file.txt # Загрузка с переименованием на сервере lftp> put local_file.txt -o remote_filename.txt # Загрузка в определённую удалённую директорию lftp> put /home/localuser/documents/report.txt -o /backup/reports/report.txtЗагрузка нескольких файлов
lftp> put file1.txt file2.txt file3.txt lftp> put *.txt lftp> put data_*.csvРаздел 4: Синхронизация директорий с MIRROR
Загрузка (sync с сервера на локальную машину)
# Базовое зеркалирование — все файлы с сервера скопируются локально lftp> mirror /remote/path /local/path # Пример с полными путями lftp> mirror /var/www/html /home/user/website_backup # С опциями для параллельных загрузок и удаления удалённых файлов lftp> mirror -c -P 4 /remote/docs /local/docs # Загрузка с удалением локальных файлов, которых нет на сервере lftp> mirror --delete -c /remote/backup /local/backupЗагрузка (sync с локальной машины на сервер — reverse mirror)
# Обратное зеркалирование — загрузка локальных файлов на сервер lftp> mirror --reverse /local/path /remote/path # Пример: загрузить вебсайт на сервер lftp> mirror --reverse /home/user/website /var/www/html # С опциями для параллельных загрузок lftp> mirror --reverse -c -P 4 /local/project /remote/project # С удалением файлов на сервере, которых нет локально lftp> mirror --reverse --delete /local/data /remote/dataПродвинутые опции mirror
# Режим продолжения (skip existing files unless they are newer on source) lftp> mirror -c /remote /local # Параллельные загрузки (4 потока) lftp> mirror -P 4 /remote /local # Использование pget для параллельных частей файла lftp> mirror --use-pget-n=4 /remote /local # Режим DELETE — удалить на целевой стороне файлы, отсутствующие на источнике lftp> mirror --delete /remote /local # Комбинированный пример lftp> mirror -c --delete -P 2 --use-pget-n=4 /source /destination # Verbose режим — подробный вывод lftp> mirror -v /remote /local # Сухой прогон (dry-run) — показать что будет загружено без реальной загрузки lftp> mirror --only-missing /remote /localРаздел 5: Работа с отдельными файлами
Просмотр содержимого файла
# Просмотреть содержимое удалённого файла lftp> cat config.txt # Просмотр с фильтром через grep lftp> cat logfile.txt | grep ERROR # Вывод в локальный файл lftp> cat README.md > /home/user/docs/README_copy.md # Просмотр локального файла lftp> !cat /home/user/notes.txtИнформация о файлах
# Подробный список удалённых файлов lftp> ls -l # Рекурсивный список удалённой директории lftp> ls -R /var/www # Список локальных файлов lftp> !ls -la /home/user # Размер удалённого файла lftp> ls -l largefile.iso # Проверка существования файла на сервере lftp> ls report_*.pdfУдаление файлов
# Удалить один файл на сервере lftp> rm oldfile.txt # Удалить несколько файлов lftp> rm file1.txt file2.txt file3.txt # Удалить файлы по маске lftp> rm *.tmp # Удалить файлы с подтверждением lftp> rm -i *.logПереименование файлов
# Переименовать файл на сервере lftp> mv oldname.txt newname.txt # Переместить файл в другую директорию на сервере lftp> mv document.pdf /archive/document.pdfРаздел 6: Работа с директориями
Создание и удаление директорий
# Создать директорию на сервере lftp> mkdir backups # Создать вложенные директории lftp> mkdir -p /var/www/html/images # Удалить пустую директорию на сервере lftp> rmdir old_backup # Создать локальную директорию lftp> !mkdir /home/user/ftp_downloads # Удалить локальную пустую директорию lftp> !rmdir /home/user/old_folderРаздел 7: Операции в фоновом режиме
LFTP позволяет запускать команды асинхронно, что полезно для длительных операций.
# Загрузить файл в фоне (& в конце) lftp> get largefile.iso & # Загрузить директорию в фоне lftp> mirror -c /remote/backup /local/backup & # Список активных фоновых заданий lftp> jobs # Результат [1] mirror -c /remote/backup /local/backup - 45% done - 5.2 MB/s # Ждать завершения конкретного задания lftp> wait 1 # Ждать всех заданий lftp> waitРаздел 8: Пиповые операции и перенаправление
# Загрузить файл и сжать его локально lftp> get largefile.sql | gzip > largefile.sql.gz # Сжать файл на сервере и загрузить lftp> cat document.pdf | gzip > /home/user/document.pdf.gz # Очистить логи на сервере lftp> cat /var/log/app.log | tail -100 > /home/user/app_last_100.log # Загрузить локальный файл и распаковать на сервере lftp> put /home/user/data.tar.gz | tar -xz -C /home/user/dataРаздел 9: Расширенные опции и параметры
Установка параметров сессии
# Отключить проверку SSL (если нужно) lftp> set ftp:ssl-allow off # Установить timeout для соединения lftp> set network:timeout 30 # Установить максимум параллельных соединений lftp> set net:max-retries 3 # Включить режим пассивного FTP lftp> set ftp:passive-mode on # Просмотреть все установки lftp> set -aУсловное выполнение команд
# Выполнить вторую команду, только если первая успешна (&&) lftp> get file.zip && ls -l file.zip # Выполнить команду, если предыдущая не удалась (||) lftp> get backup.tar.gz || echo "Backup not found" # Комбинация lftp> cd /backups && mirror . /local/backups || echo "Failed"Раздел 10: Автоматизация с использованием скриптов
Использование параметра -e (выполнить команды)
# Выполнить одну команду lftp -u user,pass ftp.example.com -e "ls" # Выполнить несколько команд через ; lftp -u user,pass ftp.example.com -e "cd /backups; mirror . /local/backups; quit" # С переменными окружения для пароля (более безопасно) export LFTP_PASSWORD="secretpassword" lftp -u user --env-password ftp.example.com -e "mirror /data /local/data; quit"Использование файла скрипта (-f параметр)
Файл: sync_backup.lftp
open sftp://user@backup.example.com cd /backups lcd /home/user/backups mirror --delete -c -P 2 . quitЗапуск:
lftp -f sync_backup.lftpИспользование heredoc в bash
Файл: backup_script.sh
#!/bin/bash FTP_HOST="backup.example.com" FTP_USER="username" FTP_PASS="password" LOCAL_DIR="/home/user/backups" REMOTE_DIR="/backups" lftp -u $FTP_USER,$FTP_PASS $FTP_HOST <<EOF cd $REMOTE_DIR mirror --delete -c -P 2 . $LOCAL_DIR quit EOF echo "Backup completed!"Запуск:
chmod +x backup_script.sh ./backup_script.shBash скрипт с проверками ошибок
#!/bin/bash FTP_HOST="ftp.example.com" FTP_USER="username" FTP_PASS="password" # Проверить наличие lftp if ! command -v lftp &> /dev/null; then echo "lftp is not installed" exit 1 fi # Выполнить синхронизацию lftp -u $FTP_USER,$FTP_PASS $FTP_HOST <<EOF set ftp:ssl-allow off cd /data mirror --delete -c -P 4 . /local/data quit EOF # Проверить результат if [ $? -eq 0 ]; then echo "Sync completed successfully" else echo "Sync failed!" exit 1 fiРаздел 11: Специальные команды
Команда help
lftp> helpПоказывает список всех доступных команд с описанием.
Закрытие соединения
lftp> quit # или lftp> exit # или lftp> byeПереподключение
# Переподключиться к текущему серверу lftp> reconnect # Подключиться к другому серверу lftp> open ftp://newuser@newhost.comИнформация о соединении
# Показать текущее соединение и статистику lftp> status # Результат: # Connected to ftp.example.com # Remote system type is UNIX # Connected as user@ftp.example.com # Type: binary; Form: nonprint; Mode: stream; Structure: file # Verbose: off; Bell: off; Prompting: off; Globbing: on # Hash mark printing: off; Use of PORT cmds: onРаздел 12: Закладки (bookmarks)
LFTP позволяет сохранять часто используемые подключения.
# При подключении к серверу lftp> open sftp://user@myserver.com Password: **** # Сохранить текущее подключение как закладку lftp> bookmark add myserver # Позже можно подключиться сокращённо lftp myserver # Просмотреть все закладки lftp> bookmark list # Удалить закладку lftp> bookmark delete myserver # Закладки хранятся в: ~/.local/share/lftp/bookmarks cat ~/.local/share/lftp/bookmarksРаздел 13: Примеры реальных сценариев
Сценарий 1: Ежедневное резервное копирование
#!/bin/bash # daily_backup.sh DATE=$(date +%Y%m%d) BACKUP_DIR="/home/user/backups/backup_$DATE" REMOTE_HOST="backup.example.com" REMOTE_USER="user" REMOTE_PASS="password" REMOTE_PATH="/backups/website" # Создать локальную директорию для резервной копии mkdir -p "$BACKUP_DIR" # Загрузить файлы с сервера lftp -u "$REMOTE_USER,$REMOTE_PASS" "$REMOTE_HOST" <<EOF cd "$REMOTE_PATH" mirror . "$BACKUP_DIR" quit EOF # Проверить результат if [ $? -eq 0 ]; then echo "Backup $DATE completed successfully" # Сжать резервную копию tar -czf "$BACKUP_DIR.tar.gz" "$BACKUP_DIR" rm -rf "$BACKUP_DIR" else echo "Backup $DATE failed!" fiСценарий 2: Загрузка файлов на сервер с проверкой
#!/bin/bash # upload_and_verify.sh LOCAL_FILE="/home/user/data/report.pdf" REMOTE_HOST="upload.example.com" REMOTE_USER="user" REMOTE_PATH="/incoming" if [ ! -f "$LOCAL_FILE" ]; then echo "File not found: $LOCAL_FILE" exit 1 fi # Получить размер локального файла LOCAL_SIZE=$(stat -f%z "$LOCAL_FILE" 2>/dev/null || stat -c%s "$LOCAL_FILE") # Загрузить файл lftp -u "$REMOTE_USER" "$REMOTE_HOST" <<EOF cd "$REMOTE_PATH" put "$LOCAL_FILE" quit EOF # Проверить размер на сервере REMOTE_SIZE=$(lftp -u "$REMOTE_USER" "$REMOTE_HOST" -e "cd $REMOTE_PATH; ls report.pdf; quit" | awk '{print $5}') if [ "$LOCAL_SIZE" -eq "$REMOTE_SIZE" ]; then echo "Upload verified successfully" else echo "Upload verification failed" exit 1 fiСценарий 3: Синхронизация между локальной и удалённой директориями
#!/bin/bash # sync_bidirectional.sh REMOTE_HOST="sync.example.com" REMOTE_USER="user" REMOTE_PATH="/documents" LOCAL_PATH="/home/user/documents" # Сначала загрузить новые файлы с сервера lftp -u "$REMOTE_USER" "$REMOTE_HOST" <<EOF set ftp:ssl-allow off mirror -c "$REMOTE_PATH" "$LOCAL_PATH" quit EOF # Затем загрузить локальные изменения на сервер lftp -u "$REMOTE_USER" "$REMOTE_HOST" <<EOF set ftp:ssl-allow off mirror --reverse -c "$LOCAL_PATH" "$REMOTE_PATH" quit EOF echo "Synchronization completed"Сценарий 4: Очистка старых файлов на сервере
#!/bin/bash # cleanup_old_files.sh REMOTE_HOST="storage.example.com" REMOTE_USER="user" REMOTE_PATH="/archive" DAYS_OLD=30 # Подключиться и удалить файлы старше 30 дней lftp -u "$REMOTE_USER" "$REMOTE_HOST" <<EOF cd "$REMOTE_PATH" find . -type f -mtime +$DAYS_OLD quit EOFПолезные команды и параметры
Быстрый справочник
Команда Описание lsСписок файлов удалённой директории llsСписок файлов локальной директории cd /pathПерейти в удалённую директорию lcd /pathПерейти в локальную директорию pwdПоказать текущую удалённую директорию lpwdПоказать текущую локальную директорию get fileЗагрузить файл с сервера put fileЗагрузить файл на сервер mirror dirСинхронизировать удалённую директорию локально mirror --reverse dirСинхронизировать локальную директорию на сервер rm fileУдалить файл на сервере mkdir dirСоздать директорию на сервере cat fileПоказать содержимое файла quitВыйти из lftp Советы и рекомендации
-
Безопасность паролей: Используйте переменные окружения вместо передачи пароля в командной строке:
export LFTP_PASSWORD="password" lftp -u user --env-password host.com -
Параллельные загрузки: Используйте опцию
-Pдля ускорения передачи:lftp> mirror -c -P 4 /remote /local -
Фоновые операции: Добавляйте
&в конце для запуска в фоне:lftp> mirror /remote /local & -
Проверка соединения: Используйте
reconnectдля переподключения при разрыве:lftp> reconnect -
Логирование: Перенаправляйте output в файл для анализа:
lftp -u user,pass host.com -e "mirror /data /local" > /tmp/lftp.log 2>&1
Часто встречаемые ошибки и решения
Ошибка: Connection timeout
# Решение: увеличить timeout lftp> set network:timeout 60Ошибка: Permission denied
# Решение: проверить права доступа на сервере lftp> ls -l # или использовать правильного пользователяОшибка: SSL certificate error
# Решение: отключить проверку SSL (если нужно) lftp> set ftp:ssl-allow offЗаключение
LFTP является мощным инструментом для управления файлами на удалённых серверах. С использованием описанных команд и примеров, вы сможете:
- Быстро передавать файлы между локальной и удалённой системой
- Автоматизировать синхронизацию директорий
- Работать как с интерактивными сессиями, так и с bash-скриптами
- Управлять большими объёмами данных с использованием параллельных загрузок
- Интегрировать LFTP в сложные workflow и автоматизационные сценарии
Этот инструмент станет незаменимым помощником для администраторов серверов, веб-разработчиков и DevOps специалистов.
-
-
A Aladdin переместил эту тему из Системное Администрирование
© 2024 - 2025 ExLends, Inc. Все права защищены.