设为首页 收藏本站
查看: 1060|回复: 0

[经验分享] NcFTP:灵活的 FTP 客户端

[复制链接]

尚未签到

发表于 2015-11-6 08:23:49 | 显示全部楼层 |阅读模式
NcFTP:灵活的 FTP 客户端
  NcFTP 既可以作为 FTP 服务器,也可以作为 FTP 客户端。但是,这两者都称为 NcFTP。在本文中,我只使用 NcFTP
客户端。因此,在我提到 NcFTP 时只是指 NcFTP
客户端。另外,客户端附带各种命令行实用程序,这让客户端非常便于在命令行上或以批处理模式使用。
  NcFTP 概述

  NcFTP 实用程序让系统管理员能够利用 FTP 的灵活性和性能。NcFTP 可以与当前的默认 AIX® FTP
服务一起使用,目前没有发现任何问题。NcFTP 能够继续失败的传输和重新尝试,在通过有网络瓶颈的网络传输大型文件时这非常有用。NcFTP
可以输出状态行(与 SCP 很相似),显示传输的进度。但是,NcFTP 不支持任何加密,这对于某些环境可能是问题。
  非常常见的安装形式是运行当前的 AIX FTP 服务器,使用 NcFTP 作为客户端。本文主要关注这种安装类型。
  NcFTP 客户端附带以下实用程序:
  
表 1. NcFTP 实用程序


ncftp

FTP 界面
ncftpget
FTP get
命令行
ncftpput
FTP
put
命令行
ncftpbatch
批命令行
ncftpspooler
FTP
的 Spooler
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 连接问题,那么按以下列表尝试排除故障:


  • 确认远程 FTP 服务正在运行。
  • 确认远程 FTP 端口没有阻塞。
  • 确认 tcp 包装器没有拒绝连接。
  • 确认您的用户名没有在 /etc/ftpusers 中。
  • 确认在 /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 目录。
  执行两个 ls
命令,然后执行 get
命令以获取远程文件
stat_09.txt。这与普通的 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 时,它在您的主目录中创建一个 .ncftp 目录。可以在这里设置 NcFTP
会话,包括任何代理设置。经常修改的文件是 prefs_v3 文件。prefs_v3
文件的含义很明了,不需要解释。查看这个文件之后,可以根据自己的 FTP 会话编辑它。每个条目都采用以下格式:


key=value

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


connect-timeout=20

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


ncftp/> set connect-time 20

  
  可以把常用的 FTP 目标保存为书签,见清单 5。
  仔细看看清单 5,会看到建立了到远程主机 tardis 的连接,指定目标目录为 /ftproot/stats。然后终止 FTP
会话。因为这是到远程目录的新的远程连接,NcFTP 会询问是否保存这个连接和密码。我输入 yes 并把保存的会话命名为
tardis_stats。书签保存在 .ncftp 目录中的 bookmarks 文件中。
  
清单 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 &quot;tardis&quot;: tardis_stats
You logged into this site using a password.
Would you like to save the password with this bookmark?
Save? [no] yes
Bookmark &quot;tardis_stats&quot; 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 >

  
  随着时间的推移,bookmarks 文件毫无疑问会变得相当大,可能需要清理。可以使用 NcFTP 实用程序
ncftpbookmarks 编辑这个文件,它提供菜单型界面,但是不太直观。我建议使用 vi
根据需要编辑
bookmarks 文件。
  在传输大文件或者网络很堵塞的情况下,有时候不可避免地会出现 FTP 失败,文件只传输了一部分。对于 FTP
来说,这通常意味着要重新提交作业并覆盖原来的传输。但是,可以使用 NcFTP
通过追加或覆盖来继续会话。如果上传或下载的文件已经存在,但是文件大小不同,NcFTP 会自动地尝试从中断的地方继续会话,并不显示提示。如果希望
NcFTP 显示提示,让您选择应该执行的操作,那么把 auto-resume 首选项设置为 no:


auto-resume=no

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




ncftp /ftproot/stats > put stat_jan

The remote file &quot;stat_jan&quot; 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

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


ncftp /ftproot/stats > put stat_jan

The remote file &quot;stat_jan&quot; 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
会话时。但是,实用程序 ncftpls、ncftpput 和 ncftpget 提供这个任务所需的工具。


回页首

  使用命令行

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


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

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


  • 可以在执行 FTP 会话之前运行这个实用程序,从而在执行上传或下载之前确认远程主机 FTP 服务正在运行。
  • 还可以检查远程主机上的文件或目录是否存在。
  在下面的示例中,连接远程主机 tardis 并使用 /./ 访问用户的主目录。然后,执行 ls pre_stop.sh
命令检查 pre_stop.sh 文件是否存在。


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

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



myfile=`ncftpls -u dxtans -p master &quot;-x ls pre_stop.sh&quot; ftp://tardis/./
if [ &quot;$myfile&quot; != &quot;&quot; ]
then
echo &quot;file present&quot;
# do processing here
else
echo &quot;no file present&quot;
exit 1
fi

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


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

  
  在网络繁忙的情况下,在建立连接之前会花费一段时间。为了确保 FTP 会话不会在建立连接之前超时,使用 redial (r) 和
timeout (t) 值让 NcFTP 重新尝试连接:
  r 是重试的次数。
  t 是以秒为单位的超时时间。
  清单 9 所示的部分脚本示例连接远程主机 tardis。尝试连接(重新拨号)两次,在每次重新拨号时尝试连接 10
秒,然后超时。如果无法连接,那么脚本退出或者继续处理脚本的其余部分。
  
清单 9. 重新尝试连接



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

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


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

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


$ 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>

  
  下面的示例从远程主机 tardis 上的远程目录 /ftproot/stats/pebs 获取远程文件
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 把远程主机 tardis 的远程目录
/ftproot/stats/pebs 递归传输到本地目录 /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 作业或者提交许多作业。它的基本工作过程如下:


  • 使用 ncftpput 或 ncftpget 命令提交 FTP 命令。
  • 指定 -bb
    选项在后台运行作业。然后把这些作业发送给 spooler。
  • 使用 ncftpbatch 处理 spooler 中的 FTP 作业。
  使用以下命令在后台启动批处理:


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


ncftpbatch -l

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


  
.ncftp/spool

  
  这个目录中有一个 spool 日志文件,还包含每个批处理 FTP 作业的文件。
  清单 11 提交当前目录中扩展名为 .rtf 的所有文件。使用 ncftpput 命令把这些文件发送到远程服务器 tardis
上的远程目录 /ftproot/process:
  
清单 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

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


回页首

  密码

  在本文中,我在命令行上提供了密码;在一般操作中不会这么做。输入密码的方式通常有两种。可以在本地端的命令行上只指定用户名,等待远程主机
提示输入密码。也可以把密码放在一个文件中,然后把它提供给变量。对于 NcFTP 实用程序 ncftpput 和
ncftpget,可以使用密码身份验证文件。使用 -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
解析匿名用户的密码,可以在 NcFTP 命令行中设置 anon-password
值,比如:


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

  
  在 ncftpget 和 ncftpls 命令中也可以使用调试选项。


回页首

  结束语

  NcFTP 客户端是一种高效的 FTP 传输方法。可以使用 NcFTP 从命令行执行命令,这对于脚本编程非常理想,NcFTP
还可以继续失败的 FTP 传输并提供批处理机制。本文介绍了 NcFTP 客户端如何帮助实现特殊的 FTP
传输,解释了如何在脚本中使用客户端实用程序。
   
版权声明:本文为博主原创文章,未经博主允许不得转载。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-135624-1-1.html 上篇帖子: web、ftp上传区别 下篇帖子: 通过外网端口映射访问FTP
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表