tnftp — Internet 文件传输程序
概要
tnftp [-46AadefginpRtVv?] [-N netrc] [-o output] [-P port] [-q quittime] [-r retry] [-s srcaddr]
[-T dir,max[,inc]] [-x xfersize] [[user@]host [port]] [[user@]host:[path][/]]
[file:///path] [ftp://[user[:password]@]host[:port]/path[/][;type=type]]
[http://[user[:password]@]host[:port]/path] [https://[user[:password]@]host[:port]/path]
...
tnftp -u url file ...
描述
tnftp 是 Internet 标准文件传输协议的用户界面。该程序允许用户将文件传输到远程网络站点并从远程网络站点传输文件。
最后五个参数将使用 FTP 或 HTTP 协议,或者通过直接复制,将文件提取到当前目录中。这非常适合用于脚本。有关更多信息,请参阅下面的“自动提取文件”。
选项可以在命令行中或在命令解释器中指定。
-4 强制 tnftp 仅使用 IPv4 地址。
-6 强制 tnftp 仅使用 IPv6 地址。
-A 强制使用主动模式 FTP。默认情况下,tnftp 将尝试使用被动模式 FTP,并在服务器不支持被动模式时回退到主动模式。此选项会导致 tnftp 始终使用主动连接。它仅适用于连接到非常旧的服务器,这些服务器未正确实现被动模式。
-a 导致 tnftp 绕过正常的登录过程,并使用匿名登录。
-d 启用调试。
-e 禁用命令行编辑。这对于 Emacs ange-ftp 模式很有用。
-f 强制重新加载缓存,以便通过 FTP 或 HTTP 代理进行传输。
-g 禁用文件名通配符。
-i 在多次文件传输期间关闭交互式提示。
-N netrc 使用 netrc 而不是 ~/.netrc。有关更多信息,请参阅下面的“THE .netrc 文件”。
-n 限制 tnftp 在初始连接时对非自动提取传输尝试“自动登录”。如果启用自动登录,tnftp 将检查用户主目录中的 .netrc 文件(如下所示),以查找描述远程机器上帐户的条目。如果不存在任何条目,tnftp 将提示输入远程机器的登录名(默认值为本地机器上的用户身份),并在必要时提示输入密码和用于登录的帐户。要覆盖自动提取传输的自动登录,请按适当的方式指定用户名(以及可选的密码)。
-o output 在自动提取文件时,将内容保存到 output 中。output 根据下面的“文件命名约定”进行解析。如果 output 不是“-”或不以“|”开头,则仅将第一个指定的文件提取到 output 中;所有其他文件都将提取到其远程名称的基名中。
-P port 将端口号设置为 port。
-p 启用被动模式操作,用于在连接过滤防火墙后使用。 此选项已被弃用,因为 tnftp 现在默认尝试使用被动模式,并在服务器不支持被动连接时回退到主动模式。
-q quittime
如果连接已停滞 quittime 秒,则退出。
-R 重新启动所有非代理自动获取。
-r wait 如果连接尝试失败,则重试连接,暂停 wait 秒。
-s srcaddr 使用 srcaddr 作为所有连接的本地 IP 地址。
-t 启用数据包跟踪。
-T direction,maximum[,increment]
将 direction 的最大传输速率设置为 maximum 字节/秒,如果指定,则将增量设置为 increment 字节/秒。 请参阅 rate 以获取更多信息。
-u url file ...
将命令行中的文件上传到 url,其中 url 是 auto-fetch 支持的“ftp://”URL 类型之一(对于单个文件上传,可以使用可选的目标文件名),file 是一个或多个要上传的本地文件。
-V 禁用详细信息和进度,覆盖默认设置,即当输出到终端时启用。
-v 启用详细信息和进度。 如果输出到终端,则默认启用(并且在进度的情况下,tnftp 是前台进程)。 强制 tnftp 显示来自远程服务器的所有响应,并报告数据传输统计信息。
-x xfersize
将套接字发送和接收缓冲区的大小设置为 xfersize。 请参阅 xferbuf 以获取更多信息。
-? 将帮助显示到 stdout,然后退出。
可以在命令行中指定要与之通信的客户端主机。 如果这样做,tnftp 将立即尝试建立到 FTP 服务器的连接;否则,tnftp 将进入其命令解释器并等待用户的指示。 当 tnftp 正在等待用户命令时,系统会向用户提供提示“ftp>”。 tnftp 识别以下命令:
! [command [args]]
在本地机器上调用一个交互式 shell。 如果有参数,则将第一个参数视为要直接执行的命令,其余参数作为其参数。
$ macro-name [args]
执行使用 macdef 命令定义的宏 macro-name。 参数将以未展开的形式传递给宏。
account [passwd]
提供远程系统在成功完成登录后才能访问资源所需的补充密码。 如果不包含任何参数,系统将以非回显输入模式提示用户输入帐户密码。
append local-file [remote-file]
将本地文件附加到远程机器上的文件。 如果 remote-file 未指定,则本地文件名将在命名远程文件时使用,并且文件名将受到任何 ntrans 或 nmap 设置的更改。 文件传输使用当前设置的类型、格式、模式和结构。
ascii 将文件传输类型设置为网络 ASCII。 这是默认类型。
bell 安排在每个文件传输命令完成后发出提示音。
binary 设置文件传输类型以支持二进制图像传输。
bye 终止与远程服务器的 FTP 会话并退出 tnftp。 文件的末尾也会终止会话并退出。
case 在 get、mget 和 mput 命令期间切换远程计算机文件名的大小写映射。
当 case 开启时(默认情况下为关闭),远程计算机文件名中的所有大写字母都将以小写形式写入本地目录。
cd remote-directory
将远程计算机上的工作目录更改为 remote-directory。
cdup 将远程计算机的工作目录更改为当前远程计算机工作目录的父目录。
chmod mode remote-file
将远程系统上文件 remote-file 的权限模式更改为 mode。
close 终止与远程服务器的 FTP 会话,并返回到命令解释器。 任何定义的宏都会被删除。
cr 在 ASCII 类型文件检索期间切换回车符剥离。 在 ASCII 类型文件传输期间,记录由回车符/换行符序列表示。
当 cr 开启时(默认情况下),回车符将从该序列中删除,以符合 Unix 单个换行符记录分隔符。 远程非 Unix 系统上的记录可能包含单个换行符;当进行 ASCII 类型传输时,只有在 cr 关闭时,才能区分这些换行符与记录分隔符。
debug [debug-value]
切换调试模式。 如果指定了可选的 debug-value,则用于设置调试级别。
当调试开启时,tnftp 会在发送到远程计算机的每个命令之前打印该命令,并以字符串“-->”开头。
delete remote-file
删除远程计算机上的文件 remote-file。
dir [remote-path [local-file]]
打印远程计算机上目录的内容列表。 该列表包括远程服务器选择包含的任何系统相关信息; 例如,大多数 Unix 系统会生成“ls -l”命令的输出。 如果未指定 remote-path,则使用当前工作目录。 如果交互式提示已开启,tnftp 将提示用户验证最后一个参数是否确实是接收 dir 输出的目标本地文件。 如果未指定本地文件,或者 local-file 为“-”,则输出将发送到终端。
disconnect close 的同义词。
edit 切换命令行编辑和上下文相关的命令和文件完成功能。 如果输入来自终端,则自动启用此功能;否则,将禁用该功能。
epsv, epsv4, epsv6
切换所有 IP、IPv4 和 IPv6 连接上扩展 EPSV 和 EPRT 命令的使用。首先尝试 EPSV/EPRT,然后尝试 PASV/PORT。默认启用。如果扩展命令失败,则此选项将在当前连接期间或直到再次执行 epsv、epsv4 或 epsv6 为止,暂时禁用。
exit
与 bye 同义。
features
显示远程服务器支持的功能(使用 FEAT 命令)。
fget localfile
检索 localfile 中列出的文件,每行一个文件名。
form format
将文件传输格式设置为 format。默认(并且唯一支持)的格式是“non-print”。
ftp host [port]
与 open 同义。
gate [host [port]]
切换 gate-ftp 模式,该模式用于连接到 TIS FWTK 和 Gauntlet FTP 代理。如果未设置 gate-ftp 服务器(要么由用户显式设置,要么来自 FTPSERVER 环境变量),则不允许这样做。如果提供了 host,则启用 gate-ftp 模式,并将 gate-ftp 服务器设置为 host。如果还提供了 port,则将使用该 port 作为连接到 gate-ftp 服务器上的端口。
get remote-file [local-file]
检索 remote-file 并将其存储在本地机器上。如果未指定本地文件名,则它将使用远程机器上的相同名称,但会受到当前大小写、ntrans 和 nmap 设置的更改。在传输文件时,将使用当前 type、form、mode 和 structure 设置。
glob
为 mdelete、mget、mput 和 mreget 切换文件名扩展。如果使用 glob 禁用文件名扩展,则文件名参数将按字面意思进行处理,不会进行扩展。对于 mput,文件名扩展的执行方式与 csh(1) 中的方式相同。对于 mdelete、mget 和 mreget,每个远程文件名都会单独在远程机器上扩展,并且不会合并列表。目录名称的扩展可能与普通文件的名称扩展不同:确切结果取决于外部操作系统和 FTP 服务器,并且可以通过执行“mls remote-files -”来预览。请注意:mget、mput 和 mreget 并非旨在传输整个目录子树的文件。可以通过传输 [tar]({filename}../../tar)(1) 存档的子树来实现。
hash [size]
切换每个传输的数据块的哈希标志(“#”)打印。数据块的大小默认为 1024 字节。可以通过指定字节数来更改此大小。启用哈希会禁用进度。
help [command]
打印有关 command 的含义的信息。如果未提供任何参数,tnftp 将打印已知命令的列表。
idle [seconds]
将远程服务器上的不活动计时器设置为 seconds 秒。如果省略 seconds,则将打印当前的不活动计时器。
image
与 binary 同义。
lcd [directory]
更改本地机器上的工作目录。如果未指定目录,则将使用用户的家目录。
less file `page` 的同义词。
lpage local-file
使用 `set pager` 选项指定的程序显示 `local-file`。
lpwd
在本地机器上打印当前工作目录。
ls [remote-path [local-file]]
`dir` 的同义词。
macdef macro-name
定义一个宏。后续的行将存储为宏 `macro-name`;一个空行(文件中连续的新行字符或来自终端的回车符)会终止宏输入模式。宏的限制为 16 个,并且所有已定义宏的总字符数为 4096 个。宏的名称最多为 8 个字符。宏仅适用于定义它们或通过 `open` 命令调用的下一个会话中定义的当前会话,并且在执行 `close` 命令之前保持定义状态。要调用宏,请使用 `$` 命令(见上文)。
宏处理器会将 `$` 和 `\` 解释为特殊字符。`$` 后跟一个或多个数字,将被替换为宏调用命令行上的相应参数。`$` 后跟一个 `i`,表示宏处理器执行的宏将被循环。在第一次循环中,`$i` 将被替换为宏调用命令行上的第一个参数,在第二次循环中,它将被替换为第二个参数,依此类推。`\` 后跟任何字符,都将被替换为该字符。使用 `\` 来防止对 `$` 进行特殊处理。
mdelete [remote-files]
删除远程机器上的 `remote-files`。
mdir remote-files local-file
类似于 `dir`,但可以指定多个远程文件。如果启用了交互式提示,`tnftp` 将提示用户确认最后一个参数是否确实是接收 `mdir` 输出的目标本地文件。
mget remote-files
在远程机器上扩展 `remote-files`,并为每个文件名执行 `get` 操作。有关文件名扩展的详细信息,请参阅 `glob`。生成的将根据 `case`、`ntrans` 和 `nmap` 设置处理文件,并将文件传输到本地工作目录,可以使用 `lcd directory` 更改本地工作目录;可以使用 `! mkdir directory` 创建新的本地目录。
mkdir directory-name
在远程机器上创建一个目录。
mls remote-files local-file
类似于 `ls`,但可以指定多个远程文件,并且必须指定 `local-file`。如果启用了交互式提示,`tnftp` 将提示用户确认最后一个参数是否确实是接收 `mls` 输出的目标本地文件。
mlsd [remote-path]
以机器可解析的格式显示 `remote-path` 的内容(如果未指定,则应默认为当前目录),使用 `MLSD`。显示的格式可以使用 `remopts mlst ...` 更改。
mlst [remote-path]
以机器可解析的格式显示 `remote-path` 的详细信息(如果未指定,则应默认为当前目录),使用 `MLST`。显示的格式可以使用 `remopts mlst ...` 更改。
mode mode-name
将文件传输模式设置为 mode-name。默认(且唯一支持的)模式是“stream”。
modtime remote-file
显示远程机器上文件的最后修改时间,格式为 RFC 2822。
more file
与 page 命令相同。
mput local-files
展开本地文件列表中使用的通配符,并对结果列表中的每个文件执行 put 操作。有关文件名扩展的详细信息,请参阅 glob。生成的文件名然后将根据 ntrans 和 nmap 设置进行处理。
mreget remote-files
与 mget 相同,但执行 reget 而不是 get。
msend local-files
与 mput 相同。
newer remote-file [local-file]
仅当远程文件的修改时间比当前系统上的文件更新时,才获取该文件。如果文件在当前系统中不存在,则认为远程文件较新。否则,此命令与 get 命令相同。
nlist [remote-path [local-file]]
与 ls 命令相同。
nmap [inpattern outpattern]
设置或取消设置文件名映射机制。如果没有指定参数,则取消设置文件名映射机制。如果指定了参数,则在 mput 命令和没有指定远程目标文件名的 put 命令期间,远程文件名将被映射。如果指定了参数,则在 mget 命令和没有指定本地目标文件名的 get 命令期间,本地文件名将被映射。当连接到具有不同文件命名约定或实践的非 Unix 远程计算机时,此命令很有用。映射遵循 inpattern 和 outpattern 设置的模式。
inpattern 是用于传入文件名的模板(可能已经根据 ntrans 和 case 设置进行了处理)。通过在 inpattern 中包含序列“$1”、“$2”、“$9”,实现变量模板。使用“\”来防止对“$”字符进行特殊处理。所有其他字符都按字面意义处理,并用于确定 nmap [inpattern] 变量的值。例如,给定 inpattern “$1.$2”和远程文件名“mydata.data”,则“$1”的值将为“mydata”,而“$2”的值将为“data”。
outpattern 确定生成的映射文件名。序列“$1”、“$2”、“$9”被 inpattern 模板生成的任何值替换。序列“$0”被原始文件名替换。此外,序列[seq1,seq2]被 seq1 替换(如果 seq1 不是空字符串);否则,它被 seq2 替换。例如,命令
nmap $1.$2.$3 [$1,$2].[$2,file]
将为输入文件名“myfile.data”和“myfile.data.old”生成输出文件名“myfile.data”,为输入文件名“myfile”生成“myfile.file”,为输入文件名“.myfile”生成“myfile.myfile”。可以在 outpattern 中包含空格,例如:
nmap $1 sed s/ *$// > $1
使用 ‘\’ 字符来防止对 ‘$’、‘[’、‘]’ 和 ‘,’ 字符进行特殊处理。
ntrans [inchars [outchars]]
设置或取消文件名字符转换机制。如果不指定任何参数,则取消文件名字符转换机制。如果指定了参数,则在 mput 命令和没有指定远程目标文件名的 put 命令期间,远程文件名中的字符将被转换。如果指定了参数,则在 mget 命令和没有指定本地目标文件名的 get 命令期间,本地文件名中的字符将被转换。此命令在连接到具有不同文件命名约定或实践的非 Unix 远程计算机时很有用。文件名中与 inchars 中的字符匹配的字符将被替换为 outchars 中相应的字符。如果 inchars 中字符的位置长度大于 outchars 的长度,则该字符将从文件名中删除。
open host [port]
建立到指定 FTP 服务器的连接。可以提供可选的端口号,在这种情况下,tnftp 将尝试连接到该端口上的 FTP 服务器。如果启用了自动登录选项(默认),tnftp 还会尝试自动将用户登录到 FTP 服务器(请参阅下文)。
page file 检索文件并使用 set pager 选项指定的程序进行显示。
passive [auto]
切换被动模式(如果没有提供参数)。如果提供 auto,则行为类似于 FTPMODE 设置为“auto”。如果启用被动模式(默认),tnftp 将为所有数据连接发送 PASV 命令,而不是 PORT 命令。PASV 命令请求远程服务器打开一个用于数据连接的端口,并返回该端口的地址。远程服务器在该端口上侦听,客户端连接到它。在使用更传统的 PORT 命令时,客户端侦听一个端口,并将该地址发送到远程服务器,远程服务器连接回该地址。被动模式对于通过控制流量方向的网关路由器或主机使用 tnftp 时非常有用。(请注意,虽然 RFC 1123 要求 FTP 服务器支持 PASV 命令,但有些服务器不支持。)
pdir [remote-path]
执行 dir [remote-path],并使用 set pager 选项指定的程序显示结果。
pls [remote-path]
执行 ls [remote-path],并使用 set pager 选项指定的程序显示结果。
pmlsd [remote-path]
执行 mlsd [remote-path],并使用 set pager 选项指定的程序显示结果。
preserve 切换检索文件的修改时间是否保留。
progress 切换显示传输进度条。对于本地文件为“-”或以“|”开头的命令,进度条将被禁用。请参阅“文件命名约定”以获取更多信息。启用进度会禁用哈希。
prompt 开关 交互式提示。交互式提示发生在多次文件传输期间,允许用户有选择地检索或存储文件。如果关闭提示(默认情况下为开启),任何 mget 或 mput 将传输所有文件,任何 mdelete 将删除所有文件。
当提示开启时,以下命令可在提示符中使用:
a 对当前文件回答“是”,并自动对剩余的所有文件回答“是”,用于当前命令。
n 回答“否”,不传输文件。
p 对当前文件回答“是”,并关闭提示模式(就像给出了 prompt off 命令一样)。
q 终止当前操作。
y 回答“是”,并传输文件。
? 显示帮助消息。
任何其他响应都将回答“是”,并传输当前文件。
proxy ftp-command
在辅助控制连接上执行 FTP 命令。此命令允许同时连接到两个远程 FTP 服务器以在两者之间传输文件。第一个 proxy 命令应该是 open,用于建立辅助控制连接。输入命令“proxy ?”以查看可以在辅助连接上执行的其他 FTP 命令。以下命令在加上 proxy 前缀时行为不同:open 不会在自动登录过程中定义新的宏;close 不会删除现有的宏定义;get 和 mget 将文件从主控制连接上的主机传输到辅助控制连接上的主机;put、mput 和 append 将文件从辅助控制连接上的主机传输到主控制连接上的主机。第三方文件传输取决于辅助控制连接上的服务器是否支持 FTP 协议中的 PASV 命令。
put local-file [remote-file]
将本地文件存储到远程机器上。如果 remote-file 未指定,则本地文件名将在处理后用于命名远程文件,具体处理方式取决于任何 ntrans 或 nmap 设置。文件传输使用当前设置的文件类型、格式、模式和结构。
pwd 打印远程机器上当前工作目录的名称。
quit 是 bye 的同义词。
quote [arg ...]
指定的参数将逐字发送到远程 FTP 服务器。
rate direction [maximum [increment]]
将最大传输速率限制为每秒 maximum 字节。如果 maximum 为 0,则禁用限制。
direction 可以是以下之一:
all 两个方向。
get 传入传输。
put 传出传输。
maximum 可以在运行时通过每次接收到给定信号时增加 increment 字节来修改(默认值为 1024):
SIGUSR1 将 maximum 增加 increment 字节。
SIGUSR2 递减最大值,每次递减一个字节。结果必须为正数。
如果未提供最大值,则显示当前的节流速率。
注意:ascii 模式传输尚未实现速率限制。
rcvbuf size
将套接字接收缓冲区的大小设置为指定的大小。
recv remote-file [local-file]
get 命令的同义词。
reget remote-file [local-file]
reget 命令类似于 get 命令,但如果 local-file 存在并且小于 remote-file,则假定 local-file 是 remote-file 的部分传输副本,并且从上次失败的位置继续传输。当通过容易断开连接的网络传输非常大的文件时,此命令很有用。
remopts command [command-options]
为远程 FTP 服务器设置 command 命令的选项,选项为 command-options(如果未提供,则按命令处理)。已知的支持选项的远程 FTP 命令包括:MLST(用于 MLSD 和 MLST)。
rename [from [to]]
在远程机器上将文件从 from 重命名为 to。
reset 清除回复队列。此命令重新同步与远程 FTP 服务器的命令/回复序列。在远程服务器违反 FTP 协议后,可能需要重新同步。
restart marker
在指定的标记处重新启动下一个 get 或 put 命令。在 Unix 系统上,marker 通常是文件中以字节为单位的偏移量。
rhelp [command-name]
从远程 FTP 服务器请求帮助。如果指定了 command-name,则将其提供给服务器。
rmdir directory-name
删除远程机器上的目录。
rstatus [remote-file]
不带任何参数,显示远程机器的状态。如果指定了 remote-file,则显示远程机器上 remote-file 的状态。
runique 切换本地系统上存储具有唯一文件名的文件的功能。如果本地文件已存在,并且其名称等于 get 或 mget 命令的目标本地文件名,则会在名称后附加“.1”。如果生成的名称与另一个现有文件匹配,则将“.2”附加到原始名称。如果此过程一直进行到“.99”,则会打印一条错误消息,并且不会进行传输。生成的唯一文件名将被报告。请注意,runique 不会影响从 shell 命令生成的本地文件(请参见下文)。默认值为关闭。
send local-file [remote-file]
put 命令的同义词。
sendport 切换 PORT 命令的使用。默认情况下,tnftp 将尝试在建立每个数据连接时使用 PORT 命令。使用 PORT 命令可以防止在执行多个文件传输时出现延迟。如果 PORT 命令失败,tnftp 将使用默认数据端口。当禁用 PORT 命令的使用时,将不会尝试为每次数据传输使用 PORT 命令。这对于某些 FTP 实现很有用,这些实现会忽略 PORT 命令,但错误地表明它们已被接受。
set [option value]
将选项设置为值。如果未提供选项和值,则显示所有选项及其值。当前支持的选项是:
anonpass 默认值为 $FTPANONPASS
ftp_proxy 默认值为 $ftp_proxy。
http_proxy 默认值为 $http_proxy。
https_proxy 默认值为 $https_proxy。
no_proxy 默认值为 $no_proxy。
pager 默认值为 $PAGER。
prompt 默认值为 $FTPPROMPT。
rprompt 默认值为 $FTPRPROMPT。
sslnoverify 默认值为 $FTPSSLNOVERIFY。
site [arg ...]
指定的参数将逐字发送到远程 FTP 服务器,作为 SITE 命令。
size remote-file
返回远程机器上 remote-file 的大小。
sndbuf size
将套接字发送缓冲区的大小设置为 size。
status 显示 tnftp 的当前状态。
struct struct-name
将文件传输结构设置为 struct-name。默认(且唯一支持)的结构是“file”。
sunique 切换在远程机器上以唯一文件名存储文件。远程 FTP 服务器必须支持 FTP 协议 STOU 命令才能成功完成。远程服务器将报告唯一的名称。默认值为关闭。
system 显示在远程机器上运行的操作系统类型。
tenex 将文件传输类型设置为与 TENEX 机器通信所需的类型。
throttle rate 的同义词。
trace 切换数据包跟踪。
type [type-name]
将文件传输类型设置为 type-name。如果未指定类型,则打印当前类型。默认类型为网络 ASCII。
umask [newmask]
将远程服务器上的默认 umask 设置为 newmask。如果省略 newmask,则打印当前 umask。
unset option
取消设置选项。有关更多信息,请参阅 set。
usage command
打印命令的使用消息。
user user-name [password [account]]
向远程 FTP 服务器标识您自己。如果未指定密码,并且服务器需要密码,tnftp 将提示用户输入密码(在禁用本地回显后)。如果未指定帐户字段,并且 FTP 服务器需要帐户字段,则将提示用户输入帐户字段。如果指定了帐户字段,则将在登录序列完成后向远程服务器发送帐户命令(如果远程服务器不需要它来进行登录)。除非 tnftp 使用“自动登录”禁用启动,否则此过程会在首次连接到 FTP 服务器时自动完成。
verbose 切换详细模式。在详细模式下,FTP 服务器的所有响应都将显示给用户。此外,如果 verbose 处于开启状态,则在文件传输完成后,将报告有关传输效率的统计信息。默认情况下,verbose 处于开启状态。
xferbuf size
将套接字发送和接收缓冲区的大小设置为 size。
? [command]
help 的同义词。
带有嵌入空格的命令参数可以使用引号“"”进行引用。
可以切换设置的命令可以接受显式的“on”或“off”参数,以强制设置相应的状态。
接受字节数作为参数的命令(例如,hash、rate 和 xferbuf)支持参数末尾的可选后缀,该后缀会改变参数的解释方式。支持的后缀如下: b 不进行任何修改。(可选) k 千;将参数乘以 1024 m 兆;将参数乘以 1048576 g 吉;将参数乘以 1073741824
如果 tnftp 在传输过程中收到 SIGINFO(请参阅 stty(1) 中的 status 参数)或 SIGQUIT 信号,则当前传输速率统计信息将以与标准完成消息相同的格式写入标准错误输出。
自动获取文件
除了标准命令之外,此版本的 tnftp 还支持自动获取功能。要启用自动获取,只需将主机名/文件的列表作为命令行参数传递即可。
以下格式是 auto-fetch 元素的有效语法:
[user@]host:[path][/]
“经典”FTP 格式。
如果 path 包含通配符并且启用了通配符(请参阅 glob),则执行与 mget path 相同的操作。
如果 path 的目录部分不包含通配符,则将其作为本地文件名(请参阅 basename(1))存储在当前目录中。否则,将完整的远程名称用作本地名称,相对于本地根目录。
ftp://[user[:password]@]host[:port]/path[/][;type=type]
FTP URL,如果定义了 ftp_proxy,则使用 FTP 协议进行检索。否则,通过在 set ftp_proxy 中定义的代理使用 HTTP 传输 URL。如果未定义 set ftp_proxy 并且提供了 user,则以 user 身份登录。在这种情况下,如果提供了 password,则使用 password,否则提示用户输入。
如果提供了后缀‘;type=A’或‘;type=I’,则传输类型将以 ASCII 或二进制(分别为 A 和 I)进行。默认传输类型为二进制。
为了符合 RFC 3986,tnftp 将“ftp://”auto-fetch URL 的路径部分解释如下:
‘/’ 紧跟在 host[:port] 之后,将被解释为路径分隔符,而不是路径的一部分。
路径将被解释为以‘/’分隔的名称组件列表。对于除最后一个组件之外的所有组件,tnftp 将执行与 cd 命令相同的操作。对于最后一个路径组件,tnftp 将执行与 get 命令相同的操作。
路径中出现‘//’或路径开头出现额外的‘/’,将导致空名称组件,这将导致执行与没有目录名称的 cd 命令相同的操作。这可能不太有用。
路径组件中的任何“%XX”代码(根据 RFC 3986)都将被解码,其中 XX 代表十六进制字符代码。此解码在路径被拆分为组件之后进行,但在每个组件用于等效的 cd 或 get 命令之前进行。一些常用代码是“%2F”(表示“/”)和“%7E”(表示“~”)。
上述解释具有以下含义:
路径是相对于指定用户的默认登录目录或“匿名”用户的默认登录目录进行解释的。如果需要使用根目录 /,请使用以“%2F”开头的路径。如果需要用户的家目录(并且远程服务器支持此语法),请使用以“%7Euser/”开头的路径。例如,要从“localhost”检索 /etc/motd,用户名为“myname”,密码为“mypass”,请使用“ftp://myname:mypass@localhost/%2fetc/motd”。
可以通过仔细选择在何处使用“/”以及在何处使用“%2F”(或“%2f”)来控制确切的 cd 和 get 命令。例如,以下 URL 对应于指示的命令:
ftp://host/dir1/dir2/file cd dir1, cd dir2, get file.
ftp://host/%2Fdir1/dir2/file cd /dir1, cd dir2, get file.
ftp://host/dir1%2Fdir2/file cd dir1/dir2, get file.
您必须对用于等效 cd 命令的每个中间目录拥有适当的访问权限。
http://[user[:password]@]host[:port]/path
一个 HTTP URL,使用 HTTP 协议检索。如果设置了 http_proxy,则将其用作 HTTP 代理服务器的 URL。如果需要 HTTP 身份验证才能检索路径,并且 URL 中包含用户(以及可选的密码),则首先使用它们进行身份验证尝试。
https://[user[:password]@]host[:port]/path
一个 HTTPS URL,使用 HTTPS 协议检索。如果设置了 https_proxy,则将其用作 HTTPS 代理服务器的 URL。如果需要 HTTPS 身份验证才能检索路径,并且 URL 中包含用户(以及可选的密码),则首先使用它们进行身份验证尝试。目前没有证书验证和验证。
file:///path
一个本地 URL,从本地主机上的 /path 复制。
about:topic
显示有关主题的信息;不为此自动获取的元素检索任何文件。支持的值包括:
about:ftp 有关 tnftp 的信息。
about:version tnftp 的版本。在报告问题时很有用。
除非另有说明,并且未提供 -o 输出,否则文件将存储在当前目录中,其名称为 path 的 basename(1)。请注意,如果收到 HTTP 重定向,则将使用服务器提供的新的目标 URL 重新尝试获取,并使用相应的新的路径。建议使用显式的 -o 输出,以避免写入意外的文件名。
如果经典格式或 FTP URL 格式具有尾随的“/”或空的路径组件,则 tnftp 将连接到站点并 cd 到作为路径给定的目录,并让用户处于交互模式,准备进行进一步的输入。如果正在使用 set ftp_proxy,则此操作将不起作用。
直接 HTTP 传输使用 HTTP 1.1。通过代理的 FTP 和 HTTP 传输使用 HTTP 1.0。
如果提供了 -R 选项,所有不通过 FTP 或 HTTP 代理进行的自动获取都将重新启动。 对于 FTP,这是通过使用 reget 代替 get 来实现的。对于 HTTP,这是通过使用 HTTP/1.1 指令“Range: bytes=”来实现的。
如果需要 WWW 或代理 WWW 身份验证,系统将提示您输入用户名和密码以进行身份验证。
在 URL 中指定 IPv6 数字地址时,需要用方括号将地址括起来。例如:'ftp://[::1]:21/'。这是因为冒号既用于 IPv6 数字地址,也用于分隔端口号。
取消文件传输
要取消文件传输,请使用终端中断键(通常是 Ctrl-C)。发送传输将立即停止。接收传输将通过向远程服务器发送 FTP 协议 ABOR 命令并丢弃所有进一步接收的数据来停止。完成此操作的速度取决于远程服务器对 ABOR 处理的支持程度。如果远程服务器不支持 ABOR 命令,则在远程服务器完成发送请求的文件之前,不会显示提示。
如果在 tnftp 等待来自远程服务器的 ABOR 处理响应期间使用终端中断键序列,则将关闭连接。这与传统行为(在此阶段忽略终端中断)不同,但被认为更有用。
文件命名约定
作为 tnftp 命令参数指定的文件名将根据以下规则进行处理。
如果指定的文件名为“-”则使用 stdin(用于读取)或 stdout(用于写入)。
如果文件名的第一个字符是“|”,则其余参数将被解释为 shell 命令。然后,tnftp 会 fork 一个 shell,使用 popen(3) 命令,并从提供的参数中读取(写入)stdout(stdin)。如果 shell 命令包含空格,则参数必须用引号括起来;例如:“| ls -lt”。此机制的一个特别有用的示例是:“dir "" |more”。
如果未进行上述检查,如果启用了 globbing,则本地文件名将根据 csh(1) 中使用的规则进行扩展;请参阅 glob 命令。如果 tnftp 命令期望单个本地文件(例如,put),则仅使用 globbing 操作生成的文件名中的第一个。
对于 mget 命令和未指定本地文件名的 get 命令,本地文件名是远程文件名,可以通过 case、ntrans 或 nmap 设置对其进行更改。然后,如果 runique 处于启用状态,则生成的文件名可能会被更改。
对于 mput 命令和未指定远程文件名的 put 命令,远程文件名是本地文件名,可以通过 ntrans 或 nmap 设置对其进行更改。然后,如果 sunique 处于启用状态,远程服务器可能会更改生成的文件名。
文件传输参数
FTP 规范指定了许多可能影响文件传输的参数。 类型可以是“ascii”、“image”(二进制)、“ebcdic”和“local byte size”(主要用于 PDP-10 和 PDP-20)。tnftp 支持 ascii 和 image 类型的文件传输,以及 tenex 模式传输的本地字节大小 8。
tnftp 仅支持剩余文件传输参数的默认值:mode、form 和 struct。
.netrc 文件
.netrc 文件包含用于自动登录过程的登录和初始化信息。 它位于用户的家目录中,除非使用 -N netrc 选项或在 NETRC 环境变量中指定。 识别以下标记;它们可以用空格、制表符或换行符分隔:
machine name
标识远程机器名称。 自动登录过程会在 .netrc 文件中搜索与 tnftp 命令行或作为 open 命令参数中指定的远程机器匹配的 machine 标记。 一旦找到匹配项,就会处理后续的 .netrc 标记,直到到达文件末尾或遇到另一个 machine 标记或 default 标记。
default
与 machine name 相同,不同之处在于 default 可以匹配任何名称。 只能有一个 default 标记,并且它必须在所有 machine 标记之后。 这通常用作:
default login anonymous password user@site
从而为用户提供自动匿名 FTP 登录到未在 .netrc 中指定的机器。 这可以通过使用 -n 标志来禁用自动登录来覆盖。
login name
标识远程机器上的用户。 如果存在此标记,自动登录过程将使用指定的名称启动登录。
password string
提供密码。 如果存在此标记,自动登录过程将在远程服务器要求密码作为登录过程的一部分时提供指定的字符串。 请注意,如果此标记存在于 .netrc 文件中的任何非匿名用户中,如果 .netrc 可被用户以外的任何人读取,tnftp 将中止自动登录过程。
account string
提供额外的帐户密码。 如果存在此标记,自动登录过程将在远程服务器要求额外的帐户密码时提供指定的字符串,或者如果不需要,则启动 ACCT 命令。
macdef name
定义宏。 此标记的作用方式与 tnftp macdef 命令的作用方式相同。 宏使用指定的名称定义;其内容从下一行 .netrc 开始,并持续到遇到一个空行(连续的换行符)。 与 .netrc 文件中的其他标记一样,macdef 仅适用于其前面的机器定义。 macdef 条目不能由多个机器定义使用;相反,它必须在它要使用的每个机器之后定义。 如果定义了一个名为 init 的宏,它将作为自动登录过程的最后一步自动执行。 例如,
default
macdef init
epsv4 off
后面跟着一个空行。
命令行编辑
tnftp 支持交互式命令行编辑,通过 editline(3) 库实现。它通过 edit 命令启用,并且如果输入来自终端,则默认启用。可以使用箭头键和其他 GNU Emacs 样式的编辑键来调用和编辑之前的行。
editline(3) 库通过 .editrc 文件进行配置——有关更多信息,请参阅 editrc(5)。
tnftp 提供了一个额外的按键绑定,用于提供上下文相关的命令和文件名补全(包括远程文件补全)。要使用它,请将一个按键绑定到 editline(3) 命令 ftp-complete。默认情况下,它绑定到 TAB 键。
命令行提示符
默认情况下,tnftp 向用户显示一个命令行提示符“ftp>”。可以使用 set prompt 命令更改它。
可以使用 set rprompt 命令在屏幕的右侧(在命令输入之后)显示一个提示符。
以下格式序列将被给定的信息替换:
%/ 当前远程工作目录。
%c[[0]n], %.[[0]n]
当前远程工作目录的尾部组件,或者如果给定了数字 n,则为 n 个尾部组件。如果 n 以“0”开头,则在格式中跳过的组件数位于尾部组件之前,格式为“/
%M 远程主机名。
%m 远程主机名,直到第一个点“.”。
%n 远程用户名。
%% 一个百分号字符“%”。
环境变量
tnftp 使用以下环境变量。
FTPANONPASS 在匿名 FTP 传输中发送的密码。默认值为“`whoami`@”。
FTPMODE 覆盖默认操作模式。支持的值有:
active 仅使用主动模式 FTP
auto 自动确定是使用被动模式还是主动模式(这是默认值)
gate gate-ftp 模式
passive 仅使用被动模式 FTP
FTPPROMPT 要使用的命令行提示符。默认值为“ftp>”。有关更多信息,请参阅“命令行提示符”。
FTPRPROMPT 要使用的命令行右侧提示符。默认值为空字符串。有关更多信息,请参阅“命令行提示符”。
FTPSERVER 启用 gate 时,用作 gate-ftp 服务器的主机。
FTPSERVERPORT 启用 gate 时,连接到 gate-ftp 服务器时要使用的端口。默认值为通过 getservbyname(3) 查找“ftpgate/tcp”返回的端口。
FTPUSERAGENT 要发送的 HTTP User-Agent 标头的值。
FTPSSLNOVERIFY
设置为 1 以不验证 SSL 证书。
HOME 如果存在 .netrc 文件,则为其默认位置。
NETRC .netrc 文件的备用位置。
PAGER 用于各种命令以显示文件。如果为空或未设置,则默认为 more(1)。
SHELL 用于默认 shell。
ftp_proxy 用于进行 FTP URL 请求的 FTP 代理的 URL(如果未定义,则使用标准 FTP 协议)。
请参阅 http_proxy 以获取有关代理使用的更多说明。
http_proxy 用于进行 HTTP URL 请求的 HTTP 代理的 URL。如果代理需要身份验证,并且此 URL 中包含用户名和密码,则它们将在第一次尝试进行代理身份验证时自动使用。
如果用户名或密码中需要“不安全”的 URL 字符(例如“@”或“/”),则使用 RFC 3986 “%XX” 编码对其进行编码。
请注意,在 ftp_proxy 和 http_proxy 中使用用户名和密码可能与使用它的其他程序(例如 lynx(1))不兼容。
注意:这不用于交互式会话,仅用于命令行获取。
https_proxy 用于进行 HTTPS URL 请求的 HTTPS 代理的 URL。
请参阅 http_proxy 以获取有关代理使用的更多说明。
no_proxy 一个由空格或逗号分隔的主机(或域名)列表,对于这些主机,不应使用代理。每个条目都可以有一个可选的尾随“:port”,它会将匹配限制为连接到该端口。
扩展被动模式和防火墙
某些防火墙配置不允许 tnftp 使用扩展被动模式。如果您发现即使是简单的 ls 命令在打印如下消息后似乎也会挂起:
229Entering Extended Passive Mode (|||58551|)
那么您需要使用 epsv4 off 命令禁用扩展被动模式。有关如何使其自动化的示例,请参见上面的“ .netrc 文件”部分。
参见
getservbyname(3), editrc(5), services(5), ftpd(8)
标准
tnftp 尝试符合以下标准:
RFC 959 文件传输协议
RFC 1123 互联网主机的要求 - 应用程序和支持
RFC 1635 如何使用匿名 FTP
RFC 2389 文件传输协议的功能协商机制
RFC 2428 文件传输协议的 IPv6 和 NAT 扩展
RFC 2616 超文本传输协议 - HTTP/1.1
RFC 2822 互联网消息格式
RFC 3659 文件传输协议的扩展
RFC 3986 统一资源标识符 (URI)
历史
tnftp 命令出现在 4.2BSD 中。
各种功能,例如命令行编辑、上下文相关的命令和文件完成、动态进度条、自动获取文件和 URL、修改时间保留、传输速率限制、可配置的命令行提示以及其他比标准 BSD tnftp 更好的功能,是在 NetBSD 1.3 及更高版本中由 Luke Mewburn ⟨_⟩ 实现的。
IPv6 支持由 WIDE/KAME 项目添加(但可能不存在于所有非 NetBSD 版本的此程序中,具体取决于操作系统是否以类似于 KAME 的方式支持 IPv6)。
错误
许多命令的正确执行依赖于远程服务器的正常行为。
4.2BSD ASCII 模式传输代码中对回车符的处理存在错误,现已更正。此更正可能会导致使用 ASCII 类型传输到和从 4.2BSD 服务器的二进制文件出现错误。为避免此问题,请使用二进制图像类型。
tnftp 假定所有 IPv4 映射地址(具有 ::ffff:10.1.1.1 形式的 IPv6 地址)都表示可以通过 AF_INET 套接字处理的 IPv4 目标地址。但是,在某些 IPv6 网络配置中,此假设不成立。在这种环境中,IPv4 映射地址必须直接传递给 AF_INET6 套接字。例如,如果您的站点使用 SIIT 翻译器进行 IPv6 到 IPv4 的转换,则 tnftp 无法支持您的配置。