Linux 下 FTP 连接使用方式及常用配置
FTP 协议介绍
FTP是FileTransferProtocol(文件传输协议)的英文简称,而中文简称为“文传协议”。用于Internet上的控制文件的双向传输。同时,它也是一个应用程序(Application)。基于不同的操作系统有不同的FTP应用程序,而所有这些应用程序都遵守同一种协议以传输文件。在FTP的使用当中,用户经常遇到两个概念:“下载”(Download)和"上传"(Upload)。"下载"文件就是从远程主机拷贝文件至自己的计算机上;"上传"文件就是将文件从自己的计算机中拷贝至远程主机上。用Internet语言来说,用户可通过客户机程序向(从)远程主机上传(下载)文件。
FTP 采用 Internet 标准文件传输协议 FTP 的用户界面, 向用户提供了一组用来管理计算机之间文件传输的应用程序。
FTP 是基于客户———服务器(C/S)模型而设计的,在客户端与 FTP 服务器之间建立两个连接。
开发任何基于 FTP 的客户端软件都必须遵循 FTP 的工作原理,FTP 的独特的优势同时也是与其它客户服务器程序最大的不同点就在于它在两台通信的主机之间使用了两条 TCP 连接,一条是数据连接,用于数据传送;另一条是控制连接,用于传送控制信息(命令和响应),这种将命令和数据分开传送的思想大大提高了 FTP 的效率,而其它客户服务器应用程序一般只有一条 TCP 连接。图 1 给出了 FTP 的基本模型。客户有三个构件:用户接口、客户控制进程和客户数据传送进程。服务器有两个构件:服务器控制进程和服务器数据传送进程。在整个交互的 FTP 会话中,控制连接始终是处于连接状态的,数据连接则在每一次文件传送时先打开后关闭。
传输方式
FTP的传输有两种方式:ASCII、二进制。
- ASCII传输方式
假定用户正在拷贝的文件包含的简单ASCII码文本,如果在远程机器上运行的不是UNIX,当文件传输时ftp通常会自动地调整文件的内容以便于把文件解释成另外那台计算机存储文本文件的格式。
但是常常有这样的情况,用户正在传输的文件包含的不是文本文件,它们可能是程序,数据库,字处理文件或者压缩文件。在拷贝任何非文本文件之前,用binary 命令告诉ftp逐字拷贝。 - 二进制传输模式
在二进制传输中,保存文件的位序,以便原始和拷贝的是逐位一一对应的。即使目的地机器上包含位序列的文件是没意义的。例如,macintosh以二进制方式传送可执行文件到Windows系统,在对方系统上,此文件不能执行。
如在ASCII方式下传输二进制文件,即使不需要也仍会转译。这会损坏数据。(ASCII方式一般假设每一字符的第一有效位无意义,因为ASCII字符组合不使用它。如果传输二进制文件,所有的位都是重要的。)
支持模式
FTP客户端发起FTP会话,与FTP服务器建立相应的连接。FTP会话期间要建立控制信息进程与数据进程两个连接。控制连接不能完成传输数据的任务,只能用来传送FTP执行的内部命令以及命令的响应等控制信息;数据连接是服务器与客户端之间传输文件的连接,是全双工的,允许同时进行双向数据传输。当数据传输完成后,数据连接会撤消,再回到FTP会话状态,直到控制连接被撤消,并退出会话为止。
FTP支持两种模式:Standard (PORT方式,主动方式),Passive (PASV,被动方式)。
- Port模式
FTP 客户端首先和服务器的TCP 21端口建立连接,用来发送命令,客户端需要接收数据的时候在这个通道上发送PORT命令。PORT命令包含了客户端用什么端口接收数据。在传送数据的时候,服务器端通过自己的TCP 20端口连接至客户端的指定端口发送数据。FTP server必须和客户端建立一个新的连接用来传送数据。 - Passive模式
建立控制通道和Standard模式类似,但建立连接后发送Pasv命令。服务器收到Pasv命令后,打开一个临时端口(端口号大于1023小于65535)并且通知客户端在这个端口上传送数据的请求,客户端连接FTP服务器此端口,然后FTP服务器将通过这个端口传送数据。
很多防火墙在设置的时候都是不允许接受外部发起的连接的,所以许多位于防火墙后或内网的FTP服务器不支持PASV模式,因为客户端无法穿过防火墙打开FTP服务器的高端端口;而许多内网的客户端不能用PORT模式登陆FTP服务器,因为从服务器的TCP 20无法和内部网络的客户端建立一个新的连接,造成无法工作。
FTP 客户端注意事项
根据 FTP 客户端是否有公网 IP、是否安装防火墙以及连接的 FTP 服务器的搭建方式,需要注意以下事项:
- 如果 FTP 客户端没有公网 IP,只能使用 PASV 方式才能连接 FTP 服务器;
- 如果 FTP 客户端有公网 IP,且安装了防火墙,当使用 PORT 方式连接 FTP 服务器时,必须在防火墙上打开 1024 以上的高端端口,保证连接数据链路时,服务器端向客户端的连接请求不会被防火墙拦截
FTP 协议连接步骤
可以看这篇作者写的,十分详细
FTP 常用命令
上传和下载。 21端口用于连接,20端口用于传输数据。
进行FTP文件传输中,客户端首先连接到FTP服务器的21端口,进行用户的认证,认证成功后,要传输文件时,服务器会开一个端口为20来进行传输数据文件。
Linux下 FTP 常用命令
Linux 下连接 FTP 服务器
- 连接 FTP
- 断开FTP连接
Linux下 FTP 目录操作
- 查看当前目录
- 进入指定目录
- 创建目录
- 删除目录
- 查看当前目录下所有目录及文件
- 查看指定后缀文件
Linux下 FTP 文件操作
- 删除单个文件
- 删除多个文件
- 重命名文件
- 上传文件
- 下载单个文件
- 下载多个文件
其它命令
- 查询所有命令
FTP 错误码
码 | 描述 | 讨论 |
100系列 | 已请求的行动已启动; 期望另一个回复,然后继续一个新的命令。 | |
110 | 重新启动标记回复。 | 文本是确切的,不留给特定的实现; 它必须读取“MARK yyyy = mmmm”,其中yyyy是用户进程数据流标记,以及mmmm服务器的等效标记(注意标记和“=”之间的空格)。 |
120 | 服务准备在nn分钟。 | |
125 | 数据连接已打开; 转移开始。 | |
150 | 文件状态okay; 即将打开数据连接。 | FTP使用两个端口:21用于发送命令,20用于发送数据。状态代码150表示服务器将在端口20上打开一个新连接以发送某些数据。 |
200系列 | 请求的操作已成功完成。 | |
200 | 命令okay。 | |
202 | 命令没有实现,在这个网站是多余的。 | |
211 | 系统状态或系统帮助答复。 | |
212 | 目录状态。 | |
213 | 文件状态。 | |
214 | 帮助消息。 | |
215 | NAME系统类型。 | 其中NAME是“指定号码”文档中列表中的官方系统名称。 |
220 | 服务准备好为新用户。 | |
221 | 服务关闭控制连接。 | 如果适当,请注销。 |
225 | 数据连接打开; 没有转移正在进行。 | |
226 | 关闭数据连接。 | 请求的文件操作成功(例如,文件传输或文件中止)。该命令在端口20上打开数据连接以执行操作,例如传输文件。此操作成功完成,并且数据连接关闭。 |
227 | 进入被动模式。 | (h1,h2,h3,h4,p1,p2) |
230 | 用户登录,继续。在客户端发送正确的密码后,将显示此状态代码。它表示用户已成功登录。 | |
250 | 请求的文件操作okay,完成。 | |
257 | 已创建“PATHNAME”。 | |
300系列 | 该命令已被接受,但所请求的操作处于保持状态,等待接收进一步的信息。 | |
331 | 用户名okay,需要密码。 | 在客户端发送用户名后,无论所提供的用户名是否是系统上的有效帐户,您都将看到此状态代码。 |
332 | 需要帐户登录。 | 提供登录凭据 |
350 | 请求的文件操作等待进一步的信息。 | |
400系列 | 该命令未被接受并且请求的操作未发生,但错误条件是临时的,并且可以再次请求该操作。 | |
421 | 错误421服务不可用,关闭控制连接。错误421达到用户限制错误421您无权进行连接错误421已达到最大连接数错误421已超过最大连接数 | 如果服务知道它必须关闭,这可以是对任何命令的回复。请稍后尝试登录。 |
425 | 无法打开数据连接。 | 从PASV更改为端口模式,检查您的防火墙设置,或尝试通过HTTP进行连接。 |
426 | 连接关闭; 传输中止。 | 该命令打开数据连接以执行操作,但该操作被取消,并且数据连接被关闭。尝试重新登录; 联系您的托管服务提供商,以检查是否需要增加您的托管帐户; 尝试禁用您的PC上的防火墙,看看是否解决了这个问题。如果没有,请与您的托管服务提供商或ISP联系。 |
450 | 请求的文件操作未执行。 | 文件不可用(例如,文件忙)。稍后再试。 |
451 | 请求的操作中止:处理中的本地错误。 | 确保命令和参数输入正确。 |
452 | 请求的操作未执行。系统中存储空间不足。 | 请FTP管理员增加分配的存储空间,或归档/删除远程文件。 |
500系列 | 该命令未被接受,并且请求的操作未发生。 | |
500 | 语法错误,命令无法识别,命令行太长。 | 尝试切换到被动模式。 |
501 | 参数或参数中的语法错误。 | 验证您的输入; 例如,确保没有错误的字符,空格等。 |
502 | 命令未实现。 | 服务器不支持此命令。 |
503 | 错误的命令序列。 | 验证命令序列。 |
504 | 未对该参数实现命令。 | 确保输入的参数正确。 |
530 | 用户未登录。 | 确保键入正确的用户名和密码组合。某些服务器在达到用户限制时使用此代码,而不是421 |
532 | 需要存储文件的帐户。 | 登录的用户没有在远程服务器上存储文件的权限。 |
550 | 请求的操作未执行。文件不可用,找不到,无法访问 | 验证您是否尝试连接到正确的服务器/位置。远程服务器的管理员必须为您提供通过FTP进行连接的权限。 |
552 | 请求的文件操作中止。超过存储分配。 | 需要更多的磁盘空间。存档远程服务器上不再需要的文件。 |
553 | 请求的操作未执行。不允许文件名。 | 更改文件名中的文件名或删除空格/特殊字符。 |
10,000系列 | 常见Winsock错误代码(Winsock错误代码的完整列表) | |
10054 | 连接由对等体复位。远程主机强制关闭连接。 | |
10060 | 无法连接到远程服务器。 | 一般是超时错误。尝试从PASV切换到端口模式,或尝试增加超时值。 |
10061 | 无法连接到远程服务器。服务器主动拒绝连接。 | 尝试切换连接端口。 |
10066 | 目录不为空。 | 当其中有文件/文件夹时,服务器不会删除此目录。如果要删除目录,请首先归档或删除其中的文件。 |
10068 | 用户过多,服务器已满。 | 尝试在另一时间登录。 |