FTP(1) | General Commands Manual | FTP(1) |
NAME¶
ftp
— Internet
文件传输程序 (file transfer
program)
概述 (SYNOPSIS)¶
ftp
[-pinegvd
]
[host] pftp
[-inegvd
] [host]
说明 (DESCRIPTION)¶
用户通过 Ftp
这个程序来使用 Internet
上的标准文件传输协议
(File Transfer Protocol).
本程序允许用户向远端网站发送文件,
或从远端网站接收文件.
参数选项可以在命令行启动ftp时指定, 也可以在ftp命令解释模式下输入.
-p
- 使用被动模式进行数据传输. 如果你本地网络有防火墙, 外部主机不能连接到你这个客户端, 这个选项就派上用场了. 本选项要求 ftp 服务器支持 PASV 命令. 如果使用 pftp 从命令行启动 ftp, 本选项是默认打开的.
-i
- 进行多个文件传输时关掉交互式的确认提示.
-n
- 一般,在启动 ftp 时, ftp
会试着进行自动登录.
本选项可以关掉这个功能.
如果 auto-login
功能被启用的话, ftp
会在用户 home 目录下的
.netrc (参阅 netrc(5))
文件中查找远端主机上的用户帐号.
如果 .netrc
文件中用户帐号这一项不存在,
ftp
会提示用户输入远端主机上的登录名
(缺省为用户在本地机器上的帐号),
如果需要,
还会提示你输入密码和用来登录的帐号.
??
(译者注: 使用本选项, 可以实现所谓的 "非交互式登录". 你可以试试下面这条命令:
echo open ftp_server "\n" user my_name my_password "\n" dir "\n" bye | ftp -n 不能使用 rcp 的时候, 可以用这条 ftp 命令来代替.)
-e
- 如果被编译成了 ftp 可执行格式, 本选项会关掉命令编辑和历史命令功能; 否则什么也不做. ??
-g
- 关掉文件名匹配功能.
-v
- 显示详细信息. 本选项使得 ftp 显示远端服务器的所有响应, 并在数据传输完成后显示传输数据的统计信息.
-d
- 打开 debug 模式.
从命令行启动
ftp
时,
可指定欲与之通讯的远端主机.
如果指定了, ftp
会立即尝试与远端 FTP
服务器建立连接; 否则,
ftp
会进入其命令解释模式,
等待用户进一步的指令.
ftp
在等待用户指令时,
会显示提示符
‘ftp>
’
ftp
能够识别以下的命令:
!
[command [args]]- 在本地机器上启动一个交互的shell. 如果本命令带有参数, 第一个参数作为 shell 命令直接执行, 其它的参数成为这个 shell 命令的参数.
$
macro-name [args]- 执行宏 macro-name
所指代的命令. 宏使用
macdef
命令来定义. 本命令中的参数不进行文件名匹配, 直接传给这个宏. account
[passwd]- 在你成功登录以后, 本命令可以提供一个附加的密码, 远端系统会用这个密码来访问某些资源. 如果不指定参数, 则会提示用户输入密码; 输入密码时, 回显会被禁止.
append
local-file [remote-file]- 添加本地文件到远端机器上.
如果没有指定
remote-file,
则本地文件名在经过
ntrans
或nmap
转换后, 作为远端文件名使用. 在文件传输过程中还会使用type,
forma,
mode
和structure
的当前设置. ascii
- 将当前文件传输方式设置为网络 ASCII 方式, 即文本模式. 这也是缺省的文件传送方式.
bell
- 每个文件传送命令完成后响铃提示.
binary
- 将当前文件传输方式设置为 binary image, 即二进制模式.
bye
- 终止与当前 FTP
服务器的连接, 退出
ftp.
文件结束符 (译者注: ctrl-D) 有同样的功能. case
- 转换 case 状态,
即远端主机文件名大小写转换规则.
mget
命令会中用到本状态.case
状态若为 on, 远端主机文件传输到本地时, 文件名中的大写字母会被转换为小写. 缺省的 case 状态为 off. (译者注: toggle 这个词我翻译成转换. 意思是说, 如果当前 case 状态为 on, 你执行 case 这个命令, case 状态就转成了 off; 如果当前为 off, 则会变成 on. 下同.) cd
remote-directory- 改变远端机器上的当前目录到 remote-directory.
cdup
- 改变远端机器上的当前目录到其父目录, 即其上级目录.
chmod
mode file-name- 将远端系统上文件 file-name 的权限改为 mode.
close
- 终止与当前远端服务器的 FTP 连接, 回到命令解释模式. 所有定义的宏都会被清除.
cr
- 转换 cr 状态, 即 ascii
方式下取文件时的回车换行转换规则.
用 ascii 方式获取文件时,
文件内容被分割为一条条纪录,
以回车换行符为分隔符;
如果
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-file- 删除远端机器上的文件 remote-file.
debug
[debug-value]- 转换 debugging 状态,
即是否跟踪每条指令.
debug-value 是可选的,
其值用来设置跟踪的级别.
当 debigging 状态为 on 时,
ftp
会显示每条送往远端机器的指令, 并在显示的指令前加上 ‘-->
’ dir
[remote-directory] [local-file]- 显示远端机器目录
remote-director
下的文件名. local-file
这个参数是可选的.
如果指定了这个参数,
本命令的显示结果会保存在
local-file
这个本地文件中. 如果
prompt 状态为 on,
ftp
会提示用户确认最后这个参数是用来存放dir
显示结果的本地文件. 如果不指定 remote-director, 则本命令显示远端机器当前目录下的文件名. 如果不指定 local-file, 或 local-file 指定为-
, 则输出结果显示在你的终端上. disconnect
- 同 close.
form
format- 将文件传输格式设置为 format. 缺省格式为 “file”. ??
get
remote-file [local-file]- 把远端机器上的文件
remote-file
取回到本地.
如果不指定本地文件名,
则远端文件名在经过
case,
ntrans
和nmap
转换后, 作为本地文件名使用. 文件传输过程中会用到当前的type,
form,
mode,
和structure
状态. glob
- 转换 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
- 转换 hash 状态, 即是否显示数据传输进度. 如果 hash 状态为 on, 每传送完一个 1024 字节的数据块时显示一个 # 号.
help
[command]- 显示指定命令
command 的简要说明.
如果不指定参数,
本命令列出所有已知的
ftp
命令. idle
[seconds]- 将远端服务器的最长空闲时间设为 seconds 秒. 如果不指定参数 seconds, 则本命令显示当前的最长空闲时间值. (译者注:如果在最长空闲时间内没执行任何 ftp 命令, 与远端机器的连接将自动终止. )
lcd
[directory]- 改变本地的当前工作目录. 如果不指定参数 directory, 则切换到用户的 home 目录.
ls
[remote-directory] [local-file]- 显示远端机器目录下的文件名列表.
具体如何显示与远端系统有关;
例如, 大多数 UNIX
系统显示 shell 命令 ls -l
的输出 (参阅 nlist ).
如果不指定
remote-directory
则显示远端机器当前目录的内容.
如果 prompt 状态为 on ,
ftp
会提示用户确认最后一个参数是用来存放ls
显示结果的本地文件. 如果不指定 local-file , 或者 local-file 指定为 ‘-
’, 则结果显示到用户终端上. 可以在本命令中用引号指定附加参数. 例如, 如果远端系统为 UNIX, 则 ls "-rt /usr" 这条命令会显示远端机器 /usr 这个目录下的文件, 显示结果按创建时间由远到近排序. macdef
macro-name- 定义一个宏.
执行本命令后,
接下来输入的内容会存放到宏
macro-name 里. 空行
(文件中的连续换行,
或终端的回车换行)
表示宏定义结束.
最多只能定义 16 条宏,
而且所有的宏内容加起来不能超过
4096 字节. 执行
close
命令后所有的宏定义会被清除. 在宏中, $ 和 \ 这两个字符为特殊字符. $ 字符后跟数字, 将在这个宏在执行时将替换为命令行中的参数. $ 字符后跟字符 i , 表示循环执行当前宏. 在循环的第一次, $i 被替换为命令行中的第一个参数; 第二次, 替换为第二个参数, 以此类推. \ 后面跟一个字符, 表示这个字符本身. 例如, \ 可以去掉 $ 的特殊意义, 表示 $ 这个字符本身. mdelete
[remote-files]- 删除远端机器文件 remote-files.
mdir
remote-files local-file- 和
dir
命令相似, 但是允许你指定多个远端文件. 如果 prompt 状态为 on,ftp
会提示用户确认最后一个参数是用来存放输出结果的本地文件. mget
remote-files- 匹配参数 remote-files
中指定的远端文件名,
对匹配结果里的每个文件都执行一个
get
命令. 关于文件名匹配, 请参阅glob
命令. 根据当前的case,
ntrans,
和nmap
状态, 远端文件名在经过适当的转换后, 作为本地文件名使用. 文件被传输到本地机器的当前目录. 你可以用 ‘lcd directory
’ 命令改变本地机器的当前目录, 也可以用 ‘! mkdir directory
’ 命令新建本地目录. mkdir
directory-name- 在远端机器上创建目录.
mls
remote-files local-file- 和
nlist
命令相似, 但是允许你指定多个远端文件, 而且 local-file 这个参数必须指定. 如果 prompt 状态为 on,ftp
会提示用户确认最后一个参数是用来存放输出结果的本地文件. mode
[mode-name]- 将文件传输模式设置为 mode-name 所指定的模式. 缺省模式为 “stream” 模式. ??
modtime
file-name- 显示远端机器上文件的最后修改时间.
mput
local-files- 匹配参数中指定的本地文件名,
对匹配结果里的每个文件都执行一个
put
命令. 关于文件名匹配, 请参阅glob
命令. 根据当前的ntrans
和nmap
状态, 本地文件名在经过适当的转换后, 作为远端文件名使用. newer
file-name [local-file]- 比较远端文件和本地文件的修改时间, 如果远端文件比本地文件新, 或本地文件不存在, 则从远端机器上取此文件.
nlist
[remote-directory] [local-file]- 显示远端机器上指定目录下的文件列表.
如果不指定参数
remote-directory,
则显示远端机器当前目录的内容.
如果 prompt 状态为 on,
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]- 连接到指定的远端主机
host FTP 服务器.
端口号
ftp
是可选的; 如果指定了端口号,ftp
会尝试使用这个指定的端口号连接远端 FTP 主机. 如果自动登陆选项auto-login
是打开的话 (缺省为打开),ftp
还会尝试自动登陆. (详见下述) prompt
- 转换 prompt 状态,
即是否进行交互提示.
如果 prompt 状态为 on ,
在传送多个文件时, ftp
会提示用户选择要上传或下载的文件;
如果 prompt 状态为 off
(缺省为 on),
mget
和mput
这两个命令会不加提示地传送所有指定的文件,mdelete
会不加提示地删掉所有指定的文件. proxy
ftp-command- 在副连接上执行 ftp
命令.
本命令允许同时连接到两个远端
ftp 服务器,
并在这两个远端服务器之间传送文件.
(译者注: 原始的 ftp
所建立的连接为 primary control
connection, 主连接; 使用 proxy open
所建立的连接为 secondary control
connection, 副连接.
在副连接上运行 ftp
命令, 即在 ftp
命令前加上 proxy 前缀, 如
proxy open, proxy put 等. 以下将这种
``proxy ftp command'' 译为
"代理命令".)
第一个执行的代理命令应该是
open
命令, 用来建立副连接. 运行 "proxy ?" 命令, 可以看到所有能在副连接中运行的 ftp 命令. 以下的 ftp 命令在副连接中运行时, 效果与在主连接中不同: 在自动登录过程中,open
不会定义新的宏;close
不会清除已有的宏定义;get
和mget
将文件从主连接的远端主机传送到副连接的远端主机;put
,mput
, 和append
将文件从副连接的远端主机传至主连接的远端主机. 第三方文件传输取决于副连接的远端主机是否支持 ftp 协议中的PASV
命令. put
local-file [remote-file]- 将本地文件传至远端主机.
如果不指定参数
remote-file,
则根据当前的
ntrans
和nmap
状态, 本地文件名在经过适当的转换后, 作为远端文件名使用. 在文件传输过程中会用到当前的type,
format,
mode
和structure
状态. pwd
- 显示远端机器的当前路径.
quit
- 同
bye
命令. quote
arg1 arg2 ...- 将你指定的参数原样送到远端 FTP 服务器. (译者注: 你输入的 ftp 命令, 经由本地 ftp 客户程序解释, 转换成 ftp 协议命令, 再发送给远端 ftp 服务程序. 这些转换后的 ftp 协议命令, 叫做 raw ftp command, 也就是本命令所能使用的参数. 关于这些参数, 请参阅 remotehelp 命令. 下文中出现的大写字母的命令都是 raw ftp command.)
recv
remote-file [local-file]- 同 get 命令.
reget
remote-file [local-file]- 和 get 命令相似, 略有差异如下: 如果本地文件 local-file 的长度比远端文件 remote-file 短, ftp 会认为这是由于上一次传送异常中断, 导致本地文件只是远端文件的开头一部分, 故 reget 会从本地文件的最后开始续传. 在连接不稳、经常异常断掉的网络中传送大文件时, 本命令会很有用.
remotehelp
[command-name]- 显示远端 FTP 服务程序的帮助信息. 如果指定了参数 command-name, 则此参数也会一并传给远端服务器.
remotestatus
[file-name]- 如果不指定参数, 本命令显示远端机器的状态. 如果指定了参数 file-name, 则显示远端文件 file-name 的状态.
rename
[from] [to]- 将远端机器上的文件 from 重命名为 to.
reset
- 清除应答队列. 本命令使本地 ftp 客户和远端 ftp 服务程序 重新同步命令/应答序列. 远端 ftp 服务程序可能出错, 并导致 ftp 协议出现错误, 此时需要使用本命令.
restart
marker- 使用本命令后,
接下来应使用一个
get
或put
命令; 此时的 get 或 put 命令会从参数 marker 指定的 UNIX 系统文件偏移处 (一般以字节计算) 重传文件. rmdir
directory-name- 删除远端机器上的目录.
runique
- 转换 runique 状态,
即本地同名文件是否自动覆盖.
如果 runique 状态为 off,
则在使用
get
或mget
命令取远端文件到本地时, 远端文件会自动覆盖本地的同名文件; 如果 runique 状态为 on, 则在文件同名时, 会在取回的文件名后加一个 .1; 如果加了一个 .1 还是与本地文件重名, 则在远端文件名后加 .2; 若还是重名, 加 .3; 以此类推, 如果直到 .99 还重名, 则会报错. 新文件名会显示给用户. 注意runique
状态并不影响本地 shell 命令的文件覆盖. 缺省的runique
状态为 off. send
local-file [remote-file]- 同 put 命令.
sendport
- 转换 sendport 状态,
即是否使用
PORT
命令. 缺省状态下,ftp
每建立一个连接进行数据传送时, 都会使用一个PORT
命令. 使用PORT
命令可以免掉多文件传输时的延迟时间. 如果PORT
命令失败,ftp
会使用缺省的数据端口. 如果禁止使用PORT
命令, 则在每次进行数据传送时不会使用PORT
命令. 有些版本的 FTP 在具体实现中忽略了PORT
命令, 但却错误地应答说已经接受了PORT
指令, 此时就需要使用本命令. site
arg1 arg2 ...- 本命令将参数作为
SITE
命令原样传给远端 FTP 服务器. size
file-name- 显示远端机器上文件 file-name 的大小.
status
- 显示
ftp
当前的各种状态. struct
[struct-name]- 将文件传输结构 structure 设置为参数 struct-name. 缺省取值为 stream. ??
sunique
- 转换 sunique 状态,
即远端同名文件是否自动覆盖.
要使用本命令, 远端的
ftp 服务程序必须支持 ftp
协议中的
STOU
命令. 新生成的不同的远端文件名会显示给用户. 缺省的 sunique 状态为 off, 即自动覆盖远端同名文件. system
- 显示远端机器的操作系统类型.
tenex
- 设置文件传输方式为与 TENEX 机器通讯所需要的方式. ??
trace
- 转换 trace 状态, 即是否跟踪每个数据包.
type
[type-name]- 将文件传送类型
type
设置为 type-name. 如果不指定参数, 则本命令显示当前文件传送类型. 缺省的文件传送类型是网络 ASCII 类型. umask
[newmask]- 设置远端机器上的文件掩码为 newmask. 如果不指定参数 newmask, 则本命令显示当前的文件掩码.
user
user-name [password] [account]- 使用 [user-name]
作为用户名登录远端
FTP 服务器.
如果不指定参数
password,
而远端服务器需要提供密码,
则
ftp
会提示用户输入密码 (无回显); 如果不指定参数 account, 而远端 FTP 服务器需要提供账号,ftp
会提示用户输入账号. 如果指定了参数 account, 而在登录过程中远端 FTP 服务程序不需要账号, 则在登录完成以后会使用一个 account 命令将账号发送给服务器. 一般而言,ftp
在启动时, 会与远端 FTP 服务器建立连接并自动完成以上的登录过程. 也可以在启动ftp
时使用 -n 选项禁止此自动登录功能. verbose
- 转换 verbose 状态, 即是否显示详细信息. 如果 verbose 状态为 on , 则会显示远端 FTP 服务器的每一个响应, 并在文件传送结束后显示关于传输效率的统计信息. 缺省的 verbose 状态为 on .
- ? [command]
- 同 help 命令.
如果参数含有空格, 需用使用一对引号 "" 将其引起来.
放弃当前文件传送 (ABORTING A FILE TRANSFER)¶
按中断键 (一般为 Ctrl-C
) 可放弃当前文件传送.
对发送文件而言,
此时当前发送过程会立刻终止;
对文件接收,
此时会发送一个 ftp
协议中的 ABOR
命令到远端服务器,
而剩下未接受的数据会被丢弃.
这个过程有快有慢,
具体取决于远端服务器如何实现
ABOR
命令.
如果远端服务器不支持
ABOR
命令,
则服务器会继续当前文件传送,
直到传送完成,
才再显示出提示符
‘ftp>.
’
如果所有的本地操作已经完成,
ftp
在等待远端服务器应答时,
不会对中断键做出响应.
如果这时候 ftp
协议出了问题,
或如上所述远端服务器不支持
ABOR
命令而坚持把当前文件发送完,
用户就会等待很长时间得不到响应.
如果确实是 ftp
协议出了问题,
用户必需手工杀掉这个
ftp
进程.
文件名转换 (FILE NAMING CONVENTIONS)¶
ftp
命令中,
若指定文件名作为参数,
则此文件名会经过以下几步的处理:
- 如果指定的文件名为
‘
-
’, 则在输出时使用标准输出 stdin, 在输入时使用标准输入 stdout. - 如果指定的文件名首字母是
‘|,’
则此参数余下的部分被当作是一个
shell 命令.
Ftp
会使用 popen(3) 和所提供的参数创建一个 shell 进程, 并使用标准输入 stdin (标准输出 stdout) 来进行读 (写) 操作. 如果 shell 命令中包含空格, 则必须用引号将其引起来; 例如: "ls -lt". 一个有用的例子是: "dir | more". - 如果上述两步处理失败,
而 globbing 状态为 on ,
本地文件名会进行匹配,
匹配规则同 csh(1)
(参阅
glob
命令). 如果ftp
命令只需要单个的本地文件作参数 (如put),
则仅使用匹配结果里的第一个文件名. - 对
mget
和get
命令而言, 如果不指定本地文件名, 则远端文件名在经过case,
ntrans,
或nmap
转换后, 作为本地文件名使用. 如果runique
状态为 on, 本地文件名还可能加上一个后缀以免覆盖. - 对
mput
和put
命令而言, 如果不指定远端文件名, 则本地文件名在经过ntrans
或nmap
转换后, 作为远端文件名使用. 如果sunique
状态为 on, 远端服务器可能还会给远端文件名加上一个后缀以免覆盖.
文件转换参数 (FILE TRANSFER PARAMETERS)¶
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
只支持这些参数的缺省值.
环境 (ENVIRONMENT)¶
Ftp
使用了以下的环境变量:
参阅 (SEE ALSO)¶
ftpd(8,) RFC 959
历史 (HISTORY)¶
ftp
命令最初见于
4.2.BSD
错误 (BUGS)¶
对许多 ftp 命令而言, 其能否正确执行, 取决于远端服务器如何响应.
使用 4.2BSD 的 ascii 方式传送文件时, 对回车换行符的处理有错误. 本版本中已经修正了此问题, 但同时带来了另一个问题: 使用 ascii 方式, 与 4.2BSD 服务器互传二进制文件时可能出错. 要避免此问题, 请使用 binary image 类型来传送文件.
August 15, 1999 | Linux NetKit (0.16) |