RETR 是 RETRieve(检索)的缩写,它是 FTP(文件传输协议)协议中最核心、最常用的命令之一。

核心功能
RETR 命令用于从远程 FTP 服务器上 下载(或称“检索”)一个文件 到本地客户端。
命令语法
RETR 命令本身不能单独使用,它需要和 GET 或 RETR 关键字一起,后面跟着要下载的文件名。
基本格式:
RETR <远程文件名>
或者,在大多数 FTP 客户端(如命令行 ftp)中,你也可以使用更直观的 GET 命令,它的功能与 RETR 完全相同:

GET <远程文件名>
工作流程
当你执行 RETR 命令时,客户端和服务器之间会发生以下事情:
- 发送请求:客户端向 FTP 服务器发送
RETR <文件名>命令。 - 服务器检查:服务器接收到命令后,会检查:
- 你是否已成功登录(拥有适当的用户权限)。
- 你是否有权限读取该文件。
- 指定的文件是否存在。
- 建立数据连接:
- 如果一切正常,服务器会从 控制连接 返回一个
150 Opening BINARY mode data connection for <文件名>的消息,这个消息表示准备开始传输文件。 - 服务器会建立一个 新的数据连接(通常是 TCP 端口 20,或者一个随机的端口,具体取决于 FTP 模式是主动还是被动模式)。
- 如果一切正常,服务器会从 控制连接 返回一个
- 文件传输:文件将通过这个新建立的数据连接,从服务器传输到你的客户端。
- 传输完成:当文件完全传输后,数据连接会关闭。
- 确认消息:服务器会通过控制连接发送一个最终状态码:
226 Transfer complete.:表示文件成功传输完毕。4xx或5xx错误码:表示传输过程中出现错误(磁盘空间不足、文件被占用等)。
使用示例
下面是一个在命令行中使用 ftp 客户端下载文件的完整示例。
场景:从 ftp.example.com 服务器下载名为 report.txt 的文件。
# 1. 连接到 FTP 服务器 $ ftp ftp.example.com Connected to ftp.example.com. 220 (vsFTPd 3.0.3) Name (ftp.example.com:your_local_user): myusername 331 Please specify the password. Password: ******** 230 Login successful. # 2. 进入服务器上存放文件的目录 ftp> cd /path/to/files 250 Directory successfully changed. # 3. 查看当前目录下的文件,确认 'report.txt' 存在 ftp> dir -rw-r--r-- 1 1000 1000 1234 Jan 01 12:00 report.txt 226 Directory send OK. # 4. 执行 RETR 命令下载文件 # (假设下载到当前本地目录,文件名保持不变) ftp> retr report.txt local: report.txt remote: report.txt 150 Opening BINARY mode data connection for report.txt (1234 bytes) 226 Transfer complete. 1234 bytes received in 0.0032 secs (375.0 kB/s) # 5. 验证文件是否已下载到本地 ftp> !ls report.txt other_local_files # 6. 退出 FTP 会话 ftp> bye 221 Goodbye.
RETR vs. GET
| 特性 | RETR |
GET |
|---|---|---|
| 本质 | FTP 协议的标准原始命令。 | GET 是大多数 FTP 客户端(如 ftp, lftp)提供的便捷别名。 |
| 功能 | 功能完全相同,用于下载文件。 | 功能完全相同,用于下载文件。 |
| 可移植性 | 最高,它是协议的一部分,任何标准 FTP 客户端都支持。 | 较高,几乎所有现代 FTP 客户端都支持 GET 作为 RETR 的别名,但在极少数非常古老的或精简的实现中可能不支持。 |
| 易用性 | 对于初学者来说,GET 更直观,因为它是 "get file" 的缩写。 |
RETR 是协议术语,对不熟悉底层协议的人来说可能不那么直观。 |
在日常使用中,GET 和 RETR 可以互换使用。GET 更易于记忆和理解,但在需要严格遵循协议规范或编写脚本时,RETR 是更正式的称呼。

常见问题与错误码
使用 RETR 时,你可能会遇到一些错误,服务器会通过状态码告诉你问题所在:
550 Failed to open file.:最常见错误,表示文件不存在、你没有权限访问,或者路径错误。425 Use PORT or PASV first.:在主动模式下,客户端需要先使用PORT命令告诉服务器自己的 IP 和端口,在被动模式下,客户端需要先使用PASV命令让服务器提供一个数据端口,这个错误通常是因为数据连接没有正确建立。552 Exceeded storage space.:本地客户端(或服务器,取决于配置)的磁盘空间不足,无法存储下载的文件。Connection timed out:网络问题,导致数据连接超时。
RETR (或其别名 GET) 是 FTP 协议中用于从服务器下载文件的基本命令,理解它的工作原理,包括它与控制连接和数据连接的交互,对于有效地使用 FTP 进行文件管理至关重要,在大多数情况下,你都可以放心地使用 GET 命令,因为它更简单直观。
