Перейти к содержанию
  • Лента
  • Категории
  • Последние
  • Метки
  • Популярные
  • Пользователи
  • Группы
Свернуть
exlends
Категории
  1. Главная
  2. Категории
  3. Системное Администрирование
  4. Bash | Shell
  5. Полный гайд по команде LFTP: Работа с локальными и удалёнными серверами

Полный гайд по команде LFTP: Работа с локальными и удалёнными серверами

Запланировано Прикреплена Закрыта Перенесена Bash | Shell
1 Сообщения 1 Постеры 81 Просмотры
  • Сначала старые
  • Сначала новые
  • По количеству голосов
Ответить
  • Ответить, создав новую тему
Авторизуйтесь, чтобы ответить
Эта тема была удалена. Только пользователи с правом управления темами могут её видеть.
  • AladdinA Не в сети
    AladdinA Не в сети
    Aladdin
    js
    написал отредактировано
    #1

    Полный гайд по команде LFTP: Работа с локальными и удалёнными серверами

    Введение в LFTP

    LFTP — это мощный командный FTP-клиент, который поддерживает множество протоколов: FTP, SFTP, FTPS, HTTP, HTTPS, и другие. Инструмент позволяет управлять файлами на удалённых серверах с использованием простой shell-подобной синтаксиса.

    Основное преимущество LFTP перед стандартным FTP — встроенная поддержка зеркалирования директорий (mirror), асинхронные операции, способность к восстановлению прерванных передач и многое другое.

    Установка LFTP

    Debian/Ubuntu

    sudo apt install lftp
    

    Fedora/RHEL

    sudo dnf install lftp
    

    Arch 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.sh
    

    Bash скрипт с проверками ошибок

    #!/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

    Советы и рекомендации

    1. Безопасность паролей: Используйте переменные окружения вместо передачи пароля в командной строке:

      export LFTP_PASSWORD="password"
      lftp -u user --env-password host.com
      
    2. Параллельные загрузки: Используйте опцию -P для ускорения передачи:

      lftp> mirror -c -P 4 /remote /local
      
    3. Фоновые операции: Добавляйте & в конце для запуска в фоне:

      lftp> mirror /remote /local &
      
    4. Проверка соединения: Используйте reconnect для переподключения при разрыве:

      lftp> reconnect
      
    5. Логирование: Перенаправляйте 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 специалистов.

    1 ответ Последний ответ
    1
    • AladdinA Aladdin переместил эту тему из Системное Администрирование

    Категории

    • Главная
    • Новости
    • Фронтенд
    • Бекенд
    • Языки программирования

    Контакты

    • Сотрудничество
    • info@exlends.com
    • Наш чат
    • Наш ТГ канал

    © 2024 - 2025 ExLends, Inc. Все права защищены.

    Политика конфиденциальности
    • Войти

    • Нет учётной записи? Зарегистрироваться

    • Войдите или зарегистрируйтесь для поиска.
    • Первое сообщение
      Последнее сообщение
    0
    • Лента
    • Категории
    • Последние
    • Метки
    • Популярные
    • Пользователи
    • Группы