FTP(1) | General Commands Manual | FTP(1) |
ftp
— Internet
文件传输程序 (file transfer
program)
ftp
[-pinegvd
]
[host] pftp
[-inegvd
] [host]
用户通过 Ftp
这个程序来使用 Internet
上的标准文件传输协议
(File Transfer Protocol).
本程序允许用户向远端网站发送文件,
或从远端网站接收文件.
参数选项可以在命令行启动ftp时指定, 也可以在ftp命令解释模式下输入.
-p
-i
-n
(译者注: 使用本选项, 可以实现所谓的 "非交互式登录". 你可以试试下面这条命令:
echo open ftp_server "\n" user my_name my_password "\n" dir "\n" bye | ftp -n 不能使用 rcp 的时候, 可以用这条 ftp 命令来代替.)
-e
-g
-v
-d
从命令行启动
ftp
时,
可指定欲与之通讯的远端主机.
如果指定了, ftp
会立即尝试与远端 FTP
服务器建立连接; 否则,
ftp
会进入其命令解释模式,
等待用户进一步的指令.
ftp
在等待用户指令时,
会显示提示符
‘ftp>
’
ftp
能够识别以下的命令:
!
[command [args]]$
macro-name [args]macdef
命令来定义.
本命令中的参数不进行文件名匹配,
直接传给这个宏.account
[passwd]append
local-file [remote-file]ntrans
或 nmap
转换后,
作为远端文件名使用.
在文件传输过程中还会使用
type,
forma,
mode
和 structure
的当前设置.ascii
bell
binary
bye
ftp.
文件结束符
(译者注: ctrl-D)
有同样的功能.case
mget
命令会中用到本状态.
case
状态若为 on,
远端主机文件传输到本地时,
文件名中的大写字母会被转换为小写.
缺省的 case 状态为 off.
(译者注: toggle
这个词我翻译成转换.
意思是说, 如果当前 case
状态为 on, 你执行 case
这个命令, case
状态就转成了 off;
如果当前为 off,
则会变成 on. 下同.)cd
remote-directorycdup
chmod
mode file-nameclose
cr
cr
状态为 on,
回车换行符会被转换为
UNIX
系统的单个换行符. 非
UNIX
系统的文本文件中可能含有单个换行符;
在进行 ascii
方式的文件传输时,
只有将 cr
状态设置为 off,
这些单个换行符才能与回车换行符区分开来.
cr
的缺省状态为 on.
(译者注: 回车符的 ASCII
码为 0D, 对应的 C
语言转义字符为 \r;
换行符的 ASCII 码为 0A ,
对应的 C
语言转义字符为 \n; UNIX
下的文本文件,
换行的时候就一个换行符;
DOS 下的文本文件,
换行的时候是两个字符:
回车 + 换行. 服务器端 ftpd
在用 ascii
方式发送文件时,
会先把单个换行转换为回车
+ 换行,
再送到网络上传输;
客户端 ftp 在用 ascii
方式接受文件时, 如果
cr 状态为 on, ftp 会把回车 +
换行转换为单个换行;
如果为 off,
则不进行这种转换.
如果网上传输的数据中同时含有单个换行和回车
+ 换行, 你就一定要把 cr
状态设为 off,
才能把数据原样取回来;
否则,
取回来的单个换行和回车
+
换行都转换成了单个换行,
你就分不清这两种了.
还是使用 binary 最好.)delete
remote-filedebug
[debug-value]ftp
会显示每条送往远端机器的指令,
并在显示的指令前加上
‘-->
’dir
[remote-directory]
[local-file]ftp
会提示用户确认最后这个参数是用来存放
dir
显示结果的本地文件.
如果不指定
remote-director,
则本命令显示远端机器当前目录下的文件名.
如果不指定 local-file,
或 local-file 指定为
-
,
则输出结果显示在你的终端上.disconnect
form
formatget
remote-file [local-file]case,
ntrans
和
nmap
转换后,
作为本地文件名使用.
文件传输过程中会用到当前的
type,
form,
mode,
和 structure
状态.glob
mdelete,
mget
和
mput
命令时,
是否进行文件名匹配.
如果 glob 状态为 off,
则不进行文件名匹配.
对 mput
而言,
文件名匹配规则和本地的
csh(1)
文件名匹配一样. 对
mdelete
和 mget
而言,
每个远端机器文件名都分别在远端机器上进行匹配,
匹配结果中的同名文件不会合并.
目录名匹配规则和文件名匹配规则不尽相同,
具体结果要取决于远端系统和
ftp 服务程序.
你可以使用 ‘mls
remote-files -
’
预先看看匹配结果是否如你所愿.
注意: mget
和
mput
可能不会传送子目录.
想连着子目录一起传送,
你可以使用 binary
方式传送这个子目录的
tar(1) 包. (译者注: 1、
文件匹配是说, *n
代表所有以 n
结尾的文件. 例如,
在你本地 linux
机器当前目录下有三个文件
Xie Wen Min , 在 shell 下用 echo *n
这条命令, 结果为 Wen Min ,
可见 *n 被 shell 匹配为 Wen Min.
在 ftp 中, 如果 glob 为 on , mput *n
这条指令会被匹配为
mput Wen Min , 本地的 Wen Min
两个文件被传送到远端.
如果 glob 为 off , mput *n
这条指令不会被匹配,
于是 mput
会试图把文件名为
"*n"
的本地文件传到远端,
如果本地没有这个名为
"*n" 的文件, ftp
就会报错. 2、 mput
是把本地文件送到远端机器,
故其匹配规则与本地
shell的文件名匹配一致.
mget, mdelete
则是把远端机器上的文件送到本地,
故其匹配规则和最终结果要取决于远端系统.
3、 考虑如下情况:
远端机器上有三个文件
Xie, Wen, Min 如果执行 mget X* W* *n,
显然, 匹配结果会是 Xie Wen
Min Wen. 虽然 Wen
这个文件出现了两次,
但 ftp
不会把这两个文件名合为一个,
所以 Wen 这个文件会被 mget
两次,
第二次覆盖第一次.
如果 mdel X* W* *n, Wen
这个文件会被删两次,
第二次报错.)hash
help
[command]ftp
命令.idle
[seconds]lcd
[directory]ls
[remote-directory]
[local-file]ftp
会提示用户确认最后一个参数是用来存放
ls
显示结果的本地文件.
如果不指定 local-file
, 或者 local-file
指定为 ‘-
’,
则结果显示到用户终端上.
可以在本命令中用引号指定附加参数.
例如, 如果远端系统为
UNIX, 则 ls "-rt /usr"
这条命令会显示远端机器
/usr 这个目录下的文件,
显示结果按创建时间由远到近排序.macdef
macro-nameclose
命令后所有的宏定义会被清除.
在宏中, $ 和 \
这两个字符为特殊字符.
$ 字符后跟数字,
将在这个宏在执行时将替换为命令行中的参数.
$ 字符后跟字符 i ,
表示循环执行当前宏.
在循环的第一次, $i
被替换为命令行中的第一个参数;
第二次,
替换为第二个参数,
以此类推. \
后面跟一个字符,
表示这个字符本身.
例如, \ 可以去掉 $
的特殊意义, 表示 $
这个字符本身.mdelete
[remote-files]mdir
remote-files local-filedir
命令相似,
但是允许你指定多个远端文件.
如果 prompt 状态为 on,
ftp
会提示用户确认最后一个参数是用来存放输出结果的本地文件.mget
remote-filesget
命令.
关于文件名匹配,
请参阅 glob
命令.
根据当前的 case,
ntrans,
和 nmap
状态,
远端文件名在经过适当的转换后,
作为本地文件名使用.
文件被传输到本地机器的当前目录.
你可以用 ‘lcd
directory
’
命令改变本地机器的当前目录,
也可以用 ‘! mkdir
directory
’
命令新建本地目录.mkdir
directory-namemls
remote-files local-filenlist
命令相似,
但是允许你指定多个远端文件,
而且 local-file
这个参数必须指定.
如果 prompt 状态为 on,
ftp
会提示用户确认最后一个参数是用来存放输出结果的本地文件.mode
[mode-name]modtime
file-namemput
local-filesput
命令.
关于文件名匹配,
请参阅 glob
命令.
根据当前的 ntrans
和 nmap
状态,
本地文件名在经过适当的转换后,
作为远端文件名使用.newer
file-name [local-file]nlist
[remote-directory]
[local-file]ftp
会提示用户确认最后一个参数是用来存放显示结果的本地文件.
如果不指定本地文件
local-file,
或者本地文件
local-file 指定为
‘Fl,’
显示结果会在用户终端上显示出来.nmap
[inpattern outpattern]mput
或
put
命令,
且不指定远端文件名时,
远端文件名会被映射;
在执行 mget
或
get
命令,
且不指定本地文件名时,
本地文件名会被映射.
非 unix
的远端系统常使用不同于
unix 的文件命名规则,
当用 ftp
连接到这样的远端系统时,
本命令会很有用处.
转换规则由参数
inpattern 和 outpattern
决定.
一个文件名会先经过
ntrans
和 case
的转换, 再按照
inpattern 进行
nmap
映射. 参数
inpattern
指定转换前的文件命名规则.
参数 outpattern
指定转换后的文件命名规则.
在 inpattern 和
outpattern
这两个参数中, 用 $1, $2, ..., $9
来替代变量; 用 \$ 替代 $
字符;
其余的字符则没有特殊含义.
例如, 若 inpattern 为 $1.$2,
则对于文件名 mydata.data, $1
取值 mydata, $2取值 data.
结果文件名由
outpattern 决定. 在
outpattern 中, $1, $2, ..., $9
被相应的取值代替,
作为最终结果. $0
被替换为整个原始文件名.
对方括号括起来的两个变量
[$x,$y] 而言, 若 $x 非空,
则其相当于 $x;
否则相当于 $y (以上 x,y
为数字). 举例如下:
输入命令行 nmap $1.$2.$3 [$1,$2].[$2,file],
则 原始文件名 myfile.data
会被映射为 myfile.data,
原始文件名 myfile.data.old
会被映射为 myfile.data,
原始文件名 myfile
会被映射为 myfile.file,
原始文件名 .myfile
会被映射为 myfile.myfile, Spaces may be
included in outpattern, as in the example: `nmap $1
sed "s/ *$//" > $1' . ?? (译者注:
这一段我没看懂,
也没试出来.) `$', '[', ']', `,'
这四个字符有特殊含义,
所以若要使用这四个字符,
需在前面加上 \
以去掉其特殊含义.ntrans
[inchars [outchars]]mput
和
put
命令,
且不指定远端文件名时,
远端文件名中的字符会被转换;
在执行 mget
和
get
命令,
且不指定本地文件名时,
本地文件名中的字符会被转换.
非 unix
的远端系统常使用不同于
unix 的文件命名规则, 用
ftp
连接到这样的远端系统时,
本命令会很有用处.
原始文件名中的
inchars
会被替换为对应的
outchars. 如果 inchar
字符串比 outchar 长,
则多出的那一部分字符会从原始文件名中删掉.open
host [port]ftp
是可选的;
如果指定了端口号,
ftp
会尝试使用这个指定的端口号连接远端
FTP 主机.
如果自动登陆选项
auto-login
是打开的话
(缺省为打开), ftp
还会尝试自动登陆.
(详见下述)prompt
mget
和
mput
这两个命令会不加提示地传送所有指定的文件,
mdelete
会不加提示地删掉所有指定的文件.proxy
ftp-commandopen
命令,
用来建立副连接. 运行
"proxy ?" 命令,
可以看到所有能在副连接中运行的
ftp 命令. 以下的 ftp
命令在副连接中运行时,
效果与在主连接中不同:
在自动登录过程中,
open
不会定义新的宏;
close
不会清除已有的宏定义;
get
和 mget
将文件从主连接的远端主机传送到副连接的远端主机;
put
, mput
, 和
append
将文件从副连接的远端主机传至主连接的远端主机.
第三方文件传输取决于副连接的远端主机是否支持
ftp 协议中的 PASV
命令.put
local-file [remote-file]ntrans
和 nmap
状态,
本地文件名在经过适当的转换后,
作为远端文件名使用.
在文件传输过程中会用到当前的
type,
format,
mode
和 structure
状态.pwd
quit
bye
命令.quote
arg1 arg2 ...recv
remote-file [local-file]reget
remote-file [local-file]remotehelp
[command-name]remotestatus
[file-name]rename
[from] [to]reset
restart
markerget
或 put
命令; 此时的 get 或 put
命令会从参数
marker 指定的
UNIX
系统文件偏移处
(一般以字节计算)
重传文件.rmdir
directory-namerunique
get
或
mget
命令取远端文件到本地时,
远端文件会自动覆盖本地的同名文件;
如果 runique 状态为 on,
则在文件同名时,
会在取回的文件名后加一个
.1; 如果加了一个 .1
还是与本地文件重名,
则在远端文件名后加
.2; 若还是重名, 加 .3;
以此类推, 如果直到 .99
还重名, 则会报错.
新文件名会显示给用户.
注意 runique
状态并不影响本地 shell
命令的文件覆盖.
缺省的 runique
状态为 off.send
local-file [remote-file]sendport
PORT
命令. 缺省状态下,
ftp
每建立一个连接进行数据传送时,
都会使用一个
PORT
命令. 使用
PORT
命令可以免掉多文件传输时的延迟时间.
如果 PORT
命令失败, ftp
会使用缺省的数据端口.
如果禁止使用
PORT
命令,
则在每次进行数据传送时不会使用
PORT
命令.
有些版本的 FTP
在具体实现中忽略了
PORT
命令,
但却错误地应答说已经接受了
PORT
指令,
此时就需要使用本命令.site
arg1 arg2 ...SITE
命令原样传给远端 FTP
服务器.size
file-namestatus
ftp
当前的各种状态.struct
[struct-name]sunique
STOU
命令.
新生成的不同的远端文件名会显示给用户.
缺省的 sunique 状态为 off,
即自动覆盖远端同名文件.system
tenex
trace
type
[type-name]type
设置为
type-name.
如果不指定参数,
则本命令显示当前文件传送类型.
缺省的文件传送类型是网络
ASCII 类型.umask
[newmask]user
user-name [password]
[account]ftp
会提示用户输入密码
(无回显);
如果不指定参数
account, 而远端 FTP
服务器需要提供账号,
ftp
会提示用户输入账号.
如果指定了参数
account,
而在登录过程中远端
FTP
服务程序不需要账号,
则在登录完成以后会使用一个
account
命令将账号发送给服务器.
一般而言, ftp
在启动时, 会与远端 FTP
服务器建立连接并自动完成以上的登录过程.
也可以在启动
ftp
时使用 -n
选项禁止此自动登录功能.verbose
如果参数含有空格, 需用使用一对引号 "" 将其引起来.
按中断键 (一般为 Ctrl-C
) 可放弃当前文件传送.
对发送文件而言,
此时当前发送过程会立刻终止;
对文件接收,
此时会发送一个 ftp
协议中的 ABOR
命令到远端服务器,
而剩下未接受的数据会被丢弃.
这个过程有快有慢,
具体取决于远端服务器如何实现
ABOR
命令.
如果远端服务器不支持
ABOR
命令,
则服务器会继续当前文件传送,
直到传送完成,
才再显示出提示符
‘ftp>.
’
如果所有的本地操作已经完成,
ftp
在等待远端服务器应答时,
不会对中断键做出响应.
如果这时候 ftp
协议出了问题,
或如上所述远端服务器不支持
ABOR
命令而坚持把当前文件发送完,
用户就会等待很长时间得不到响应.
如果确实是 ftp
协议出了问题,
用户必需手工杀掉这个
ftp
进程.
ftp
命令中,
若指定文件名作为参数,
则此文件名会经过以下几步的处理:
-
’,
则在输出时使用标准输出
stdin,
在输入时使用标准输入
stdout.Ftp
会使用 popen(3)
和所提供的参数创建一个
shell 进程,
并使用标准输入 stdin
(标准输出 stdout) 来进行读
(写) 操作. 如果 shell
命令中包含空格,
则必须用引号将其引起来;
例如: "ls -lt".
一个有用的例子是:
"dir | more".glob
命令).
如果 ftp
命令只需要单个的本地文件作参数
(如 put),
则仅使用匹配结果里的第一个文件名.mget
和 get
命令而言,
如果不指定本地文件名,
则远端文件名在经过
case,
ntrans,
或
nmap
转换后,
作为本地文件名使用.
如果 runique
状态为
on,
本地文件名还可能加上一个后缀以免覆盖.mput
和 put
命令而言,
如果不指定远端文件名,
则本地文件名在经过
ntrans
或 nmap
转换后,
作为远端文件名使用.
如果 sunique
状态为
on,
远端服务器可能还会给远端文件名加上一个后缀以免覆盖.FTP
规格说明书中指定了许多可能影响文件传送的参数.
type
可设置为 ascii, image
(binary), ebcdic, 或 local byte size (一般用于
PDP-10's 和 PDP-20's 机器). Ftp
支持 ascii 和 image
类型的文件传输, 对于
tenex
机器, 还支持
local byte size 8
方式的文件传输.
其它可能影响文件传输的参数有
mode,
form,
和
struct.
Ftp
只支持这些参数的缺省值.
Ftp
使用了以下的环境变量:
ftpd(8,) RFC 959
ftp
命令最初见于
4.2.BSD
对许多 ftp 命令而言, 其能否正确执行, 取决于远端服务器如何响应.
使用 4.2BSD 的 ascii 方式传送文件时, 对回车换行符的处理有错误. 本版本中已经修正了此问题, 但同时带来了另一个问题: 使用 ascii 方式, 与 4.2BSD 服务器互传二进制文件时可能出错. 要避免此问题, 请使用 binary image 类型来传送文件.
本页面中文版由中文
man 手册页计划提供。
中文 man
手册页计划:https://github.com/man-pages-zh/manpages-zh
August 15, 1999 | Linux NetKit (0.16) |