使用内置的 ftp 命令
ftp 是 Linux 系统自带的文件传输协议客户端,几乎所有发行版都预装了,但它比较基础,交互式操作,不太适合自动化脚本。

基本步骤
-
打开终端。
-
连接到 FTP 服务器:
ftp ftp.yourserver.com
将
ftp.yourserver.com替换为你的 FTP 服务器地址,你也可以指定端口:ftp -p 21 ftp.yourserver.com
-
输入用户名和密码: 连接成功后,服务器会提示你输入用户名和密码。
(图片来源网络,侵删)Name (ftp.yourserver.com:your_local_user): your_username Password:输入密码时,为了安全,终端是不会显示任何字符的(包括星号 ),这是正常的。
-
上传文件: 连接成功后,你将进入
ftp>提示符,现在可以执行上传命令了。-
上传单个文件:
put /path/to/your/localfile.txt
将
/path/to/your/localfile.txt替换为你本地文件的完整路径。
(图片来源网络,侵删) -
上传整个目录:
ftp命令本身没有直接上传目录的命令,需要结合其他工具,最常用的是mput(multiple put) 和tar(打包)。# 首先进入要上传的本地目录(可选,方便路径操作) lcd /path/to/your/local_directory # 在FTP服务器上进入目标目录 cd /path/to/remote/directory # 使用 mput 上传所有文件 mput *
mput *会提示你确认每个文件,如果不想确认,可以提前执行prompt off命令来关闭交互式提示。
-
-
查看文件列表:
- 查看本地目录:
!ls或!dir - 查看远程目录:
ls或dir
- 查看本地目录:
-
断开连接: 完成上传后,输入
bye或quit退出 FTP 会话。bye
使用功能强大的 lftp 命令 (推荐)
lftp 是一个功能非常丰富的命令行文件客户端,支持 FTP、FTPS、SFTP、HTTP 等多种协议,它比 ftp 命令更强大、更方便,尤其是在处理目录和自动化脚本方面,如果你的系统没有安装,可以使用包管理器安装:
- Debian/Ubuntu:
sudo apt-get install lftp - CentOS/RHEL:
sudo yum install lftp
基本步骤
-
打开终端。
-
直接连接并执行命令:
lftp的一个巨大优势是可以在一条命令中完成连接、认证和操作,非常适合脚本。-
上传单个文件:
lftp -u your_username,your_password ftp.yourserver.com -e "put /path/to/your/localfile.txt; bye"
-u your_username,your_password: 指定用户名和密码。ftp.yourserver.com: 服务器地址。-e "...": 执行指定的命令,多个命令用分号 隔开。put ...: 上传文件。bye: 退出。
-
上传整个目录:
lftp有专门的mirror命令来同步目录,非常方便。lftp -u your_username,your_password ftp.yourserver.com -e "mirror -R /path/to/your/local_directory /path/to/remote/directory; bye"
mirror: 目录同步命令。-R: 关键参数!表示“反向镜像”,即从本地上传到远程,如果不加-R,则是从远程下载到本地。/path/to/your/local_directory: 本地源目录。/path/to/remote/directory: 远程目标目录。
-
交互式使用: 你也可以像
ftp那样进入交互模式:lftp ftp.yourserver.com
然后依次执行:
# 登录 user your_username your_password # 上传目录 mirror -R /local/path /remote/path # 退出 bye
-
使用万能的 curl 命令
curl 通常用于处理网络请求,但它也支持通过 FTP 协议上传文件,它的优点是通用性强,很多脚本环境中可能已经有 curl 而没有 lftp。
基本步骤
-
打开终端。
-
使用
curl -T上传文件:-
上传单个文件:
curl -T /path/to/your/localfile.txt -u your_username:your_password ftp://ftp.yourserver.com/path/to/remote/directory/
-T: 指定要上传的文件(T for To/Upload)。-u: 指定用户名和密码。ftp://...: FTP 服务器的完整 URL。
-
上传多个文件: 你可以在
-T后面跟多个文件路径,用空格隔开。curl -T /path/to/file1.txt -T /path/to/file2.txt -u your_username:your_password ftp://ftp.yourserver.com/path/to/remote/directory/
-
上传目录:
curl本身不直接支持目录上传,需要结合find命令来实现。# 进入要上传的目录 cd /path/to/your/local_directory # 使用 find 和 curl 配合上传 find . -type f | while read f; do curl -T "$f" -u your_username:your_password "ftp://ftp.yourserver.com/path/to/remote/directory/$f" done这个命令会找到当前目录下的所有文件,然后逐个上传到远程服务器的对应路径下。
-
总结与对比
| 特性 | ftp (内置) |
lftp (推荐) |
curl (通用) |
|---|---|---|---|
| 易用性 | 较低,交互式操作 | 高,命令简洁,支持脚本 | 中等,参数较多 |
| 功能 | 基础文件传输 | 强大,支持断点续传、后台任务、多协议、目录同步 | 非常强大,支持几乎所有网络协议,但FTP功能相对独立 |
| 目录上传 | 需要配合 mput 和 tar |
非常方便,mirror -R 一条命令搞定 |
需要结合 find 等外部命令,较复杂 |
| 自动化 | 不适合,交互式强 | 非常适合,-e 参数完美支持 |
非常适合,是脚本工具链的一部分 |
| 安装 | 无需安装,系统自带 | 通常需要额外安装 | 通常无需安装,系统自带 |
推荐选择
- 日常手动操作或简单脚本:使用
lftp,它的mirror -R命令处理目录上传极其方便,是首选。 - 在已经存在
curl的复杂脚本中:使用curl,可以避免引入新的工具依赖。 - 紧急情况或系统无法安装新软件:使用
ftp,虽然麻烦但总能解决问题。
安全性提示
传统的 FTP 协议在传输用户名和密码时是明文的,非常不安全,如果你的服务器支持,请尽量使用更安全的协议:
- FTPS (FTP over SSL/TLS): 在
ftp/lftp/curl中通常通过添加-p(或--ftp-ssl-reqired) 等参数来启用。# lftp 使用 FTPS lftp -u user,pass -p 990 ftps.yourserver.com
- SFTP (SSH File Transfer Protocol): 它是基于 SSH 的
