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

RETR 命令的作用
RETR 命令的主要功能是从远程 FTP 服务器下载一个文件到本地客户端。
当您成功登录到 FTP 服务器后,如果您想获取服务器上的某个文件,就需要使用 RETR 命令。
命令语法
RETR 命令的基本语法非常简单:
RETR <remote_filename>
参数说明:

<remote_filename>: 你想要从服务器下载的远程文件名,这个文件名是相对于您当前在服务器上所在的目录(工作目录)的。
示例:
假设您在 FTP 服务器上,当前目录是 /home/user/files,并且您想下载名为 report.txt 的文件,您应该输入:
RETR report.txt
工作流程
RETR 命令的执行过程不仅仅是一个简单的指令,它涉及客户端和服务器的多次交互:
- 建立连接: 客户端首先通过
PASV或PORT命令与服务器协商好一个数据连接的端口,现代 FTP 客户端通常使用PASV(被动模式)来避免防火墙问题。 - 发送命令: 客户端向 FTP 服务器发送
RETR <filename>命令。 - 服务器响应: 服务器收到命令后,会返回一个三位的数字响应码。
- 如果文件存在且客户端有权限,服务器会返回
150 Opening BINARY mode data connection for report.txt(或其他传输模式,如 ASCII),这表示服务器已经准备好,即将在数据连接上发送文件内容。 - 如果文件不存在或无权限,服务器会返回错误码,如
550 File not found或550 Permission denied。
- 如果文件存在且客户端有权限,服务器会返回
- 数据传输: 服务器通过上一步建立的数据连接,将文件内容发送给客户端。
- 关闭数据连接: 文件传输完成后,服务器会先关闭数据连接。
- 最终响应: 服务器向客户端发送一个最终的三位数字响应码,确认整个传输操作成功或失败。
- 成功时,通常是
226 Transfer complete。 - 失败时,可能是
425 Can't open data connection或其他错误码。
- 成功时,通常是
常见响应码
理解响应码对于调试 FTP 问题至关重要。

| 响应码 | 含义 | 说明 |
|---|---|---|
| 150 | File status okay; about to open data connection. | 文件状态正常,即将打开数据连接,这是 RETR 命令发送后,服务器准备传输文件时的标准响应。 |
| 226 | Closing data connection. Requested file action successful. | 关闭数据连接,请求的文件操作成功,表示文件已完整、成功地下载。 |
| 125 | Data connection already open; transfer starting. | 数据连接已打开,传输开始。 |
| 450 | Requested file action not taken. | 请求的文件操作未执行,通常是因为文件正在被使用(另一个进程正在写入)。 |
| 550 | Requested action not taken. | 请求的操作未执行,常见原因:文件不存在、目录不存在、没有读取权限等。 |
| 425 | Can't open data connection. | 无法打开数据连接,通常是由于网络问题、防火墙阻止或 PASV/PORT 模式设置错误。 |
| 426 | Connection closed; transfer aborted. | 连接已关闭;传输中止,在数据传输过程中连接被意外中断。 |
实际操作示例(使用命令行 FTP)
下面是一个完整的、从登录到下载文件的示例。
# 1. 连接到 FTP 服务器 $ ftp ftp.example.com Connected to ftp.example.com. 220-Welcome to example.com FTP service. 220-... Name (ftp.example.com:user): myusername 331 Password required for myusername. Password: ******** 230-... 230 Login successful. # 2. 查看服务器上的文件 ftp> dir 200 Port command successful. 150 Here comes the directory listing. -rw-r--r-- 1 0 0 1234 Jan 10 12:34 report.txt 226 Directory send OK. # 3. 切换到包含文件的目录 (如果需要) ftp> cd /home/user/files 250 Directory successfully changed. # 4. 使用 RETR 命令下载文件 report.txt # 假设本地当前目录是 /path/to/local/downloads ftp> get report.txt <-- 'get' 是 RETR 的一个常用别名 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.05 secs (24.68 Kbytes/sec) # 5. 查看本地文件是否已下载 ftp> dir local 200 Port command successful. 150 Here comes the directory listing. -rw-r--r-- 1 user staff 1234 Jan 10 12:34 report.txt 226 Directory send OK. # 6. 退出 FTP ftp> bye 221 Goodbye.
注意: 在大多数 FTP 客户端(包括命令行)中,get 命令是 RETR 命令的一个便捷别名,功能完全相同。mget 命令则是用于下载多个文件。
RETR 与 STOR 的区别
这是一个非常重要的对比,因为它们是 FTP 文件传输的两个基本操作。
| 特性 | RETR (Retrieve) |
STOR (Store) |
|---|---|---|
| 方向 | 下载 (Download) | 上传 (Upload) |
| 数据流向 | 从 服务器 -> 客户端 | 从 客户端 -> 服务器 |
| 用途 | 获取服务器上的文件到本地 | 将本地的文件发送到服务器 |
| 类比 | “给我一份文件” | “我给你一份文件” |
重要注意事项
- 文件名大小写: FTP 服务器通常运行在类 Unix 系统(如 Linux)上,文件名是大小写敏感的。
RETR Report.TXT和retr report.txt可能指向不同的文件。 - 传输模式: 在传输文本文件时,请确保使用
ascii模式,这会自动处理不同操作系统下的换行符(\nvs\r\n),对于二进制文件(如 .zip, .jpg, .exe),必须使用binary或image模式,否则文件会损坏。 - 权限: 您必须对远程文件有读取权限,否则
RETR命令会失败,返回550错误。 - 被动模式: 在有防火墙的网络环境中,强烈建议使用被动模式
passive,这可以让客户端主动连接服务器的数据端口,避免服务器主动连接客户端被防火墙阻止的问题。
RETR 是 FTP 协议中用于从服务器下载文件的核心命令,虽然在实际操作中,我们更多地使用客户端工具提供的图形界面或像 get 这样的别名,但其底层工作原理始终是基于 RETR 命令及其与服务器之间建立的数据连接,理解 RETR 的工作流程和常见响应码,有助于您在遇到 FTP 传输问题时进行快速定位和解决。
