Linux lftp命令详解

lftp是一个功能强大的命令行FTP客户端,支持多种协议,包括FTP、FTPS、HTTP、HTTPS、SFTP、FISH等。它提供了镜像同步、批量传输、队列管理、脚本自动化等高级功能,是Linux下最强大的文件传输工具之一。

核心特性:多协议支持 | 镜像同步 | 队列管理 | 脚本自动化 | 断点续传 | 并行传输

核心特性

多协议支持

FTP, FTPS, HTTP, HTTPS, SFTP, FISH, BitTorrent等

镜像同步

完整的目录镜像功能,支持增量同步

队列管理

强大的传输队列,支持并行和优先级

脚本支持

完整的脚本语言,支持条件判断和循环

断点续传

智能断点续传,支持大文件传输

并行传输

多线程并行下载,大幅提升传输速度

安装方法

Ubuntu/Debian
sudo apt update
sudo apt install lftp

# 安装SSL支持
sudo apt install lftp-ssl
CentOS/RHEL
sudo yum install lftp

# 或使用epel源
sudo yum install epel-release
sudo yum install lftp
Fedora
sudo dnf install lftp
macOS
brew install lftp

支持协议

FTP
FTPS
HTTP
HTTPS
SFTP
FISH
Torrent
File

基本语法

lftp [选项] [站点URL]
lftp -f 脚本文件
lftp -c "命令序列"

常用选项

选项 描述 示例
-u 用户名,密码 指定登录用户名和密码 -u admin,pass123
-p 端口 指定连接端口 -p 2121
-e 命令 连接后执行的命令 -e "ls"
-f 脚本文件 从文件读取并执行命令 -f script.lftp
-c "命令" 执行命令后退出 -c "open ftp.example.com"
--norc 不读取配置文件 --norc
--version 显示版本信息 --version
--help 显示帮助信息 --help

连接与认证

基础连接 各种协议连接方式
# FTP连接
lftp ftp://ftp.example.com
lftp -u username,password ftp://ftp.example.com

# FTPS连接(加密FTP)
lftp ftps://ftp.example.com

# HTTP/HTTPS连接
lftp http://example.com/files/
lftp https://example.com/secure/

# SFTP连接(SSH文件传输)
lftp sftp://user@example.com
lftp sftp://user:pass@example.com:2222

# 本地文件系统
lftp file:///home/user/documents

交互式命令

常用交互命令
# 连接后进入lftp交互模式
lftp> help                   # 显示帮助
lftp> ls                    # 列出远程文件
lftp> cd 目录               # 切换远程目录
lftp> lcd 目录              # 切换本地目录
lftp> pwd                   # 显示远程当前目录
lftp> lpwd                  # 显示本地当前目录
lftp> mkdir 目录名           # 创建远程目录
lftp> rmdir 目录名           # 删除远程目录
lftp> rm 文件               # 删除远程文件
lftp> mv 旧名 新名           # 重命名远程文件
lftp> chmod 权限 文件        # 修改远程文件权限

# 文件传输命令
lftp> get 远程文件           # 下载单个文件
lftp> mget *.txt            # 下载多个文件
lftp> put 本地文件           # 上传单个文件
lftp> mput *.zip            # 上传多个文件
lftp> pget -n 10 大文件     # 并行下载(10个连接)
lftp> mirror 远程目录        # 镜像下载整个目录
lftp> mirror -R 本地目录     # 镜像上传整个目录

# 队列管理
lftp> queue add 命令        # 添加命令到队列
lftp> queue start           # 开始执行队列
lftp> queue stop            # 停止队列执行
lftp> queue                # 查看队列状态

# 书签管理
lftp> bookmark add 名称     # 添加书签
lftp> bookmark list         # 列出书签
lftp> bookmark delete 名称  # 删除书签

# 退出
lftp> exit                  # 退出lftp
lftp> bye                   # 退出lftp

文件传输操作

上传下载 基本文件传输
# 下载单个文件
lftp -e "get remote_file.txt; exit" ftp://example.com

# 下载多个文件(通配符)
lftp -e "mget *.pdf; exit" ftp://example.com/files/

# 上传单个文件
lftp -e "put local_file.zip; exit" ftp://user:pass@example.com

# 上传多个文件
lftp -e "mput /local/path/*.jpg; exit" ftp://example.com/uploads/

# 重命名下载
lftp -e "get remote.txt -o local.txt; exit" ftp://example.com

# 续传下载
lftp -e "get -c large_file.iso; exit" ftp://example.com

# 限制下载速度(KB/s)
lftp -e "set net:limit-rate 1024; get file.iso; exit" ftp://example.com

镜像同步

mirror命令详解

mirror命令是lftp最强大的功能之一,可以同步整个目录结构。

# 基本镜像下载(远程→本地)
lftp -e "mirror /remote/dir /local/dir; exit" ftp://example.com

# 镜像上传(本地→远程)
lftp -e "mirror -R /local/dir /remote/dir; exit" ftp://example.com

# 只同步新文件(增量同步)
lftp -e "mirror -c /remote /local; exit" ftp://example.com

# 删除本地多余文件(保持完全一致)
lftp -e "mirror --delete /remote /local; exit" ftp://example.com

# 并行镜像(加快速度)
lftp -e "mirror --parallel=10 /remote /local; exit" ftp://example.com

# 排除特定文件
lftp -e "mirror -x '*.tmp' -x 'temp/' /remote /local; exit" ftp://example.com

# 只同步特定文件类型
lftp -e "mirror -I '*.jpg' -I '*.png' /remote/images /local; exit" ftp://example.com

# 深度限制(只同步3层目录)
lftp -e "mirror --depth=3 /remote /local; exit" ftp://example.com

队列管理

高级队列操作
# 添加多个任务到队列
lftp -e "
open ftp://example.com
queue get file1.zip
queue get file2.iso
queue mirror /docs /local/docs
queue start
exit
"

# 设置队列并行数量
lftp -e "
set cmd:queue-parallel 3
queue add get large1.iso
queue add get large2.iso
queue add get large3.iso
queue start
exit
"

# 队列优先级
lftp -e "
queue add pget -n 5 important.iso
queue add pget -n 2 not_important.iso
queue start
exit
"

# 检查队列状态
lftp -e "
queue add get file1.zip
queue add get file2.zip
queue
jobs
exit
"

脚本自动化

lftp脚本示例

lftp支持完整的脚本语言,可以创建复杂的自动化任务。

# 脚本文件: backup.lftp
open ftp://backup:password@backup.example.com:21
cd /backup/$(hostname)/$(date +%Y%m%d)

# 上传数据库备份
put /backup/database.sql.gz

# 上传网站文件
mirror -R /var/www/html /website_backup

# 上传日志文件
mput /var/log/*.log

# 检查上传结果
ls -la
bye
# 条件判断脚本
open ftp://example.com

if ($(date +%H) -lt 12) then
    cd /morning_uploads/
else
    cd /afternoon_uploads/
endif

mput /data/*.csv
bye
# 循环处理文件
open ftp://example.com/uploads/

foreach file (*.jpg *.png)
    echo "处理文件: $file"
    get $file -o /local/images/$file
    rm $file
end

bye

配置文件

# ~/.lftprc 配置文件示例

# 网络设置
set net:timeout 60
set net:max-retries 5
set net:reconnect-interval-base 5
set net:limit-rate 0:0  # 不限速

# FTP设置
set ftp:ssl-allow yes
set ftp:ssl-protect-data yes
set ftp:ssl-protect-list yes

# SFTP设置
set sftp:connect-program "ssh -a -x -o ConnectTimeout=10"
set sftp:auto-confirm yes

# 镜像设置
set mirror:use-pget-n 5
set mirror:parallel-transfer-count 3
set mirror:parallel-directories yes

# 队列设置
set cmd:queue-parallel 2
set cmd:save-cwd-history yes

# 别名定义
alias lls !ls --color=auto
alias lless !less
alias lcd cd

# 书签定义
bookmark add myserver ftp://user:pass@example.com
bookmark add backup sftp://backup@backup.example.com:2222

# 自动登录脚本
auto myserver "cd /uploads; ls"

高级技巧

# 1. 并行下载大文件(10个连接)
lftp -e "pget -n 10 http://example.com/linux.iso; exit"

# 2. 定时自动同步(结合cron)
# crontab -e 添加:
0 2 * * * lftp -f /home/user/sync.lftp

# 3. 批量重命名下载
lftp -e "
open ftp://example.com/images/
glob -a get *.jpg -o renamed_#1#.jpg
exit
"

# 4. 通过代理连接
lftp -e "
set ftp:proxy http://proxy.example.com:8080
open ftp://target.example.com
ls
exit
"

# 5. 比较本地和远程目录差异
lftp -e "
open ftp://example.com
mirror -n /remote /local  # 只显示差异,不传输
exit
"

# 6. 从HTTP服务器下载整个网站
lftp -e "
mirror --parallel=10 --use-pget-n=5 http://example.com/ /backup/website/
exit
"

# 7. 使用Tor匿名下载
lftp -e "
set ftp:proxy socks5://localhost:9050
open ftp://anonymous@ftp.example.com
get file.zip
exit
"

# 8. 加密配置文件中的密码
# 在~/.lftprc中使用:
set ftp:password "ENC:加密后的密码"
# 使用lftp --encrypt-password生成加密密码

实用脚本示例

网站备份脚本
#!/bin/bash
# website_backup.lftp
open sftp://backup@server.example.com:22
cd /backup/websites/$(date +%Y%m%d)

echo "开始备份网站文件..."
mirror -R /var/www/html /website_$(date +%Y%m%d)

echo "备份数据库..."
!mysqldump -u root -p密码 database > /tmp/db.sql
put /tmp/db.sql

echo "清理临时文件..."
!rm /tmp/db.sql

echo "备份完成!"
ls -lh
bye
批量下载脚本
#!/bin/bash
# batch_download.lftp
open ftp://user:pass@ftp.example.com

# 切换到下载目录
cd /downloads/software

# 创建本地目录
!mkdir -p /local/downloads

# 批量下载所有zip文件
queue add mget *.zip -O /local/downloads/

# 并行下载大文件
queue add pget -n 5 large_file.iso -o /local/downloads/

# 开始执行队列
queue start

# 等待队列完成
wait

echo "下载完成!"
ls /local/downloads/
bye

工具对比

特性对比 lftp wget curl
协议支持 FTP, FTPS, HTTP, HTTPS, SFTP, FISH, Torrent HTTP, HTTPS, FTP HTTP, HTTPS, FTP, SFTP, SCP等20+
交互模式 完整交互式shell 无交互模式 无交互模式
镜像同步 强大mirror命令 基本递归下载 不支持
队列管理 完整队列系统 不支持 不支持
脚本语言 完整脚本支持 不支持 不支持
并行下载 pget命令 不支持 不支持
适用场景 复杂FTP操作、镜像同步、自动化任务 简单文件下载、网页抓取 API调用、简单文件传输
常见问题解决
  • 连接超时:设置 set net:timeout 60set net:max-retries 3
  • SSL/TLS错误:尝试 set ftp:ssl-allow no 或使用FTPS协议
  • 中文乱码:设置 set ftp:charset UTF-8set file:charset UTF-8
  • 速度慢:启用并行传输 set mirror:parallel-transfer-count 5
  • 内存占用高:减少并行连接数 set pget:default-n 3
  • 书签不保存:确保配置文件可写,或使用 bookmark save
最佳实践
  • 使用配置文件 ~/.lftprc 保存常用设置
  • 重要操作前使用 -n--dry-run 参数测试
  • 大文件传输使用 pget 并行下载加速
  • 定期任务使用脚本配合cron自动化
  • 敏感信息使用加密密码或环境变量
  • 使用 mirror --delete 时要格外小心
  • 定期更新lftp版本以获得更好的协议支持

性能调优

网络优化
# ~/.lftprc 中的网络优化设置
set net:socket-bind-ipv4 yes
set net:socket-bind-ipv6 yes
set net:connection-limit 20
set net:idle 60
set dns:cache-enable yes
set dns:max-cache-ttl 3600
传输优化
# 传输性能优化设置
set ftp:use-mdtm yes
set ftp:use-size yes
set ftp:use-stat-for-list yes
set xfer:use-temp-file yes
set xfer:temp-file-name *.lftp
set mirror:parallel-transfer-count 5
set mirror:use-pget-n 10