命令行 FTP 客户端
服务器上通常没有图形工具,命令行里 curl 与 lftp 是主力。curl 适合一次性的上传下载与快速列目录,参数直接、便于写进脚本;lftp 提供镜像同步、断点续传与批量命令,做定期同步比一堆 curl 调用更稳。两者都支持加密通道:curl 走显式 FTPS,lftp 还能直接走 SFTP。
基本信息
| curl 优势 | 参数简单,适合一次性操作与脚本化调用 |
|---|---|
| lftp 优势 | 镜像同步、续传、批量命令与配置持久化 |
| 主动被动 | 两者默认走被动模式,可切换 |
| 加密支持 | curl 显式 FTPS,lftp 支持 FTPS 与 SFTP |
| 认证方式 | 用户名口令,也可用配置文件避免明文写在命令里 |
curl 走 FTP
curl 走 FTP
curl -u alice:口令 ftp://ftp.example.com/pub/file.tar.gz -O # 下载
curl -u alice:口令 ftp://ftp.example.com/pub/ # 列目录
curl -T local.bin -u alice:口令 ftp://ftp.example.com/upload/ # 上传
curl --ftp-ssl -u alice:口令 ftp://host/ # 显式 FTPSlftp 镜像同步
lftp 镜像同步
lftp -u alice,口令 ftp.example.com -e 'mirror --only-newer /remote ./local; bye'
lftp sftp://user@host -e 'put file.tar.gz; bye' # 直接走 SFTP
lftp -u alice,口令 -e 'set ftp:ssl-force true; ls; bye' ftp.example.com任务与工具选择
| 任务 | 推荐工具 | 原因 |
|---|---|---|
| 单文件上传下载 | curl | 命令短,容易嵌进脚本 |
| 目录增量同步 | lftp 的镜像命令 | 只传变化的部分 |
| 交互式排查 | lftp 交互模式 | 可逐条执行并观察应答 |
| 批量脚本 | lftp 加命令文件 | 一次连接完成多个动作 |
lftp 的镜像命令支持反向同步与续传相关选项,做定期同步比自写脚本更省流量也更稳。另外把口令写进命令行会留在进程列表与历史记录里,长期使用应改写到受权限保护的配置文件,并对文件本身做权限收敛。
列目录与传输是两条不同的连接:控制连接只负责发命令与收应答,真正搬运数据的是另一条连接。因此遇到「能登录、能列目录但文件传不动」这种情况,应该重点核对数据连接的端口与方向,而不是反复验证账号口令是否正确;先把故障归到控制侧还是数据侧,再谈调优。