文件传输协议

FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为“文传协议”。用于Internet上的控制文件的双向传输。同时,它也是一个应用程序(Application)。基于不同的操作系统有不同的FTP应用程序,而所有这些应用程序都遵守同一种协议以传输文件。在FTP的使用当中,用户经常遇到两个概念:"下载"(Download)和"上传"(Upload)。"下载"文件就是从远程主机拷贝文件至自己的计算机上;"上传"文件就是将文件从自己的计算机中拷贝至远程主机上。用Internet语言来说,用户可通过客户机程序向(从)远程主机上传(下载)文件。

  运行机制

  FTP服务器

  简单地说,支持FTP协议的服务器就是FTP服务器。

  与大多数Internet服务一样,FTP也是一个客户机/服务器系统。用户通过一个支持FTP协议的客户机程序,连接到在远程主机上的FTP服务器程序。用户通过客户机程序向服务器程序发出命令,服务器程序执行用户所发出的命令,并将执行的结果返回到客户机。比如说,用户发出一条命令,要求服务器向用户传送某一个文件的一份拷贝,服务器会响应这条命令,将指定文件送至用户的机器上。客户机程序代表用户接收到这个文件,将其存放在用户目录中。

  匿名FTP

  使用FTP时必须首先登录,在远程主机上获得相应的权限以后,方可下载或上传文件。也就是说,要想同哪一台计算机传送文件,就必须具有哪一台计算机的适当授权。换言之,除非有用户ID和口令,否则便无法传送文件。这种情况违背了Internet的开放性,Internet上的FTP主机何止千万,不可能要求每个用户在每一台主机上都拥有帐号。匿名FTP就是为解决这个问题而产生的。

  匿名FTP是这样一种机制,用户可通过它连接到远程主机上,并从其下载文件,而无需成为其注册用户。系统管理员建立了一个特殊的用户ID,名为anonymous,Internet上的任何人在任何地方都可使用该用户ID。

  通过FTP程序连接匿名FTP主机的方式同连接普通FTP主机的方式差不多,只是在要求提供用户标识ID时必须输入anonymous,该用户ID的口令可以是任意的字符串。习惯上,用自己的E-mail地址作为口令,使系统维护程序能够记录下来谁在存取这些文件。

  值得注意的是,匿名FTP不适用于所有Internet主机,它只适用于那些提供了这项服务的主机。

  当远程主机提供匿名FTP服务时,会指定某些目录向公众开放,允许匿名存取。系统中的其余目录则处于隐匿状态。作为一种安全措施,大多数匿名FTP主机都允许用户从其下载文件,而不允许用户向其上传文件,也就是说,用户可将匿名FTP主机上的所有文件全部拷贝到自己的机器上,但不能将自己机器上的任何一个文件拷贝至匿名FTP主机上。即使有些匿名FTP主机确实允许用户上传文件,用户也只能将文件上传至某一指定上传目录中。随后,系统管理员会去检查这些文件,他会将这些文件移至另一个公共下载目录中,供其他用户下载,利用这种方式,远程主机的用户得到了保护,避免了有人上传有问题的文件,如带病毒的文件。

  用户分类

  Real帐户

  这类用户是指在FTP服务上拥有帐号。当这类用户登录FTP服务器的时候,其默认的主目录就是其帐号命名的目录。但是,其还可以变更到其他目录中去。如系统的主目录等等。

  Guest用户

  在FTP服务器中,我们往往会给不同的部门或者某个特定的用户设置一个帐户。但是,这个账户有个特点,就是其只能够访问自己的主目录。服务器通过这种方式来保障FTP服务上其他文件的安全性。这类帐户,在Vsftpd软件中就叫做Guest用户。拥有这类用户的帐户,只能够访问其主目录下的目录,而不得访问主目录以外的文件。

  Anonymous(匿名)用户

  这也是我们通常所说的匿名访问。这类用户是指在FTP服务器中没有指定帐户,但是其仍然可以进行匿名访问某些公开的资源。

  在组建FTP服务器的时候,我们就需要根据用户的类型,对用户进行归类。默认情况下,Vsftpd服务器会把建立的所有帐户都归属为Real用户。但是,这往往不符合企业安全的需要。因为这类用户不仅可以访问自己的主目录,而且,还可以访问其他用户的目录。这就给其他用户所在的空间带来一定的安全隐患。所以,企业要根据实际情况,修改用户所在的类别。

  使用方式

  TCP/IP协议中,FTP标准命令TCP端口号为21,Port方式数据端口为20。FTP的任务是从一台计算机将文件传送到另一台计算机,不受操作系统的限制。

  需要进行远程文件传输的计算机必须安装和运行ftp客户程序。在windows操作系统的安装过程中,通常都安装了tcp/ip协议软件,其中就包含了ftp客户程序。但是该程序是字符界面而不是图形界面,这就必须以命令提示符的方式进行操作,很不方便。

  启动ftp客户程序工作的另一途径是使用ie浏览器,用户只需要在ie地址栏中输入如下格式的url地址:ftp://[用户名:口令@]ftp服务器域名:[端口号]

  (在CMD命令行下也可以用上述方法连接,通过put命令和get命令达到上传和下载的目的,通过ls命令列出目录,除了上述方法外还可以在cmd下输入ftp回车,然后输入openIP来建立一个连接,此方法还适用于linux下连接ftp服务器)

  通过ie浏览器启动ftp的方法尽管可以使用,但是速度较慢,还会将密码暴露在ie浏览器中而不安全。因此一般都安装并运行专门的ftp客户程序。

  1.在本地电脑上登陆到国际互联网

  2.搜索有文件共享主机或者个人电脑(一般有专门的FTP服务器网站上公布的,上面有进入该主机或个人电脑的名称,口令和路径).

  3.当与远程主机或者对方的个人电脑建立连接后,用对方提供的用户名和口令登陆到该主机或对方的个人电脑。

  4.在远程主机或对方的个人电脑登陆成功后,就可以上传你想跟别人分享的东西或者下载别人授权共享的东西(这里的东西是指能放到电脑里去又能在显示屏上看到的东西).

  5.完成工作后关闭FTP下载软件,切断连接。

  传输方式

  FTP的传输有两种方式:ASCII、二进制。

  ASCII传输方式

  假定用户正在拷贝的文件包含的简单ASCII码文本,如果在远程机器上运行的不是UNIX,当文件传输时ftp通常会自动地调整文件的内容以便于把文件解释成另外那台计算机存储文本文件的格式。

  但是常常有这样的情况,用户正在传输的文件包含的不是文本文件,它们可能是程序,数据库,字处理文件或者压缩文件。在拷贝任何非文本文件之前,用binary命令告诉ftp逐字拷贝。

  二进制传输模式

  在二进制传输中,保存文件的位序,以便原始和拷贝的是逐位一一对应的。即使目的地机器上包含位序列的文件是没意义的。例如,macintosh以二进制方式传送可执行文件到Windows系统,在对方系统上,此文件不能执行。

  如在ASCII方式下传输二进制文件,即使不需要也仍会转译。这会损坏数据。(ASCII方式一般假设每一字符的第一有效位无意义,因为ASCII字符组合不使用它。如果传输二进制文件,所有的位都是重要的。)

  支持模式

  FTP支持两种模式:Standard(PORT方式,主动方式),Passive(PASV,被动方式)。

  Port模式

  FTP客户端首先和服务器的TCP21端口建立连接,用来发送命令,客户端需要接收数据的时候在这个通道上发送PORT命令。PORT命令包含了客户端用什么端口接收数据。在传送数据的时候,服务器端通过自己的TCP20端口连接至客户端的指定端口发送数据。FTPserver必须和客户端建立一个新的连接用来传送数据。

  Passive模式

  建立控制通道和Standard模式类似,但建立连接后发送Pasv命令。服务器收到Pasv命令后,打开一个临时端口(端口号大于1023小于65535)并且通知客户端在这个端口上传送数据的请求,客户端连接FTP服务器此端口,然后FTP服务器将通过这个端口传送数据。

  很多防火墙在设置的时候都是不允许接受外部发起的连接的,所以许多位于防火墙后或内网的FTP服务器不支持PASV模式,因为客户端无法穿过防火墙打开FTP服务器的高端端口;而许多内网的客户端不能用PORT模式登陆FTP服务器,因为从服务器的TCP20无法和内部网络的客户端建立一个新的连接,造成无法工作。

  命令参数

  简介

  1.FTP服务器的登陆

  匿名用户:FTP口令:FTP

  用户:ANONYMOUS口令:任何电子邮件

  2.显示文件信息:DIR/LS

  3.下载文件:GET文件名(下载到当前目录)

  4.上传文件:PUT文件名

  5.多文件下载:MGET

  6.多文件上传:MPUT

  7.退出:BYE

  8.帮助:HELP

  用途

  在本地主机和远程主机之间传送文件。

  语法

  ftp[-d][-g][-i][-n][-v][-f][-krealm][-q[-C]][HostName[Port]]

  描述

  -C允许用户指定:通过send_file命令发出的文件必须在网络高速缓冲区(NBC)中经过缓存处理。此标志必须在指定了-q标志的情况下使用。只有当文件在无保护的情况下以二进制方式发送时此标志才适用。

  -d将有关ftp命令操作的调试信息发送给syslogd守护进程。如果您指定-d标志,您必须编辑/etc/syslog.conf文件并添加下列中的一项:

  OR

  user.debugFileName

  请注意:syslogd守护进程调试级别包含信息级别消息。

  如果不编辑/etc/syslog.conf文件,则不会产生消息。变更了/etc/syslog.conf文件之后,请运行refresh-ssyslogd或kill-1SyslogdPID命令,以通知syslogd守护进程其配置文件的变更。关于调试级别的更多信息,请参考/etc/syslog.conf文件。也请参考debug子命令。

  -g禁用文件名中的元字符拓展。解释元字符可参考为扩展(有时叫做文件名匹配替换)文件名。请参考glob子命令。

  -i关闭多文件传送中的交互式提示。请参考prompt、mget、mput和mdelete子命令,以取得多文件传送中的提示的描述。

  -n防止在起始连接中的自动登录。否则,ftp命令会搜索$HOME/.netrc登录项,该登录项描述了远程主机的登录和初始化过程。请参考user子命令。

  -q允许用户指定:send_file子例程必须用于在网络上发送文件。只有当文件在无保护的情况下以二进制方式发送时此标志才适用。

  -v显示远程服务器的全部响应,并提供数据传输的统计信息。当ftp命令的输出是到终端(如控制台或显示)时,此显示方式是缺省方式。

  如果stdin不是终端,除非用户调用带有-v标志的ftp命令,或发送verbose子命令,否则ftp详细方式将禁用。

  -f导致转发凭证。如果Kerberos5不是当前认证方法,则此标志将被忽略。

  -krealm如果远程站的域不同于本地系统的域,系统将允许用户指定远程站的域。因此,域和DCE单元是同义的。如果Kerberos5不是当前认证方法,则此标志将被忽略。

  处理规则

  ftp命令使用“文件传送协议”(FTP)在本地和远程主机或远程主机之间传送文件。

  FTP协议允许在使用不同文件系统的主机之间进行数据传送。尽管协议在传送数据中提供了很高的灵活度,它仍然不会尝试保留特定于某个文件系统的文件属性(如文件保护模式或修改时间)。而且,FTP协议为文件系统的整体结构做了少许假设,且不提供或不允许诸如循环地复制子目录这样的函数。

  请注意:如果您正在系统之间传送文件,且需要保存文件属性或递归地复制子目录,请使用rcp命令。

  您可以在ftp>提示符中输入子命令,执行类似这样的任务:列出远程目录、更改当前的本地和远程目录、在单一请求中传送多个文件、创建和除去目录,以及转义到本地shell执行shell命令。

  如果您执行ftp命令而不为远程主机指定HostName参数,ftp命令会立即显示ftp>提示符,等待ftp子命令。要连接远程主机,请执行open子命令。当ftp命令连接到远程主机时,ftp命令在再次显示提示符ftp>之前会提示输入登录名和密码。如果远程主机中未定义登录名的密码,ftp命令将不成功。

  ftp命令解释器(处理在ftp>提示符处输入的全部子命令),会提供大多数文件传送程序没有的性能,如:

  *对ftp子命令处理文件名参数

  *将一组子命令集中成一个单一的子命令宏

  *从$HOME/.netrc文件中装入宏

  这些性能会帮助您简化重复的任务,并允许您在unattended方式使用ftp命令。

  命令解释器将按照下列规则处理文件名参数:

  *如果为此参数指定了-(连字符),则标准输入(stdin)将用于读取操作,而标准输出用于写入操作。

  *如果未应用前面的检查,且文件名扩展已启用(请参考-g标志或glob子命令),则解释器将根据Cshell的规则扩展文件名。启用了文件名匹配替换以及在期待单一文件名的子命令中使用了模式匹配字符时,结果可能与期待的不一样。

  例如,append和put子命令将拓展文件名,然后仅使用所生成第一个文件名。其它ftp子命令,如cd、delete,get、mkdir、rename和rmdir不会执行文件名拓展,并从字面上接受模式匹配字符。

  *对于get、put、mget和mput子命令,解释器有能力在不同的本地和远程文件名语法样式之间进行翻译和映射(请参考case、ntrans和nmap子命令),并且在本地文件名不是唯一的情况下有修改它的能力(请参考runique子命令)。另外,如果远程文件名不是唯一的,则ftp命令可将指令发送到远程ftpd服务器,以修改远程的文件名(请参考sunique子命令)。

  *使用双引号("")指定包含空字符的参数。

  请注意:ftp命令解释器不支持管道。也无需支持所有多字节字符文件名。

  要在互动地运行的时候结束ftp会话,请使用quit或bye子命令或ftp>提示符处的EndofFile(Ctrl-D)按键顺序。要在文件传送未完成之前结束它,请按中断按键顺序。其缺省“中断键”序列是Ctrl-C。stty指令能用于重新定义该键系列。

  ftp命令在正常情况下会立即暂停正在发送(从本地主机到远端主机)的传输。ftp命令通过将FTPABOR指令发送到远程FTP服务器,来暂停正在接收的传输(从远程主机到本地主机),并废弃所有传入的文件传送包(直到远程服务器停止发送它们为止)。如果远程服务器不支持ABOR指令,在远程服务器未发送所有请求的文件之前,ftp命令不会显示ftp>提示符。另外,如果远程服务器执行未期望的操作时,可能需要结束本地ftp进程。

  登录认证

  如果“标准的”是当前认证方法:

  ftp命令也会通过将密码发送到远程主机来处理安全性,并许可自动登录、文件传送和注销操作。

  如果您执行ftp命令并指定远程主机的主机名(HostName),ftp命令会尝试建立一个对于指定主机的连接。如果ftp命令连接成功,ftp命令会在当前目录或主目录中搜索本地的$HOME/.netrc文件。如果文件存在,ftp命令会在文件中搜索启动登录过程的入口,在命令宏定义中搜索远程主机。如果$HOME/.netrc文件或自动登录项不存在,或是系统已使用securetcpip命令保护起来,ftp命令会提示用户输入用户名和密码。不论命令行中是否指定HostName参数,该指令都会显示此提示。

  请注意:排队系统不支持多字节主机名。

  如果ftp命令找到指定主机的$HOME/.netrc自动登录项,ftp会试图使用该登录项中的信息登录远程主机。ftp命令也会载入任何在登录项中定义的命令宏。在某些情况(例如,所需的密码在自动登录项中没有列出来),ftp命令会在显示ftp>提示符之前提示输入密码。

  一旦ftp命令完成自动登录,如果宏是在自动登录项中定义的,ftp命令就会执行init宏。如果init宏不存在或未包含quit或bye子命令,ftp命令将显示ftp>提示符并等待子命令。

  请注意:在提示符或在$HOME/.netrc文件中指定的远程主机名必须存在,并拥有在远程主机中定义的密码。否则,ftp指令无效。

  如果Kerberos5是当前的认证方法:

  ftp命令会按在IETF草稿文挡"draft-ietf-cat-ftpsec-09.txt"定义的那样将此拓展用于ftp规范。FTP安全性扩展将使用“GenericSecurityServiceAPI(GSSAPI)”安全机制来实现。GSSAPI提供对于基础的安全性和通信机制来说是独立的服务。GSSAPI是在rfc1508和1509中定义的。

  ftp命令将使用AUTH和ADAT命令验证ftpd守护进程。如果两者都支持Kerberos认证,则它们会使用本地用户DCE凭证验证远程系统上的用户。如果这样失败了,且两个系统中都配置了“标准的”认证,则会使用上述的过程。

  HostName参数是传送文件的目的地主机名称。可选的Port参数指定了端口的标识符,通过此端口进行传输。(/etc/services文件指定了缺省端口。)

  操作命令

  下列ftp子命令在ftp>提示符下输入。使用双引号("")指定包含空格字符的参数。

  ![命令[参数]]在本地主机上调用交互的shell。可通过shell命令提供带有一个或多个可选参数的可选命令。

  $>Macro[参数]执行指定的宏(早先使用macdef子命令定义的)。参数不被扩展。

  ?[子命令]显示描述子命令的帮助消息。如果您不指定Subcommand参数,ftp命令将显示已知子命令的清单。

  account[Password]发送远程主机在授权对其资源进行访问之前可能需要的补充密码。如果密码不是命令提供的,将提示用户输入密码。密码不在屏幕上显示。

  appendLocalFile[RemoteFile]将本地文件添加到远程主机文件中。如果远程文件名未指定,则将使用本地文件名,该文件名由ntrans子命令或nmap子命令生成的任何设置进行改变。添加文件的时候,append子命令将为form、mode,struct、和type子命令使用当前值。

  asciitypeascii子命令的同义词。

  bell每个文件传送过程完成之后响一声铃。

  binarytypebinary子命令的同义词。

  blockmodeblock子命令的同义词。

  bye结束文件传送会话并退出ftp命令。与quit子命令相同。

  carriage-controlformcarriage-control子命令的同义词。

  case为文件名case设置一个切换。当case子命令开启的时候ftp命令将全部远程文件名从大写改成小写(将它们写入本地目录时)。其缺省值为关闭(这样ftp命令就会在本地目录中按大写格式写入大写的远程文件名)。

  cdRemoteDirectory将远程主机中的工作目录改为指定的目录。

  cdup将远程主机中的工作目录改为当前目录的父目录。

  close结束文件传送会话,但不要退出ftp命令。已定义的宏已被擦除。与disconnect子命令相同。

  copylocal切换本地拷贝。copylocal缺省值为关闭。ftp通过向自身执行ftp操作确认您未置零文件(如相同的主机名和相同的路径名)。将copylocal打开绕过这一检查。

  cr在ASCII类型文件传送期间接收记录时,从回车和line-feed序列中除去回车字符。(ftp命令在文件传送期间用回车和换行中止每一条ASCII类型的记录。)

  远程主机(其操作系统与正在运行的操作系统不同)的记录可拥有内嵌于记录中的单一换行。要从记录定界符中区分这些内嵌的换行,请将cr子命令设置为关闭。cr子命令会在开启和关闭中间进行切换。

  debug[0|1]在调试记录保持开启和关闭之间进行切换。指定debug或debug1,以打印发送到远程主机的每一个命令,并保存重新启动的控制文件。重新指定debug或debug0,停止调试记录保持。Ctrl-C键也会保存重新启动的控制文件。

  指定debug子命令将有关ftp命令操作的调试信息发送给syslogd守护进程。如果指定了debug子命令,您必须编辑/etc/syslog.conf文件并添加下列中的其中一项:

  请注意:syslogd守护进程调试级别包含信息级别消息。

  如果不编辑/etc/syslog.conf文件,则不会产生消息。变更了/etc/syslog.conf文件之后,请运行refresh-ssyslogd或kill-1SyslogdPID命令,以通知syslogd守护进程其配置文件的变更。关于调试级别的更多信息,请参考/etc/syslog.conf文件。也请参考ftp-d标志。

  deleteRemoteFile删除指定的远程文件。

  dir[RemoteDirectory][LocalFile]将所指定的远程目录的内容清单(RemoteDirectory)写入指定的本地文件(LocalFile)。如果RemoteDirectory参数未指定,dir子命令将列出当前远程目录的内容。如果LocalFile参数未指定或是一个-(连字符),则dir子命令将显示本地终端上的清单。

  disconnect结束文件传送会话,但不退出ftp命令。已定义的宏已被擦除。与close子命令相同。

  ebcdictypeebcdic子命令的同义词。

  exp_cmd在常规的和试验性的协议命令中切换。其缺省值为关闭。

  filestructfile子命令的同义词。

  form[carriage-control|non-print|telnet]指定文件传送的格式。form子命令修改type子命令,以便按指示的格式发送文件传送。有效的参数为carriage-control、non-print和telnet。

  carriage-control

  将文件传送格式设置为carriage-control。

  non-print

  将文件传送格式设置为non-print。

  telnet

  将文件传送格式设置为Telnet。Telnet是打开对系统的连接的传输控制协议/网间协议(TCP/IP)。

  getRemoteFile[LocalFile]将远程文件拷贝到本地主机。如果LocalFile参数未指定,将在本地使用远程文件名,并由case、ntrans和nmap子命令生成的任何设置进行改变。ftp命令在传送文件时,将使用type、form、mode和struct子命令的当前设置。

  glob切换mdelete、mget和mput子命令的文件名拓展(文件名匹配替换)。如果文件名匹配替换禁用,这些子命令的文件名参数将不会拓展。启用了文件名匹配替换以及在期待单一文件名的子命令中使用了模式匹配字符时,结果可能与期待的不一样。

  例如,append和put子命令将拓展文件名,然后仅使用所生成第一个文件名。其它ftp子命令,如cd、delete,get、mkdir、rename和rmdir不会执行文件名拓展,并从字面上接受模式匹配字符。

  mput子命令的文件名匹配替换在本地执行,其方式与csh命令的方式一样。对于mdelete和mget子命令,每个文件名都是在远程机器上分别地进行扩展的,其清单也不会合并。根据远程主机和ftp服务器的不同,目录名的拓展可与文件名的拓展不一样。

  要预览目录名的扩展请使用mls子命令。

  mlsRemoteFile

  要传送文件的整个目录子树,请勿使用mget或mput子命令,而按二进制格式传送子树的tar压缩文档。

  hash切换散列符号(#)打印。当hash子命令是开启的时候ftp命令会为每个所传送的数据块(1024字节)显示一个散列符号。

  help[子命令]显示帮助信息。请参考?子命令。

  imagetypeimage子命令的同义词。

  lcd[Directory]更改本地主机中的工作目录。如果您未指定目录,ftp命令将使用主目录。

  localMtypelocalM子命令的同义词。

  ls[RemoteDirectory][LocalFile]请将远程目录缩写的文件清单写入本地文件。如果RemoteDirectory参数未指定,ftp命令将列出当前远程目录。如果LocalFile参数未指定或是一个-(连字符),则ftp命令将显示本地终端上的清单。

  macdefMacro定义子命令宏。随后直到空行的行(两个连续的换行)将作为宏的文本保存。能为所有宏定义多达16个宏,包含4096个字符。在重新定义或执行close子命令前,应将宏保持为已定义的宏。

  $(美元符号)和\(反斜杠)是ftp宏中的特殊字符。跟随一个或多个数字的$符号将被调用行中对应的宏参数所替换(请参考$子命令)。$符号后紧随字母i表示将要循环该宏,$i字符组合将被每一传递中连续的字符替换。

  第一个参数用于第一个传递,第二个参数用于第二个传递,依此类推。\符号会防止下一个字符的特殊处理。请使用\符号关闭$和\.(反斜杠句点)符号的特殊意义。

  mdeleteRemoteFiles扩展在远程主机上RemoteFiles参数所指定的文件,并删除远程文件。

  mdir[RemoteDirectoriesLocalFile]扩展在远程主机上RemoteDirectories参数所指定的目录,并将这些目录的内容清单写入在LocalFile参数中定义的文件。如果RemoteDirectories参数包含模式匹配字符,mdir子命令将提示输入本地文件(如果没指定)。如果RemoteDirectories参数是用空格隔开的远程目录清单,则清单中最后一个参数必须是一个本地文件名或-(连字符)。

  如果LocalFile参数是-(连字符),mdir子命令将显示本地终端上的清单。如果交互式提示启用(请参考prompt子命令),ftp命令将提示用户验证最后一个参数是本地文件且不是远程目录。

  mgetRemoteFiles请扩展在远程主机上RemoteFiles参数,并将指示的远程文件拷贝到本地主机的当前目录中。请参考glob子命令,取得更多有关文件名扩展的信息。远程文件名在本地使用,并由case、ntrans和nmap子命令所生成的设置进行变更。在传送文件时,ftp命令将使用form、mode、struct和type子命令的当前设置。

  mkdir[RemoteDirectory]创建在RemoteDirectory参数(远程主机中)中指定的目录。

  mls[RemoteDirectoriesLocalFile]扩展在远程主机上在RemoteDirectories参数中指定的目录,并将所指示的远程目录的缩写文件清单写入本地文件。如果RemoteDirectories参数包含模式匹配字符,mls子命令将提示输入本地文件(如果没指定)。如果RemoteDirectories参数是用空格隔开的远程目录清单,则清单中最后一个参数应是一个本地文件名或-(连字符)。

  如果LocalFile参数是-(连字符),mls子命令将显示本地终端上的清单。如果交互式提示启用(请参考prompt子命令),ftp命令将提示用户验证最后一个参数是本地文件且不是远程目录。

  mode[stream|block]设置文件传送方式。如果参数未提供,则缺省值为stream。

  block

  请将文件传送方式设置为block。

  stream

  将文件传送方式设置为stream。

  modtime显示远程机器中所指定文件的最后修改时间。如果ftp命令未连接到执行前的主机,则modtime子命令将带错误消息而终止。ftp命令忽略第一个参数以外的参数。如果FileName参数未指定,ftp命令将提示输入文件名。如果未给出文件名,ftp命令将把用法消息发送给标准输出,并终止该子命令。

  如果远程主机中有FileName参数指定的名称,且该名称指定一个文件,则ftp命令将包含文件最后修改时间的消息发送给标准输出,并终止该子命令。如果FileName指定一个目录,则ftp命令将把错误消息发送给标准输出,并终止该子命令。

  注意:modtime子命令在允许的时候会解释元字符。

  mput[LocalFiles]扩展在主机的LocalFiles参数中指定的文件,并将指示的本地文件复制给远程主机。请参考glob子命令,取得更多有关文件名扩展的信息。本地文件名在远程主机中使用,并由ntrans和nmap子命令所生成的设置进行变更。ftp命令会在传送文件时,使用type、form、mode和struct子命令的当前设置。

  nlist[RemoteDirectory][LocalFile]将所指定的远程目录的内容清单(RemoteDirectory)写入指定的本地文件(LocalFile)。如果RemoteDirectory参数未指定,nlist子命令将列出当前远程目录的内容。如果LocalFile参数未指定或是一个-(连字符),则nlist子命令将显示本地终端上的清单。

  nmap打开或关闭文件名映射机制。如果未指定任何参数,文件名映射将关闭。如果参数已指定,在没有指定目标文件名的时候,将为mget和mput子命令以及get和put子命令映射源文件名。此子命令在本地和远程主机使用不同的文件命名约定和惯例时很有用。映射下列由InPattern和OutPattern参数设置的模式。

  InPattern参数为传入的文件名指定了模板,该文件名有可能已根据case和ntrans设置处理过。可将从$1到$9的模板变量包含进InPattern参数。除$(美元符号)和\$(反斜杠,美元符号)以外,InPattern参数中的所有字符,都是按字面意义处理的,并用作InPattern变量之间的定界符。例如,如果InPattern参数是$1.$2且远程文件名是mydata.dat,则$1的值是mydata,$2的值是dat。

  此OutPattern参数确定结果文件名。从$1到$9的变量将被它们从InPattern参数获得的值替换,而变量$0将由原文件名替换。另外,如果Sequence1不为空,序列[Sequence1,Sequence2]将由Sequence1替换;否则它将由Sequence2的值替换。例如,子命令:

  nmap$1.$2.$3[$1,$2].[$2,file]

  会从myfile.data或myfile.data.old中产生myfile.data,从myfile中产生myfile.file,从。myfile中产生myfile.myfile。请使用\(反斜杠)符号防止OutPattern参数中$(美元符号)、[(左括号)、](右括号)和,(逗号)的特殊意义。

  non-printformnon-print子命令的同义词。

  ntrans]打开或关闭文件名字符翻译机制。如果未指定任何参数,字符翻译将关闭。如果参数已指定,在没有指定目标文件名的时候,将为mget和mput子命令以及get和put子命令翻译源文件名中的字符。

  此子命令在本地和远程主机使用不同的文件名约定和惯例时很有用。字符翻译遵从InCharacters和OutCharacters参数设置的模式。匹配InCharacters参数中字符的源文件名中的字符将由OutCharacters参数中对应的字符替换。

  如果InCharacters参数指定的字符串比OutCharacters参数指定的字符串长,而且其在OutCharacters参数中无对应的字符,则InCharacters参数中的字符将被删除。

  openHostName[Port]在由HostName参数所指定主机中建立对FTP服务器的连接。如果可选的端口号已指定ftp命令将尝试连接该端口中的服务器。如果已设置自动登录功能(即,该-n标志没有在命令行中指定),则ftp命令就会试图让用户登录到FTP服务器。

  您还必须拥有其中带有正确信息的$HOME/.netrc文件和正确的许可集。。netrc文件应在您的主目录中。

  passive切换文件传送的被动方式。在被动方式关闭的情况下调用文件传送命令(如get、mget和put,或mput)时,ftp服务器就会打开对客户机的数据连接。在被动方式下,客户机在发送和接收数据的时候打开对主机的数据连接。

  private请将保护级别设置为“private”。在此级别,数据的保护既完整而又机密。

  prompt切换交互式提示。如果交互式提示启用(缺省值)ftp命令在检索、发送或删除文件(在mget、mput,和mdelete)之前会提示进行验证操作。否则,ftp命令会根据所有指定的文件来执行。

  protect此指令会返回保护的当前级别。

  proxy[子命令]在辅助控制连接中执行ftp命令。此子命令允许ftp子命令同时连接两个远程FTP服务器,以便在两个服务器之间传送文件。第一个proxy子命令应是建立次要控制连接的open子命令。请输入proxy?子命令,查看其它在二级连接中可执行的ftp子命令。

  下列子命令在由proxy子命令开头时的表现会不一样:

  *open子命令在自动登录过程中不定义新的宏。

  *close子命令不会擦除现存的宏定义。

  *get和mget子命令从主连接中的主机上将文件传送到二级连接的主机上。

  *put、mput和append子命令从第二连接中的主机上将文件传送到主连接的主机上。

  *restart子命令可由proxy命令进行处理。

  *status子命令显示出准确的信息。

  文件传送要求第二连接上的FTP服务器必须支持PASV(passive)指令。

  putLocalFile[RemoteFile]将本地文件存储到远程主机中。如果您未指定RemoteFile参数,ftp命令将使用本地文件名命名远程文件,而远程文件名由ntrans和nmap子命令所生成的设置加以改变。ftp命令会在传送文件时,将使用type、form、mode和struct子命令的当前设置。

  pwd显示远程主机中的当前目录名。

  quit关闭连接并退出ftp命令。与bye子命令相同。

  quote字符串逐字地将由String参数指定的字符串发送到远程主机。执行remotehelp或quotehelp子命令,显示String参数的有效值清单。

  注意:涉及数据传输的“Quoting”命令会产生不可预见的结果。

  recordstructrecord子命令的同义词。

  recvRemoteFile[LocalFile]请将远程文件拷贝到本地主机。与get子命令相同。

  reinitialize通过刷新所有I/O并允许完成传输操作来对FTP会话进行重新初始化。按照用户已开始FTP会话但未登录到远程主机的情况复位所有缺省值。

  remotehelp[Subcommand]请求从远程FTP服务器获得帮助。

  renameFromNameToName重新命名远程主机上的文件。

  reset清除回复队列。此子命令将使命令分析重新同步。

  restartget|put|append请在生成上一个检查点的位置重新启动文件传送。要想顺利运行,该子命令应与异常终止子命令相同,包括结构、类型和格式。有效参数为get、put和append。

  rmdirRemoteDirectory除去由远程主机中的RemoteDirectory参数所指定的远程目录。

  runique(ReceiveUnique)在子命令get和mget期间,切换为本地目的文件创建唯一文件名称的功能。如果此功能为“关闭”状态(预设值),ftp命令会覆盖本地文件。否则,如果本地文件名与为本地目的文件指定的名称相同,ftp将使用.1修改为本地目的文件指定的名称。如果本地文件已使用了新名称,ftp将把后缀。2添加给所指定的名称。如果本地文件已使用了此第二个名称,则ftp命令会在找到唯一的文件名或未找到唯一文件名但到达.99之前继续增加后缀。如果ftp命令找不到唯一的文件名,ftp会报告错误,传输过程也不会发生。请注意runique子命令不会影响从shell命令产生的本地文件名。

  safe将保护级别设置为“safe”。在此级别,数据的完整性会得到保护。

  sendLocalFile[RemoteFile]将本地文件存储到远程主机中。其方式与put子命令相同。

  sendport切换对于FTPPORT指令的使用。根据预设,ftp命令在为每个数据传输建立连接的时候会使用PORT指令。当禁用PORT指令时,ftp不会在数据传输中使用PORT命令。PORT指令在处理某些FTP服务器时很有用,那些服务器在未正确指示指令已被接受时会忽略PORT指令。

  siteArgs使用chmod命令显示或设置空闲超时周期、显示或设置文件创建umask或更改文件的许可权。Args参数可能的值是umask和chmod。

  sizeRemoteFile以字节的方式显示RemoteFile参数所指定的远程文件的大小。

  status显示ftp命令的当前状态以及子命令的状态。

  streammodestream子命令的同义词。

  struct[file|record]设置数据传送结构类型。有效的参数为file和record。

  file

  将数据传送结构类型设置为file。

  record

  将数据传送结构类型设置为record。

  sunique(Send/StoreUnique)在子命令put和mput期间,切换为远程目的文件创建唯一文件名称的功能。如果此功能为“关闭”状态(预设值),ftp命令会覆盖远程文件。否则,如果远程文件名与为远程目的文件指定的名称相同,远程FTP服务器会修改远程目的文件的名称。请注意远程服务器必须支持STOU指令。

  系统显示在远程机器上运行的操作系统类型。

  telnetformtelnet子命令的同义词。

  tenextypetenex子命令的同义词。

  跟踪切换包跟踪。

  type[ascii|binary|ebcdic|image|localM|tenex]设置文件传送类型。有效参数是ascii、binary、ebcdic、image,、localM和tenex。如果参数未指定,则当前类型被显示。缺省类型为ascii;binary类型可能会比ascii更有效。

  ascii

  将文件传送类型设置为网络ASCII。此类型为缺省值。文件传送使用二进制映像传送可能会更有效。请参考binary参数,以取得更多信息。

  binary

  文件传送类型设置为二进制映像。此类型可能比ASCII传送更有效。

  ebcdic

  将文件传送类型设置为EBCDIC。

  image

  将文件传送类型设置为二进制映像。此类型可能比ASCII传送更有效。

  localM

  将文件传送类型设置为本地。M参数定义每计算机字位的十进制数。此参数没有缺省值。

  tenex

  将文件传送类型设置为TENEX机器需要的类型。

  userUser[Password][Account]识别远程FTP服务器的本地用户(User)。如果未指定Password或Account参数,而远程服务器需要它,则ftp命令会提示输入本地的密码和帐户。如果Account参数是必须的,则ftp命令会在远程登录过程完成后将它发送到远程服务器。

  注意:除非通过在命令行上指定-n标志来禁用自动登录,否则ftp命令将User、Password和Account参数自动地发送给远程服务器用于初始连接。您亦需主目录中的。netrc文件以便发布自动登录。

  verbose切换详细方式。如果详细方式启用(缺省值),ftp命令将显示远程FTP服务器的全部响应。另外,ftp会在传输完成后显示所有文件传送的统计信息。

  传输协议

  FTP是一个8位的客户端-服务器协议,能操作任何类型的文件而不需要进一步处理,就像MIME或Unicode一样。但是,FTP有着极高的延时,这意味着,从开始请求到第一次接收需求数据之间的时间,会非常长;并且不时的必须执行一些冗长的登陆进程。