NcFTP:灵活的 FTP 客户端

作者:管理员 更新时间:2013-12-31 15:28

NcFTP 既可以作为 FTP 服务器,也可以作为 FTP 客户端。但是,这两者都称为 NcFTP。在本文中,我只使用 NcFTP 客户端。因此,在我提到 NcFTP 时只是指 NcFTP 客户端。另外,客户端附带各种命令行实用程序,这让客户端非常便于在命令行上或以批处理模式使用。

NcFTP 概述

NcFTP 实用程序让系统管理员能够利用 FTP 的灵活性和性能。NcFTP 可以与当前的默认 AIX? FTP 服务一起使用,目前没有发现任何问题。NcFTP 能够继续失败的传输和重新尝试,在通过有网络瓶颈的网络传输大型文件时这非常有用。NcFTP 可以输出状态行(与 SCP 很相似),显示传输的进度。但是,NcFTP 不支持任何加密,这对于某些环境可能是问题。

非常常见的安装形式是运行当前的 AIX FTP 服务器,使用 NcFTP 作为客户端。本文主要关注这种安装类型。

NcFTP 客户端附带以下实用程序:

注意:在本文中,不讨论 ncftpspooler 实用程序。

安装 NcFTP

可以从 NcFTP 主页下载 NcFTP

下载客户端之后,解压二进制文件,见清单 1:

确认 NcFTP 已经启动,如清单 2 所示。

根据访问的远程 FTP 主机类型不同,可能必须在主机名前面加上 ftp://,比如:

注意:对于 ncftpls 实用程序,在连接远程主机时,必须使用前面的格式。

如果遇到了 FTP 连接问题,那么按以下列表尝试排除故障:

  1. 确认远程 FTP 服务正在运行。

  2. 确认远程 FTP 端口没有阻塞。

  3. 确认 tcp 包装器没有拒绝连接。

  4. 确认您的用户名没有在 /etc/ftpusers 中。

  5. 确认在 /etc/ftpaccess.ctl 中没有拒绝这个主机或用户。


以交互方式使用 NcFTP

确认可以使用 NcFTP 连接所选的远程服务器。在清单 3 中,我使用用户名 dxtans 和密码 master 连接私有主机 tardis。

如果一切正常,下面我们就可以开始探究 NcFTP 了。

清单 4 演示如何在常见的 FTP 会话中使用 NcFTP。使用cd命令进入本地系统的 /tmp,然后进入远程系统的 /ftproot/stats 目录。

执行两个 ls命令,然后执行 get命令以获取远程文件 stat_09.txt。这与普通的 FTP 会话非常相似,但是有一些额外的特点。

在最初调用 NcFTP 时,它在您的主目录中创建一个 .ncftp 目录。可以在这里设置 NcFTP 会话,包括任何代理设置。经常修改的文件是 prefs_v3 文件。prefs_v3 文件的含义很明了,不需要解释。查看这个文件之后,可以根据自己的 FTP 会话编辑它。每个条目都采用以下格式:

例如,可以使用以下代码设置连接超时:

还可以使用set命令在 NcFTP 命令行上设置首选项:

可以把常用的 FTP 目标保存为书签,见清单 5。

仔细看看清单 5,会看到建立了到远程主机 tardis 的连接,指定目标目录为 /ftproot/stats。然后终止 FTP 会话。因为这是到远程目录的新的远程连接,NcFTP 会询问是否保存这个连接和密码。我输入 yes 并把保存的会话命名为 tardis_stats。书签保存在 .ncftp 目录中的 bookmarks 文件中。

在下一次要使用这个远程连接时,只需作为ncftp的参数提供书签,见清单 6。

如果不希望每次连接新的远程目标时都看到书签提示,那么在 prefs_v3 文件中把confirm-close的值设置为 no。

或者在 NcFTP 命令行上输入以下命令:

随着时间的推移,bookmarks 文件毫无疑问会变得相当大,可能需要清理。可以使用 NcFTP 实用程序 ncftpbookmarks 编辑这个文件,它提供菜单型界面,但是不太直观。我建议使用 vi根据需要编辑 bookmarks 文件。

在传输大文件或者网络很堵塞的情况下,有时候不可避免地会出现 FTP 失败,文件只传输了一部分。对于 FTP 来说,这通常意味着要重新提交作业并覆盖原来的传输。但是,可以使用 NcFTP 通过追加或覆盖来继续会话。如果上传或下载的文件已经存在,但是文件大小不同,NcFTP 会自动地尝试从中断的地方继续会话,并不显示提示。如果希望 NcFTP 显示提示,让您选择应该执行的操作,那么把 auto-resume 首选项设置为 no:

清单 7 显示在设置了auto-resume=no 的情况下 FTP 传输失败之后可以执行的操作。注意,NcFTP 探测到文件大小不一样并提示选择操作。在这个示例中,我输入Resume (R)以继续传输。

如果试图传输一个文件,但是它在本地端和远程端有相同的大小和文件名,NcFTP 会发出以下消息:

如果相应的 FTP 服务器支持重命名功能,可以在传输之后改变上传或下载的文件的名称。使用-z选项进行文件重命名。基本格式是:

可以使用以下命令从远程服务器获取文件 stat_jan 并改名为 stat_jan_rs6.txt:

注意,在这个示例中生成了传输的状态行。它指出传输将花费的大致时间。任何传输都会生成状态行,无论是put还是get命令。在使用 ncftpput 和 ncftpget 时也会生成相似的状态行。

尽管当您在键盘前时使用 NcFTP 很方便,但是如果希望执行非交互式命令,就不太方便了,尤其是在需要通过脚本执行 FTP 会话时。但是,实用程序 ncftpls、ncftpput 和 ncftpget 提供这个任务所需的工具。


使用命令行

三个客户端实用程序 ncftpls、ncftpget 和 ncftpput 毫无疑问比 NcFTP 更常用。当需要通过批处理或脚本执行特殊传输时,这些实用程序非常有用。在使用这些实用程序时,不能使用书签。

ncftpls 的基本格式是:

可以使用 ncftpls 连接远程服务器并获取命令行 ls清单。这个实用程序有两个优点:

  • 可以在执行 FTP 会话之前运行这个实用程序,从而在执行上传或下载之前确认远程主机 FTP 服务正在运行。

  • 还可以检查远程主机上的文件或目录是否存在。

ls pre_stop.sh命令检查 pre_stop.sh 文件是否存在。

如果在脚本中使用 ncftpls,可能需要捕捉输出。这是因为只要连接成功,最后的退出状态码就是零。即使找不到文件,它也不会向标准输出返回错误。检查命令返回值的方法之一是使用替换,见清单 8:

还可以列出完整的目录清单。在下一个示例中,连接远程主机 tardis 并列出远程目录 <HOME>/gems 的目录清单。注意 -1标志。这确保只获取文件名,不获取文件的其他属性:

在网络繁忙的情况下,在建立连接之前会花费一段时间。为了确保 FTP 会话不会在建立连接之前超时,使用 redial (r) 和 timeout (t) 值让 NcFTP 重新尝试连接:

r 是重试的次数。

t 是以秒为单位的超时时间。

清单 9 所示的部分脚本示例连接远程主机 tardis。尝试连接(重新拨号)两次,在每次重新拨号时尝试连接 10 秒,然后超时。如果无法连接,那么脚本退出或者继续处理脚本的其余部分。

ncftpput 用于把文件或目录传输到远程主机上。ncftpput 的基本格式是:

下面的示例把本地文件 /home/dxtans/spec_ja 传输到远程主机 tardis 上的远程目录 /ftproot/stats。

ncftpget 用于从远程主机获取文件或目录。ncftpget 的基本格式是:

下面的示例从远程主机 tardis 上的远程目录 /ftproot/stats/pebs 获取远程文件 peb_aud.rtf,把它放在本地目录 /tmp 中。

注意,在前面的示例中使用 * 通配符下载与 peb_aud* 匹配的任何文件。

还可以使用 ncftpput 和 ncftpget 执行递归传输。但是,并非所有 FTP 服务器都支持递归传输,尤其是公共 FTP 服务器。要想执行递归传输,需要提供-R选项。清单 10 把远程主机 tardis 的远程目录 /ftproot/stats/pebs 递归传输到本地目录 /home/dxtans/hold。如果这个本地目录不存在,就创建它:

有时候您可能希望关闭状态行;为此,需要使用选项。例如


批处理

可以使用 ncftpbatch 命令在队列中运行许多 FTP 作业或者提交许多作业。它的基本工作过程如下:

  1. 使用 ncftpput 或 ncftpget 命令提交 FTP 命令。

  2. 指定 -bb选项在后台运行作业。然后把这些作业发送给 spooler。

  3. 使用 ncftpbatch 处理 spooler 中的 FTP 作业。

使用以下命令在后台启动批处理:

使用以下命令查看 spooler 中的作业:

所有与批处理相关的作业放在 spool 目录中:

这个目录中有一个 spool 日志文件,还包含每个批处理 FTP 作业的文件。

清单 11 提交当前目录中扩展名为 .rtf 的所有文件。使用 ncftpput 命令把这些文件发送到远程服务器 tardis 上的远程目录 /ftproot/process:

使用以下命令在后台启动 ncftpbatch 以处理作业:

使用以下命令查看要处理的作业:

ncftpbatch 处理作业,作业完成之后 spooler 就空了。可以通过检查日志文件 .ncftp/spool/log 了解 spooler 的活动和作业。

把许多 FTP 作业提交给队列可以节省时间,因为不需要等待前一个作业完成之后再提交下一个作业。但是请注意,如果在成批提交的 NcFTP 命令中有任何问题,比如身份验证失败或错误的get/put命令,作业就会停止处理。最简便的解决方法是使用rm 命令删除 .nctp/spoolwith 目录中的作业,然后重新提交它们。


密码

在本文中,我在命令行上提供了密码;在一般操作中不会这么做。输入密码的方式通常有两种。可以在本地端的命令行上只指定用户名,等待远程主机提示输入密码。也可以把密码放在一个文件中,然后把它提供给变量。对于 NcFTP 实用程序 ncftpput 和 ncftpget,可以使用密码身份验证文件。使用 -f <authentication file> 选项调用这个文件。身份验证文件应该只能由用户自己读取。这个文件的格式是:

例如,示例文件可以包含以下身份验证信息:

以下示例通过 ncftpput 使用这个文件连接远程主机。它把本地文件 /home/dxtans/chatter.log 传输到远程目录 /ftproot/gen:

在以前的一个版本和另一种操作系统上,我发现必须在命令行上指定远程主机,如下所示:

如果远程主机支持匿名 FTP 登录,就可以把密码(常常是您的电子邮件地址)放在首选项文件中。要想让 NcFTP 解析匿名用户的密码,可以在 NcFTP 命令行中设置 anon-password值,比如:


调试

当在远程主机上遇到身份验证或文件位置问题时,就应该调试 FTP 会话。使用 -d <logfile> 选项,NcFTP 就会把调试信息发送到日志文件。在下面的示例中,调试文件称为 output.log,在当前工作目录中生成。这个示例要把本地文件 /home/dxtans/gen_rep 传输到远程机器上的 /ftproot 目录。如果需要诊断任何问题,可以通过查看日志文件了解完整的事务处理过程。请注意,调试文件中提供的信息非常详细,正是解决任何问题所需要的。

来源:亦有软件
软件产品Eysln Software Product
亦有公告Eysln Notice
案例中心Eysln Template
知识库Eysln Knowledge Base
工具箱Eysln Toolkit Online