当前位置: 首页 > 工具软件 > NcFTP > 使用案例 >

ncftp_NcFTP:灵活的FTP客户端

苏培
2023-12-01

NcFTP是作为FTP服务器或FTP客户端提供的产品。 但是,这两个实用程序均称为NcFTP。 在本文中,我仅使用NcFTP客户端。 因此,当我提到NcFTP时,我指的只是NcFTP客户端。 此外,客户端附带了各种命令行实用程序,这使客户端对于在命令行或批处理模式下使用非常有吸引力。

NcFTP概述

NcFTP实用程序使系统管理员可以提供FTP灵活性和性能。 NcFTP可以与当前的AIX®默认FTP服务一起使用,没有已知问题。 NcFTP提供了恢复失败的传输和重试的功能,这在跨网络或遭受瓶颈的网络中传输大文件时非常有用。 NcFTP可以输出状态栏,详细说明传输进度(类似于SCP)。 但是,NcFTP不支持任何加密,这对于某些安装可能是一个问题。

在使用NcFTP作为临时客户端的同时,运行当前的AIX FTP服务器是非常常见的,本文将重点介绍这种类型的安装。

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

表1. NcFTP实用程序
ncftp FTP主界面
ncftpget FTP get命令行
ncftpput FTP put命令行
ncftpbatch 批处理命令行
ncftpspooler FTP假脱机程序
ncftpls 远程ls命令行检索

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

安装NcFTP

的NcFTP可以从的NcFTP主页下载(请参阅相关信息中的链接)。

下载客户端之后,提取二进制文件,如清单1所示:

清单1.提取二进制文件
# gunzip /tmp/ncftp-3.2.3-aix5.3.0-export.tar.gz # cd /opt # tar –xvf /tmp/ncftp-3.2.3-aix5.3.0-export.tar

检查以确保NcFTP已启动,如清单2所示。

清单2.启动NcFTP
$ ncftp -v $ Usage: ncftp [flags] [<host> | <directory URL to browse>] Flags: -u XX Use username XX instead of anonymous. -p XX Use password XX with the username. -P XX Use port number XX instead of the default FTP service port (21). -j XX Use account XX with the username (rarely needed). -F Dump a sample $HOME/.ncftp/firewall prefs file to stdout and exit. Program version: NcFTP 3.2.3/433 Jul 28 2009, 10:02 AM Library version: LibNcFTP 3.2.3 (July 23, 2009) Build system: AIX Voltigeur 3 5 000D3A9F4C00

根据要访问的远程FTP主机的类型,您可能必须在主机名前加上ftp://前缀,例如:

ftp://<hostname>

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

如果遇到FTP连接问题,请使用此清单尝试解决问题。

  1. 检查远程FTP服务是否正在运行。
  2. 检查远程FTP端口是否未被阻止。
  3. 检查以确保tcp包装程序未拒绝连接。
  4. 检查您的用户名不在/ etc / ftpusers中。
  5. 检查是否在/etc/ftpaccess.ctl中拒绝了主机或用户。

交互使用NcFTP

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

清单3.连接到远程服务器
$ ncftp -u dxtans -p master tardis NcFTP 3.2.3 (Jul 28, 2009) by Mike Gleason (http://www.NcFTP.com/contact/). Connecting to 192.168.4.10... Logging in... Password Ok, User logged in Logged in to tardis. Current remote directory is /. ncftp/>

如果一切看起来不错,让我们探索NcFTP。

清单4演示了如何在公共FTP会话中使用NcFTP。 cd命令用于在本地更改为/ tmp,然后在远程更改为/ ftproot / stats目录。

在发出get命令以检索远程文件stat_09.txt之前,要执行几个ls命令。 它与普通的FTP会话非常相似,但是您会看到,它还有其他功能。

清单4. Ftp_connect
$ ncftp -u dxtans -p master tardis NcFTP 3.2.3 (Jul 28, 2009) by Mike Gleason (http://www.NcFTP.com/contact/). Connecting to 192.168.4.10... Logging in... Password Ok, User logged in Logged in to tardis. ncftp / > lcd /tmp ncftp / > cd /ftproot/stats Change directory ok ncftp /ftproot/stats > ls desktop.ini pebs/ spec_ja stat_09.txt stat_jan.rtf ncftp /ftproot/stats > ls -l -------rw- 48 Jan 18 13:58 desktop.ini d------rwx 0 Jan 23 02:36 pebs -------rw- 564 Jan 23 08:17 spec_ja -------rw- 61 Jan 18 13:53 stat_09.txt -------rw- 18927 Mar 23 2004 stat_jan.rtf ncftp /ftproot/stats > get stat_09.txt

最初调用NcFTP时,它将在您的HOME目录中创建一个.ncftp目录。 在这里,您可以个性化您的NcFTP会话,包括任何代理设置。 最修改的文件将是prefs_v3文件。 prefs_v3文件的内容非常不言自明。 查看后,您可以编辑文件以使其适合您的个人FTP会话。 每个条目具有以下格式:

key=value

例如,要设置连接超时,我可以使用:

connect-timeout=20

偏好也可以在的NcFTP命令行上设置,以及,使用该set命令:

ncftp/> set connect-time 20

常见的FTP目标可以保存为书签,如清单5所示。

更仔细地查看清单5,您可以看到与远程主机tardis建立了连接,将目标目录指定为/ ftproot / stats。 FTP会话然后终止。 由于这是到远程目录的新远程连接,因此NcFTP询问您是否要保存此连接和密码。 我输入是,然后调用保存的会话tardis_stats。 书签条目将保存到.ncftp目录中的书签文件中。

清单5.书签
$ ncftp -u dxtans -p master tardis /ftproot/stats NcFTP 3.2.3 (Jul 28, 2009) by Mike Gleason (http://www.NcFTP.com/contact/). Connecting to 192.168.4.10... Logging in... Password Ok, User logged in Logged in to tardis. Current remote directory is /ftproot/stats. ncftp /ftproot/stats > quit You have not saved a bookmark for this site. Would you like to save a bookmark to: ftp://dxtans:PASSWORD@tardis/ftproot/stats/ Save? (yes/no) yes Enter a name for this bookmark, or hit enter for "tardis": tardis_stats You logged into this site using a password. Would you like to save the password with this bookmark? Save? [no] yes Bookmark "tardis_stats" saved

下次我想使用此远程连接时,只需提供书签作为ncftp参数的一部分,如清单6所示。

如果您不想每次访问新的远程目标时都看到书签提示,请在prefs_v3文件中将confirm-close值设置为no:

confirm-close=no

或者,从NcFTP命令行中输入以下命令:

ncftp/>set confirm-close no
清单6.加载书签
$ ncftp tardis_stats NcFTP 3.2.3 (Jul 28, 2009) by Mike Gleason (http://www.NcFTP.com/contact/). Connecting to 192.168.4.10... Logging in... Password Ok, User logged in Logged in to tardis. Change directory ok Current remote directory is /ftproot/stats. ncftp /ftproot/stats >

随着时间的流逝,您无疑会获得一个填充良好的书签文件,这可能需要做一些整理工作。 要编辑此文件,可以使用NcFTP实用程序ncftpbookmarks,它是菜单类型的界面,但不是很直观。 我建议仅使用vi编辑书签文件,然后根据需要进行更改。

在传输大文件或通过断电的网络传输文件时,不可避免的是,在某些时候您会收到失败的FTP,并且部分传输了文件。 通常对于FTP,这意味着重新提交作业并覆盖原始传输。 但是,使用NcFTP,您可以通过追加或覆盖来恢复会话。 上载或下载已存在但具有不同文件大小的文件时,NcFTP将尝试并在其停止的地方恢复会话,而不会提示。 如果要提示您有关NcFTP应该采取的操作,请将自动恢复首选项更改为no:

auto-resume=no

清单7显示了当您执行auto-resume=no时,在部分FTP传输失败之后可以采取的措施。 请注意,NcFTP已检测到文件大小不同,并提示您采取什么措施。 在此示例中,我键入Resume (R)以继续传输。

清单7.简历转移
ncftp /ftproot/stats > put stat_jan The remote file "stat_jan" already exists. Local: 102400000 bytes, dated Tue Jan 19 19:19:19 GMT 2010. Remote: 57347024 bytes, dated Tue Jan 19 19:24:28 GMT 2010. [O]verwrite? [R]esume? [A]ppend to? [S]kip? [N]ew Name? [O!]verwrite all? [R!]esume all? [S!]kip all? [C]ancel > R stat_jan: 97.66 MB 938.15 kB/s

如果您尝试通过FTP传输文件,并且该文件在本地和远程端具有相同的大小和文件名,则NcFTP将发出以下消息:

ncftp /ftproot/stats > put stat_jan The remote file "stat_jan" already exists. Local: 102400000 bytes, dated Tue Jan 19 19:19:19 GMT 2010. (Files are identical, skipped)

传输后,只要相应的FTP服务器支持重命名功能,就可以重命名上载或下载的文件。 要重命名文件,请使用-z选项。 基本格式为:

<get / put> -z <file to transfer> <new_filename>

要从远程服务器提取文件stat_jan并将其重命名为stat_jan_rs6.txt,可以使用:

ncftp /ftproot >get -z stat_jan stat_jan_rs6.txt stat_jan_rs6.txt: ETA: 2:11 19.77/ 97.66 MB 610.62 kB/s

注意,在此示例中,将生成传输的状态行。 这样一来,您大约可以知道传输需要多长时间。 将为任何传输生成状态行,无论是put命令还是get命令。 使用ncftpput和ncftpget时,会产生类似的状态行。

当您在键盘上使用NcFTP时很方便,但是当您要发出非交互式单线时,尤其是在需要编写FTP会话脚本时,使用NcFTP可能没有用。 但是,实用程序ncftpls,ncftpput和ncftpget提供了用于此作业的必要工具。

使用命令行

毫无疑问,三个客户端ncftpls,ncftpget和ncftpput的使用量将超过NcFTP。 当您需要对临时传输进行批处理或编写脚本时,这些实用程序非常有用。 使用这些实用程序时,不能使用书签。

ncftpls的基本格式为:

ncftpls <authentication details /options> <-x ls flags> <ftp://remote host>

使用ncftpls,可以连接到远程服务器并提取命令行ls列表。 该实用程序有两个优点:

  • 您可以在FTP会话之前执行此实用程序,以确保在执行上载或下载之前,远程主机FTP服务正在运行。
  • 您还可以测试远程主机上的文件或目录是否存在。

在以下示例中,使用/./连接到远程主机tardis和用户HOME目录。 然后发出命令ls pre_stop.sh以查看文件pre_stop.sh是否存在。

$ ncftpls -u dxtans -p master "-x ls pre_stop.sh" ftp://tardis/./ -rwxrwxrwx 1 apps staff 14 Aug 25 08:51 pre_stop.sh

如果在脚本中使用ncftpls,则可能需要捕获输出。 这是因为只要连接成功,最后的退出状态将为零。 如果找不到该文件,它将不会向标准输出返回错误。 测试命令返回的一种方法是使用替换,如清单8所示:

清单8.使用替代
myfile=`ncftpls -u dxtans -p master "-x ls pre_stop.sh" ftp://tardis/./ if [ "$myfile" != "" ] then echo "file present" # do processing here else echo "no file present" exit 1 fi

完整目录列表也可以执行。 在下一个示例中,建立到远程主机tardis的连接,并在远程目录< HOME> / gems上执行目录列表。 注意使用-1标志。 这样可以确保您仅获得文件名,而没有文件名的其他属性:

$ ncftpls -u dxtans -p master -1 ftp://tardis/./gems/ shrm.sh lgett.sh myfile.txt

处理繁忙的网络时,可能需要一段时间才能建立连接。 为确保您的FTP会话在此之前不会超时,请使NcFTP使用重拨(r)和超时(t)值重试连接,其中:

r是< 尝试次数>

t是< timeout in seconds>

清单9显示了一个部分脚本示例,其中与远程主机tardis建立了连接。 尝试两次连接(重拨),并且在每次重拨内尝试连接10秒钟,然后再超时。 如果连接失败,则脚本将退出或继续处理脚本的其余部分。

清单9.连接重试
log=mylog ncftpls –r2 -t10 -u dxtans -p master ftp://tardis/./ if [ $? -ne 0 ] then echo "Could not connect to FTP server" >>$log exit 1 else echo "NCFTP connect test OK" >>$log fi # carry on ncftp commands here..

Ncftpput用于将文件或目录放置到远程主机上。 ncftpput的基本格式为:

ncftpput <authentication details/options> <remote host> <remote direc> <local files>

以下示例将本地文件/ home / dxtans / spec_ja放在远程目录/ ftproot / stats中的远程主机tardis上。

$ ncftpput -u dxtans -p master tardis /ftproot/stats /home/dxtans/spec_ ja/home/dxtans/spec_ja: 564.00 B 3.26 kB/s

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

ncftpget <authentication details/options> <remote host> <local files> <remote direc>

以下示例从位于远程目录/ ftproot / stats / pebs / peb_aud中的远程主机tardis获取远程文件peb_aud.rtf,并将其放置在本地目录/ tmp中。

ncftpget -u dxtans -p master tardis /tmp /ftproot/stats/pebs/peb_aud* /home/dxtans/holding/peb_aud.rtf: 18.48 kB 102.92 kB/s

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

使用ncftpput和ncftpget,您还可以进行递归传输。 但是,并非所有的FTP服务器都支持此功能,尤其是公共FTP服务器。 要使用递归传输,请提供-R选项。 清单10显示了从远程目录/ ftproot / stats / pebs中的远程主机tardis到本地目录/ home / dxtans / hold中的递归传输。 如果本地目录保留不存在,则会创建它:

清单10.递归传输
$ ncftpget -R -u dxtans -p master tardis /home/dxtans/hold/ /ftproot/stats/pebs /home/dxtans/hold/pebs/peb_post2.rtf: 18.48 kB 101.53 kB/s /home/dxtans/hold/pebs/peb_pre.txt: 0.00 B 0.00 B/s /home/dxtans/hold/pebs/peb_runin.rtf: 18.48 kB 101.09 kB/s /home/dxtans/hold/pebs/peb_runoff.rtf: 18.48 kB 103.80 kB/s /home/dxtans/hold/pebs/pre_post.txt: 0.00 B 0.00 B/s /home/dxtans/hold/pebs/mth/prepost.txt: 23.01 B 108.00 kB/s /home/dxtans/hold/pebs/mth/pre_run2.txt: 22.01 B 106.00 kB/s

您可能需要不时关闭状态栏。 为此,请使用-V选项,并将其与其他选项一起提供。 例如:

$ ncftpget -V -R -u dxtans -p master tardis /home/dxtans/hold/ /ftproot/stats/pebs

批量处理

您可以使用ncftpbatch命令创建许多FTP作业以在队列中运行或提交许多作业。 简而言之,它的工作方式如下:

  1. 使用ncftpput或ncftpget命令提交FTP命令。
  2. 指定-bb选项以在后台运行作业。 然后将这些作业发送到后台处理程序。
  3. 使用Ncftpbatch处理后台处理程序中的FTP作业。

要在后台启动批处理,请使用:

ncftpbatch -d

要查看后台处理程序中的作业,请使用:

ncftpbatch -l

所有与批处理相关的作业都进入假脱机目录:

.ncftp/spool

在该目录中是假脱机日志文件。 该目录中还包含每个假脱机FTP作业的文件。

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

清单11.提交.rtf文件
$ ncftpput -bb -u dxtans -p master tardis /ftproot/process *.rtf Spooled; sending remotely as /ftproot/process/peb_post2.rtf. Spooled; sending remotely as /ftproot/process/peb_pre.rtf. Spooled; sending remotely as /ftproot/process/stat_jan.rtf.

要在后台启动ncftpbatch以处理作业,请使用:

$ ncftpbatch –d

要查看后台处理程序以查看正在处理哪些作业,请使用:

$ ncftpbatch -l ---Scheduled-For-----Host----------------------------Command-------------------- 2010-01-23 21:06 tardis PUT stat_jan.rtf

作业将被处理,并且在作业完成后,后台处理程序将为空。 要检查后台处理程序和作业的活动,请检查日志文件.ncftp / spool / log。

将许多FTP作业提交到队列的过程确实节省了时间,因为您不必在提交下一个作业之前等待上一个作业完成。 但是,请注意,如果您在NcFTP批量提交的命令中遇到任何问题,例如身份验证或错误的get/put命令,这些作业将就在那儿。 阻力最小的方法是使用rm命令仅删除.nctp / spoolwith目录中的作业,然后重新提交。

密码

在本文中,我在命令行上提供了密码。 在正常操作中,您不会这样做。 通常,您可以通过两种方式输入密码。 通过在本地端的命令行上仅指定用户名,可以等待提示您在远程主机上输入密码。 或者,您可以将密码放在文件中并将其来源到变量中。 对于NcFTP实用程序ncftpput和ncftpget,可以使用密码验证文件。 这是通过使用-f <authentication file>来调用的-f <authentication file> 选项。 身份验证文件应仅由用户可读。 该文件的格式为:

host < hostname> user <user name> pass <user password>

一个示例文件可能包含以下身份验证详细信息:

$ cat /home/dxtans/myncftp host tardis user dxtans pass master

要使用该文件连接到远程主机,可以使用以下示例发出ncftpput。 该代码会将本地文件/home/dxtans/chatter.log放入远程目录/ ftproot / gen中:

$ ncftpput -f /home/dxtans/myncftp /ftproot/gen /home/dxtans/chatter.log

在早期版本和不同的操作系统上,我发现您可能必须在命令行上指定远程主机,如下所示:

$ ncftpput -f /home/dxtans/myncftp tardis /ftproot/gen /home/dxtans/chatter.log

如果远程主机支持匿名FTP登录,则可以在首选项文件中保留密码(通常是您的电子邮件地址)。 要将NcFTP设置为解析匿名用户的密码,可以通过设置anon-password值来使用NcFTP命令行,例如:

ncftp> set anon-password david.tansley@btinternet.com

或者,您可以直接编辑prefs_v3文件:

anon-password=david.tansley@btinternet.com

要以匿名用户身份连接到远程主机tardis,可以使用:

$ ncftp -u anonymous tardis NcFTP 3.2.3 (Jul 28, 2009) by Mike Gleason (http://www.NcFTP.com/contact/). Connecting to 192.168.4.10... Logging in... Password Ok, User logged in Logged in to tardis

调试

处理远程主机上的身份验证或文件放置问题时,调试FTP会话是一个好习惯。 使用-d <logfile> 选项,NcFTP会将调试信息发送到该文件的日志文件。 在以下示例中,调试文件名为output.log,该文件在当前工作目录中创建。 本地文件/ home / dxtans / gen_rep被传输到/ ftproot目录中的远程计算机上。 如果需要诊断任何问题,可以通过查看文件的日志文件来查看完整的事务处理过程。 请注意,调试文件中提供的信息非常详细详尽,如果您要解决任何问题,这就是您想要的。

$ ncftpput -d output.log -u dxtans -p master tardis /ftproot /home/dxtans/gen_prep /home/dxtans/gen_prep: 573.00 B 6.71 kB/s

debug选项也可以与ncftpget和ncftpls一起使用。

结论

NcFTP客户端是FTP的一种有效方法。 使用NcFTP,您可以从命令行运行命令,这使其非常适合编写脚本,并且NcFTP还可以恢复失败的FTP传输,并提供批处理功能。 本文介绍了NcFTP客户端在临时FTP传输中如何非常有用,并说明了如何在脚本中使用客户端实用程序


翻译自: https://www.ibm.com/developerworks/aix/library/au-ncftp_flex/index.html

 类似资料: