自动传档不用愁

Auto-FTP&Mirror的介绍与使用

使用FTP传档案虽不难,但若老是得要您亲自手动来传,
这不仅累人而已也更糟蹋了Linux这多人多工作业系统!
本文便是Auto-ftp和Mirror这二种档案传的输应用,
希望藉由cron作业方式让您的传档作业能达到自动化。

林鸿璋

    各位亲爱的读者在使用Linux时,是否时常必须固定到某些FTP site传
  回一些档案,或是公司内部分支机构必须定时将某些file传回总公司以便处
  理,这时如果您还固定用人工手动作ftp档案传输的话,那麽您就落伍了,
  平平白白浪费了Linux这多人多工的作业系统所赋予您的PC强大的功能了。

    本文要介绍的是除了mail-ftp之外的两个应用:Auto-ftp和Mirror这二
  种档案传输应用,并利用cron将之自动化的作业方式。希望经由本文的介绍
  ,能够让您的作业尽量自动化,减少人工的介入并尽量发挥Linux或unix的
  多工特性。

  版本说明

    1.本文使用Slackware Linux 2.1.0作范例,若您使用的是SunOS,IBM
  AIX等vendor's Unix 的话,Auto-ftp部份应可正常工作(或只需作少许修
  改),Mirror部份则须先安装Perl-4.036。

    2.Perl最新版本为Perl-5.00 Beta,Mirror使用时会有错误讯息,笔者
  认为应该是前後版本相容性的问题。笔者强烈建议您使用Perl-4.036以维持
  正常。Perl-5.00和Perl-4.036均可自NCTUCCCA.NCTU.edu.tw FTP server
  下的/UNIX/gnu目录取得。

  Auto-ftp传输档案

    ftp是TCP/IP协定的叁大主要应用—telnet、ftp、email之一,平时在
  unix和unix系统之间主要的档案传输,就以ftp使用得最普遍与频繁,譬如
  说,我要将Linux 1.1.6x的patch file,自NCTUCCCA.NCTU.edu.tw传回我
  的Linux主机的话,那麽我就可以用Anonymous ftp经由下列作法来达成这
  个目的。(编按:请参考本刊光碟片\AUTHOR\FTP\FTP1.txt)

    基本的Anonymous ftp操作大抵不脱此操作过程。但若您是某大企业分
  支机构的人员,每天得把日结资料传回总公司去、或是您在Internet网路上
  ,每周日凌晨3:00在Internet线路较空闲时去国外某大ftp site传回一些定
  期更新的档案的话,您该不会凌晨3:00爬起来传档案吧?

    这时用Auto-ftp加上cron的定时功能,必定能够对您的工作有相当的帮
  助。ftp有个参数-n是可以作ftp auto-login的功能,可是我们一般在用ftp
  时却甚少使用到,下例的shell script即以ftp auto-login来作说明。

    这时执行getpatch:

    getpatch即会将linux-1.1.59.tar.gz与patch6*自NCTUCCCA.NCTU.edu.
  tw这个ftp server的/Operating-Systems/Linux/kernel/v1.1目录传回您所
  在的Site Home directory下的patch目录中。

    相同的,您若要将档案送出,只要将source和target,me,mypass等变
  数作些符合您所在环境条件的修改,并将mget改成mput,即可将档案送出。

    这时再将Auto-ftp和cron定时功能结合,即可作定时的Auto-ftp档案传
  输。


———————————————————————————————————————————

 % cat ./cron_file

 # Minutes Hour Day-    Month Day-       Command

 #              of-           of-

 #              Month         Week

 # 0-59    0-23 1-31    1-12  0-6

 #----------------------------------------------------------------

    10    2      *       *       *       /user1/roylin/getpatch

                                         # 定义每天凌晨2:10执行getpatch

———————————————————————————————————————————

    用crontab指令启动cron_file将cron启动:

    % crontab cron_file

    再使用crontab -l指令来看crontab动作的内容:

    % crontab -l  <-- list crontab的内容

    这时您的Linux将会在您指定的时刻为您自动执行您想作的Auto-ftp功
  能了。

    经由上例的介绍,笔者希望能够让诸位读者了解到:利用Auto-ftp和cron
  定时器的应用来作自动化的档案传输功能;同时也希望经由此例浅显介绍,
  让读者们能够修改此一shell script和crontab以将您的应用需求带入自动
  化的境界。

    看完上面的Auto-ftp功能的介绍後,虽然利用Auto-ftp和cron能够带给
  我们自动传输的好处,但经验丰富的读者可能看到了有些问题存在:

    1.必须先知道档案存在的详细目录和名称。
    2.重覆传输、占用网路频宽、浪费资源。尤其是对国外传输时。
    3.若要传输含有很多层次目录的档案时,该怎麽办?是否必须每一次目
     录都知道,将之先在local site建好次目录架构,再一层层去传每一
     目录中的档案?
    4.被ftp传回的档案是Local所建档的时间,无法忠实反应ftp site的档
     案更新时间。
    5.当有更新档案被传回时,你必须亲自去查阅,无法由Auto-ftp自动告
     知。(除非您再写个script来作)

    亲爱的读者您若不幸刚好碰到这些问题的话,那麽下面所介绍的Mirror
  正是为您解决这些问题的拿手工具了。

  什麽是Mirror

    Mirror是个由Perl(Practical Extraction and Report Language
  )所写的一个Package,它是利用ftp将不同主机间的档案及阶层目录作复制
  的功能。 它在ftp传档之前会比较档案名称的日期和size大小,以避免不必
  要的档案传输所造成网路不必要的traffic。同时亦可设定在传输时作压缩(
  compress or gzip)或切割(split)的动作。

    它最主要是作为ftp Archive维护传输使用,但任何人都可用它来使ftp
  传输大量的档案。

    Mirror程式可在NCTUCCCA.NCTU.edu.tw的/packages/tools/mirror取得
  。Mirror是由英国Lee McLoughlin(lmjm@doc.ic.ac.uk)先生所写,在此
  感谢他提供我们这一好用的程式。我们就先到NCTUCCCA.NCTU.edu.tw抓取
  mirror.tar.gz。(编按:请见光碟片\AUTHOR\FTP\FTP2.txt)Mirror
  是一系列ftp相关程式的一部份,另二支分别是ftpmail和ftpcat,有机会的
  话,笔者将在以後的篇幅作介绍。以下则为Mirror的安装注意事项:

    1.如果安装Mirror是作Archive ftp维护使用,通常须先建一Mirror要
  执行的目录,再修改mirror.defaults以符合你所在主机的设定,通常不开
  放给一般使用者使用。
    2.如果要安装Mirror作为一般使用命令:安装Mirror到一般使用者能够
  存取的lib目录(通常是/usr/local/lib/mirror),并将mirror.pl作symbolic
  link到bin目录,这通常是/usr/local/bin)。
    3.修改mirror.pl档案中的$extra_path和$big_tmp这二个环境变数,并
  且将mirror.pl作symbolic link到bin目录(通常是/usr/local/bin)。
    4.修改mirror.pl档案中的$extra_path和$big_tmp二个环境变数$extra_
  path - mirror使用PATH和$extra_path作为相关程式的搜寻路径。$big_tmp
  则设定压缩档案时的暂存目录

  Mirror的安装步骤与执行

    Mirror内定会使用/usr/local/lib/mirror/mirror.default这一设定档
  。这一设定档主要设定远端主机(remote site)名称或IP Address、资料存
  放目录路径、登录名称、登录密码,本地(local)主机名称或IP Address、
  资料存放目录路径、资料的拥有者权限设定、是否将资料压缩、使用何种压
  缩程式、以及作完Mirror後将mail通知谁等等设定。

    以下的范例我将mirror.default修改,到NCTUCCCA.NCTU.edu.tw去抓取
  所有的Slackware Linux的程式和资料,远端目录在/Operating-Systems/
  Linux/Slackware,并取名为slackware.def。(编按见光碟片\AUTHOR\
  FTP\FTP3.txt)

    Mirror执行时内定会去使用/usr/local/lib/mirror/mirror.default这
  设定档。我以mirror执行刚刚定义的slackware.def抓取Slackware Linux
  来作范例。

    # mirror./slackware.def &

    执行完mirror之後,NCTUCCCA.NCTU.edu.tw 的Slackware Linux已经被
  mirror完完整整的依照我在slackware.def的设定「照」回我所在的主机上
  了。并会发出e-mail通知有那些档案被mirror回来。详细的mirror使用和说
  明,请参阅man mirror或groff-man mirror.man的说明。

  Mirror的定时执行

    将mirror和cron定时功能结合,即可作定时的mirror档案传输。


——————————————————————————————————————————————

% cat ./mirror_cron

# Minutes Hour Day-  Month Day-  Command

#              of-         of-

#              Month       Week

# 0-59    0-23 1-31  1-12  0-6

#------------------------------------------------------------

    10    2      *     *     0  /usr/local/mirror/user1/roylin/slackware.def

# 定义每周日凌晨 2:10 执行 mirror"照回 "slackware

——————————————————————————————————————————————

    使用crontab指令启动mirror_cron将cron启动:

    % crontab mirror_cron

    这时再使用crontab -l指令来看crontab动作的内容:

    % crontab -l <-- list crontab的内容

    这时您的Linux将会在您指定的时刻为您自动执行mirror将Slackware
  Linux每周定时自动更新的功能了。同时能将所有档案的日期真实呈现,更
  可在档案传回时压缩,节省资料的储存空间,最重要的是:mirror不会浪费
  网路频宽去传输相同的档案,这对於和国外传输档案尤甚。

    经由以上的介绍,笔者希望能够让诸位读者了解到:利用Auto-ftp、
  mirror和cron定时器的应用来作自动化的档案传输功能,同时也希望经由
  此例浅显的介绍,读者们能够修改此一shell script、slackware.def和
  crontab,以将您的应用需求带入自动化的境界。

    希望读者们能由此文章获得受益和收获,也期盼诸位先进不吝来函指正
  。笔者十分乐於与各位读者作双向的沟通。小弟的E-Mail Address是:
  roylin@stratus.atm.ncu.edu.tw。我们下回再见。
  (相关档案见光碟片\AUTHOR\FTP子目录)