FTP详解
概述
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用户。但是,这往往不符合企业安全的需要。因为这类用户不仅可以访问自己的主目录,而 且,还可以访问其他用户的目录。这就给其他用户所在的空间带来一定的安全隐患。所以,企业要根据实际情况,修改用户所在的类别。
使用方式
需要进行远程文件传输的计算机必须安装和运行ftp客户程序。在windows操作系统的安装过程中,通常都安装了tcp/ip协议软件,其中就包含了ftp客户程序。但是该程序是字符界面而不是图形界面,这就必须以命令提示符的方式进行操作,很不方便。
(在CMD命令行下也可以用上述方法连接,通过put命令和get命令达到上传和下载的目的,通过ls命令列出目录,除了上述方法外还可以在cmd下输入ftp回车,然后输入open IP来建立一个连接,此方法还适用于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 客户端首 先和服务器的TCP 21端口建立连接,用来发送命令,客户端需要接收数据的时候在这个通道上发送PORT命令。PORT命令包含了客户端用什么端口接收数据。在传送数据的时 候,服务器端通过自己的TCP 20端口连接至客户端的指定端口发送数据。FTP server必须和客户端建立一个新的连接用来传送数据。
Passive模式
建立控制通道和Standard模式类似,但建立连接后发送Pasv命 令。服务器收到Pasv命令后,打开一个临时端口(端口号大于1023小于65535)并且通知客户端在这个端口上传送数据的请求,客户端连接FTP服务 器此端口,然后FTP服务器将通过这个端口传送数据。
很多防火墙在 设置的时候都是不允许接受外部发起的连接的,所以许多位于防火墙后或内网的FTP服务器不支持PASV模式,因为客户端无法穿过防火墙打开FTP服务器的 高端端口;而许多内网的客户端不能用PORT模式登陆FTP服务器,因为从服务器的TCP 20无法和内部网络的客户端建立一个新的连接,造成无法工作。
命令参数
简介
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 ] [ -k realm] [-q[-C]][ HostName [ Port ] ]
描述
-C 允许用户指定:通过 send_file 命令发出的文件必须在网络高速缓冲区(NBC)中经过缓存处理。此标志必须在指定了-q 标志的情况下使用。只有当文件在无保护的情况下以二进制方式发送时此标志才适用。
-d 将有关 ftp 命令操作的调试信息发送给 syslogd 守护进程。如果您指定-d 标志,您必须编辑/etc/syslog.conf 文件并添加下列中的一项:
OR
user.debug FileName
请注意: syslogd 守护进程调试级别包含信息级别消息。
如果不编辑/etc/syslog.conf 文件,则不会产生消息。变更了/etc/syslog.conf 文件之后,请运行 refresh -s syslogd 或 kill -1 SyslogdPID 命令,以通知 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 导致转发凭证。如果Kerberos 5 不是当前认证方法,则此标志将被忽略。
-k realm 如果远程站的域不同于本地系统的域,系统将允许用户指定远程站的域。因此,域和DCE 单元是同义的。如果Kerberos 5 不是当前认证方法,则此标志将被忽略。
处理规则
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 子命令),则解释器将根据C shell 的规则扩展文件名。启用了文件名匹配替换以及在期待单一文件名的子命令中使用了模式匹配字符时,结果可能与期待的不一样。
例如,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> 提示符处的End of File (Ctrl-D) 按键顺序。要在文件传送未完成之前结束它,请按中断按键顺序。其缺省“中断键”序列是Ctrl-C。stty 指令能用于重新定义该键系列。
ftp 命令在正常情况下会立即暂停正在发送(从本地主机到远端主机)的传输。ftp 命令通过将FTP ABOR 指令发送到远程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 指令无效。
如果Kerberos 5 是当前的认证方法:
ftp 命令会按在IETF 草稿文挡"draft-ietf-cat-ftpsec-09.txt" 定义的那样将此拓展用于 ftp 规范。FTP 安全性扩展将使用“Generic Security Service API (GSSAPI)”安全机制来实现。GSSAPI 提供对于基础的安全性和通信机制来说是独立的服务。GSSAPI 是在 rfc 1508 和1509 中定义的。
ftp 命令将使用AUTH 和ADAT 命令验证 ftpd 守护进程。如果两者都支持Kerberos 认证,则它们会使用本地用户 DCE 凭证验证远程系统上的用户。如果这样失败了,且两个系统中都配置了“标准的”认证,则会使用上述的过程。
HostName 参数是传送文件的目的地主机名称。可选的Port 参数指定了端口的标识符,通过此端口进行传输。(/etc/services 文件指定了缺省端口。)
操作命令
下列 ftp 子命令在 ftp> 提示符下输入。使用双引号(" ") 指定包含空格字符的参数。
![命令[参数]] 在本地主机上调用交互的 shell。可通过 shell 命令提供带有一个或多个可选参数的可选命令。
$>Macro [参数] 执行指定的宏(早先使用 macdef 子命令定义的)。参数不被扩展。
?[ 子命令] 显示描述子命令的帮助消息。如果您不指定Subcommand 参数,ftp 命令将显示已知子命令的清单。
account [Password] 发送远程主机在授权对其资源进行访问之前可能需要的补充密码。如果密码不是命令提供的,将提示用户输入密码。密码不在屏幕上显示。
append LocalFile [RemoteFile] 将本地文件添加到远程主机文件中。如果远程文件名未指定,则将使用本地文件名,该文件名由 ntrans 子命令或 nmap 子命令生成的任何设置进行改变。添加文件的时候, append 子命令将为 form、mode, struct、和 type 子命令使用当前值。
ascii type ascii 子命令的同义词。
bell 每个文件传送过程完成之后响一声铃。
binary type binary 子命令的同义词。
block mode block 子命令的同义词。
bye 结束文件传送会话并退出 ftp 命令。与 quit 子命令相同。
carriage-control form carriage-control 子命令的同义词。
case 为文件名 case 设置一个切换。当 case 子命令开启的时候ftp 命令将全部远程文件名从大写改成小写(将它们写入本地目录时)。其缺省值为关闭(这样 ftp 命令就会在本地目录中按大写格式写入大写的远程文件名)。
cd RemoteDirectory 将远程主机中的工作目录改为指定的目录。
cdup 将远程主机中的工作目录改为当前目录的父目录。
close 结束文件传送会话,但不要退出 ftp 命令。已定义的宏已被擦除。与disconnect 子命令相同。
copylocal 切换本地拷贝。copylocal 缺省值为关闭。ftp 通过向自身执行 ftp 操作确认您未置零文件(如相同的主机名和相同的路径名)。将 copylocal 打开绕过这一检查。
cr 在ASCII 类型文件传送期间接收记录时,从回车和 line-feed 序列中除去回车字符。(ftp 命令在文件传送期间用回车和换行中止每一条 ASCII 类型的记录。)
远程主机(其操作系统与正在运行的操作系统不同)的记录可拥有内嵌于记录中的单一换行。要从记录定界符中区分这些内嵌的换行,请将 cr 子命令设置为关闭。cr 子命令会在开启和关闭中间进行切换。
debug [0 | 1] 在调试记录保持开启和关闭之间进行切换。指定 debug 或 debug 1,以打印发送到远程主机的每一个命令,并保存重新启动的控制文件。重新指定 debug 或 debug 0,停止调试记录保持。Ctrl-C 键也会保存重新启动的控制文件。
指定 debug 子命令将有关 ftp 命令操作的调试信息发送给 syslogd 守护进程。如果指定了 debug 子命令,您必须编辑/etc/syslog.conf 文件并添加下列中的其中一项:
请注意: syslogd 守护进程调试级别包含信息级别消息。
如果不编辑/etc/syslog.conf 文件,则不会产生消息。变更了/etc/syslog.conf 文件之后,请运行 refresh -s syslogd 或 kill -1 SyslogdPID 命令,以通知 syslogd 守护进程其配置文件的变更。关于调试级别的更多信息,请参考/etc/syslog.conf 文件。也请参考 ftp -d 标志。
delete RemoteFile 删除指定的远程文件。
dir [RemoteDirectory][LocalFile] 将所指定的远程目录的内容清单(RemoteDirectory) 写入指定的本地文件(LocalFile)。如果RemoteDirectory 参数未指定,dir 子命令将列出当前远程目录的内容。如果LocalFile 参数未指定或是一个-(连字符),则 dir 子命令将显示本地终端上的清单。
disconnect 结束文件传送会话,但不退出 ftp 命令。已定义的宏已被擦除。与 close 子命令相同。
ebcdic type ebcdic 子命令的同义词。
exp_cmd 在常规的和试验性的协议命令中切换。其缺省值为关闭。
file struct file 子命令的同义词。
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)。
get RemoteFile [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 子命令。
mls RemoteFile
要传送文件的整个目录子树,请勿使用 mget 或 mput 子命令,而按二进制格式传送子树的 tar 压缩文档。
hash 切换散列符号(#) 打印。当 hash 子命令是开启的时候ftp 命令会为每个所传送的数据块(1024 字节)显示一个散列符号。
help [子命令] 显示帮助信息。请参考? 子命令。
image type image 子命令的同义词。
lcd [Directory] 更改本地主机中的工作目录。如果您未指定目录,ftp 命令将使用主目录。
local M type local M 子命令的同义词。
ls [RemoteDirectory] [LocalFile] 请将远程目录缩写的文件清单写入本地文件。如果RemoteDirectory 参数未指定,ftp 命令将列出当前远程目录。如果LocalFile 参数未指定或是一个-(连字符),则 ftp 命令将显示本地终端上的清单。
macdef Macro 定义子命令宏。随后直到空行的行(两个连续的换行)将作为宏的文本保存。能为所有宏定义多达16 个宏,包含4096 个字符。在重新定义或执行 close 子命令前,应将宏保持为已定义的宏。
$(美元符号)和\ (反斜杠) 是 ftp 宏中的特殊字符。跟随一个或多个数字的$ 符号将被调用行中对应的宏参数所替换(请参考$ 子命令)。$ 符号后紧随字母 i 表示将要循环该宏,$i 字符组合将被每一传递中连续的字符替换。
第一个参数用于第一个传递,第二个参数用于第二个传递,依此类推。\ 符号会防止下一个字符的特殊处理。请使用\ 符号关闭$ 和\.(反斜杠句点)符号的特殊意义。
mdelete RemoteFiles 扩展在远程主机上RemoteFiles 参数所指定的文件,并删除远程文件。
mdir [RemoteDirectories LocalFile] 扩展在远程主机上RemoteDirectories 参数所指定的目录,并将这些目录的内容清单写入在LocalFile 参数中定义的文件。如果RemoteDirectories 参数包含模式匹配字符,mdir 子命令将提示输入本地文件(如果没指定)。如果RemoteDirectories 参数是用空格隔开的远程目录清单,则清单中最后一个参数必须是一个本地文件名或-(连字符)。
如果 LocalFile 参数是-(连字符),mdir 子命令将显示本地终端上的清单。如果交互式提示启用(请参考 prompt 子命令),ftp 命令将提示用户验证最后一个参数是本地文件且不是远程目录。
mget RemoteFiles 请扩展在远程主机上RemoteFiles 参数,并将指示的远程文件拷贝到本地主机的当前目录中。请参考 glob 子命令,取得更多有关文件名扩展的信息。远程文件名在本地使用,并由 case、ntrans 和 nmap 子命令所生成的设置进行变更。在传送文件时,ftp 命令将使用 form、mode、struct 和 type 子命令的当前设置。
mkdir [RemoteDirectory] 创建在RemoteDirectory 参数(远程主机中)中指定的目录。
mls [RemoteDirectories LocalFile] 扩展在远程主机上在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-print form non-print 子命令的同义词。
ntrans ] 打开或关闭文件名字符翻译机制。如果未指定任何参数,字符翻译将关闭。如果参数已指定,在没有指定目标文件名的时候,将为 mget 和 mput 子命令以及 get 和 put 子命令翻译源文件名中的字符。
此子命令在本地和远程主机使用不同的文件名约定和惯例时很有用。字符翻译遵从InCharacters 和OutCharacters 参数设置的模式。匹配InCharacters 参数中字符的源文件名中的字符将由OutCharacters 参数中对应的字符替换。
如果InCharacters 参数指定的字符串比OutCharacters 参数指定的字符串长,而且其在OutCharacters 参数中无对应的字符,则InCharacters 参数中的字符将被删除。
open HostName [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)指令。
put LocalFile [RemoteFile] 将本地文件存储到远程主机中。如果您未指定RemoteFile 参数,ftp 命令将使用本地文件名命名远程文件,而远程文件名由 ntrans 和 nmap 子命令所生成的设置加以改变。 ftp 命令会在传送文件时,将使用 type、form、mode 和 struct 子命令的当前设置。
pwd 显示远程主机中的当前目录名。
quit 关闭连接并退出 ftp 命令。与 bye 子命令相同。
quote 字符串逐字地将由 String 参数指定的字符串发送到远程主机。执行remotehelp 或 quote help 子命令,显示String 参数的有效值清单。
注意:涉及数据传输的“Quoting”命令会产生不可预见的结果。
record struct record 子命令的同义词。
recv RemoteFile [LocalFile] 请将远程文件拷贝到本地主机。与 get 子命令相同。
reinitialize 通过刷新所有I/O 并允许完成传输操作来对FTP 会话进行重新初始化。按照用户已开始FTP 会话但未登录到远程主机的情况复位所有缺省值。
remotehelp [Subcommand] 请求从远程FTP 服务器获得帮助。
rename FromName ToName 重新命名远程主机上的文件。
reset 清除回复队列。此子命令将使命令分析重新同步。
restart get | put | append 请在生成上一个检查点的位置重新启动文件传送。要想顺利运行,该子命令应与异常终止子命令相同,包括结构、类型和格式。有效参数为 get、put 和 append。
rmdir RemoteDirectory 除去由远程主机中的RemoteDirectory 参数所指定的远程目录。
runique (ReceiveUnique) 在子命令 get 和 mget 期间,切换为本地目的文件创建唯一文件名称的功能。如果此功能为“关闭”状态(预设值),ftp 命令会覆盖本地文件。否则,如果本地文件名与为本地目的文件指定的名称相同,ftp 将使用.1 修改为本地目的文件指定的名称。如果本地文件已使用了新名称,ftp 将把后缀。2 添加给所指定的名称。如果本地文件已使用了此第二个名称,则 ftp 命令会在找到唯一的文件名或未找到唯一文件名但到达.99 之前继续增加后缀。如果 ftp 命令找不到唯一的文件名,ftp 会报告错误,传输过程也不会发生。请注意 runique 子命令不会影响从 shell 命令产生的本地文件名。
safe 将保护级别设置为“safe”。在此级别,数据的完整性会得到保护。
send LocalFile [RemoteFile] 将本地文件存储到远程主机中。其方式与 put 子命令相同。
sendport 切换对于FTP PORT 指令的使用。根据预设,ftp 命令在为每个数据传输建立连接的时候会使用PORT 指令。当禁用PORT 指令时,ftp 不会在数据传输中使用PORT 命令。PORT 指令在处理某些FTP 服务器时很有用,那些服务器在未正确指示指令已被接受时会忽略PORT 指令。
site Args 使用 chmod 命令显示或设置空闲超时周期、显示或设置文件创建 umask 或更改文件的许可权。Args 参数可能的值是 umask 和 chmod。
size RemoteFile 以字节的方式显示RemoteFile 参数所指定的远程文件的大小。
status 显示 ftp 命令的当前状态以及子命令的状态。
stream mode stream 子命令的同义词。
struct [ file | record ] 设置数据传送结构类型。有效的参数为 file 和 record。
file
将数据传送结构类型设置为 file。
record
将数据传送结构类型设置为 record。
sunique (Send/Store Unique) 在子命令 put 和 mput 期间,切换为远程目的文件创建唯一文件名称的功能。如果此功能为“关闭”状态(预设值),ftp 命令会覆盖远程文件。否则,如果远程文件名与为远程目的文件指定的名称相同,远程FTP 服务器会修改远程目的文件的名称。请注意远程服务器必须支持STOU 指令。
系统显示在远程机器上运行的操作系统类型。
telnet form telnet 子命令的同义词。
tenex type tenex 子命令的同义词。
跟踪切换包跟踪。
type [ ascii | binary | ebcdic | image | local M | tenex ] 设置文件传送类型。有效参数是 ascii、binary、ebcdic、image,、local M 和 tenex。如果参数未指定,则当前类型被显示。缺省类型为 ascii;binary 类型可能会比 ascii 更有效。
ascii
将文件传送类型设置为网络ASCII。此类型为缺省值。文件传送使用二进制映像传送可能会更有效。请参考 binary 参数,以取得更多信息。
binary
文件传送类型设置为二进制映像。此类型可能比 ASCII 传送更有效。
ebcdic
将文件传送类型设置为 EBCDIC。
image
将文件传送类型设置为二进制映像。此类型可能比 ASCII 传送更有效。
local M
将文件传送类型设置为本地。M 参数定义每计算机字位的十进制数。此参数没有缺省值。
tenex
将文件传送类型设置为 TENEX 机器需要的类型。
user User [Password] [Account] 识别远程FTP 服务器的本地用户(User)。如果未指定Password 或Account 参数,而远程服务器需要它,则 ftp 命令会提示输入本地的密码和帐户。如果Account 参数是必须的,则 ftp 命令会在远程登录过程完成后将它发送到远程服务器。
注意:除非通过在命令行上指定 -n 标志来禁用自动登录,否则 ftp 命令将User、Password和 Account 参数自动地发送给远程服务器用于初始连接。您亦需主目录中的。netrc 文件以便发布自动登录。
verbose 切换详细方式。如果详细方式启用(缺省值),ftp 命令将显示远程FTP 服务器的全部响应。另外, ftp 会在传输完成后显示所有文件传送的统计信息。
命令实例
1. 要调用 ftp 命令,请登录 canopus 系统,显示本地帮助信息,显示远程帮助信息,显示状态,切换 bell、prompt、runique、trace 和 verbose 子命令,然后再退出,请输入:
$ ftp canopus
名称(canopus:eric):dee
331 dee 所需要的密码。
密码:
230 用户 dee 登录。
ftp> 帮助
Commands 可能为缩写。命令:
! delete mdelete proxy runique
$ debug mdir sendport send
account dir mget put size
append disconnect mkdir pwd status
ascii form mls quit struct
bell get mode quote sunique
binary glob modtime recv system
bye hash mput remotehelp tenex
case help nmap rstatus trace
cd image nlist rhelp type
cdup lcd ntrans rename user
close ls open reset verbose
cr macdef prompt rmdir ?
clear private protect safe
ftp> remotehelp
214 —识别下列命令(* => 未实施)。
USER PORT RETR MSND* ALLO DELE SITE* XMKD CDUP
PASS PASV STOR MSOM* REST* CWD STAT* RMD XCUP
ACCT* TYPE APPE MSAM* RNFR XCWD HELP XRMD STOU
REIN* STRU MLFL* MRSQ* RNTO LIST NOOP PWD
QUIT MODE MAIL* MRCP* ABOR NLST MKD XPWD
AUTH ADAT PROT PBSZ MIC ENC CCC
无代理连接。
方式:流;类型:ascii;表单:非打印的;结构:文件
详细:开; Bell:关; 提示:开;文件名匹配替换: 开
存储唯一:关; 接收唯一:关
Case:关; CR stripping:开
Ntrans: 关
Nmap:关
散列标记打印:关;PORT cmds 的使用:开
ftp> bell
Bell 方式开启
ftp> 提示符
交互方式关闭。
ftp> runique
接收唯一开启。
ftp> trace
包跟踪开启。
ftp> verbose
详细方式关闭。
ftp> quit
$
2. 要调用 ftp 命令,请登录 canopus 系统,打印工作目录,更改工作目录,将文件传送类型设定为ASCII 向远程主机发送本地文件,将工作目录改为父目录,然后退出,请输入:
$ ftp canopus
名称(canopus:eric):dee
331 dee 所需要的密码。
密码:
230 用户 dee 登入。
ftp> pwd
257 "/home/dee" 为当前目录。
ftp> cd 桌面
250 CWD 命令顺利完成。
ftp> 类型 ascii
200 类型设置为A。
ftp> 发送 typescript
200 PORT 命令顺利完成。
150 为 typescript (128.114.4.99,1412) 打开数据连接。
226 传输完成。
ftp> cdup
250 CWD 命令顺利完成。
ftp> bye
221 再见。$
3. 要调用具有自动登录功能的 ftp 命令(使用。netrc 文件),请打开与 canopus 系统的会话,登入,将工作目录改为父目录,显示工作目录,列出当前目录的内容,删除文件,将当前目录的内容清单写入本地文件,关闭会话,然后退出,请输入:
$ ftp canopus
331 dee 所需要的密码。
230 用户 dee 登入。
ftp> cdup
250 CWD 命令顺利完成。
ftp> pwd
257 "/home" 是当前目录。
ftp> dir
200 PORT 命令顺利完成。
150 为/usr/bin/ls (128.114.4.99,1407) 打开数据连接。
(0 字节)。
一共104
drwxr-xr-x 2 system 32 Feb 23 17:55 bin
Drwxr-xr-x 26 rios 4000 May 30 17:18 bin1
drwxr-xr-x 2 system 32 Feb 23 17:55 books
drwxrwxrwx 18 rios 1152 Jun 5 13:41 dee
-r--r--r-- 1 system 9452 May 17 12:21 filesystems
drwxr-xr-x 2 system 32 Feb 23 17:55 jim
drwxr-xr-x 5 system 80 Feb 23 17:55 krs
drwxrwxrwx 2 rios 16432 Feb 23 17:36 lost+found
-rwxr-xr-x 1 rios 3651 May 24 16:45 oldmail
drwxr-xr-x 2 system 256 Feb 23 17:55 pubserv
drwxrwxrwx 2 system 144 Feb 23 17:55 rein989
drwxr-xr-x 2 system 112 Feb 23 17:55 reinstall
226 传输完成。
ftp> 删除旧邮件。
250 DELE 命令顺利完成。
ftp> mdir /home/dee/bin binlist
output to local-file: binlist? y
200 PORT 命令顺利完成。
150 为/usr/bin/ls (128.114.4.99,1408)(0 字节)打开数据连接。
226 传输完成。
ftp> close
221 再见。
ftp> quit
$
文件
/usr/samples/tcpip/netrc 包含。netrc 样本文件。
/etc/syslog.conf 包含 syslogd 守护进程的配置信息
传输协议
FTP是一个8位的客户端-服务器协议,能操作任何类型的文件而不需要进一步处理,就像MIME或Unicode一样。但是,FTP有着极高的延时,这意味着,从开始请求到第一次接收需求数据之间的时间,会非常长;并且不时的必须执行一些冗长的登陆进程。
来源于:百度百科
#----------All efforts I have paid today...