*********************************************************
    國 立 交 通 大 學 計 算 機 中 心 通 訊 第   78   期
      (中華民國 82 年 5 月)   Page 23 - 25
 *********************************************************
 
           FTP的一個小技巧                計算機中心  王銘欽
 
     對於網路的愛用者而言,FTP真是一個非常方便的工具,只要幾個
 簡單的指令,就可以隨心所欲的讓你將想要的檔案,經由網路從一部主機
 ,傳到另一部主機上。非但如此,因FTP而產生的一項網路新寵─Anonymous
  FTP更是網路愛用者的最愛,無時無刻吸引著成千上萬的使用者。你是被
 Anonymous FTP 所深深吸引的使用者之一嗎?這不重要,重要的是,你在
 使用FTP 時曾遇到過傳輸的檔案太大,或網路太忙而使你必須枯坐在終端
 機前等待的情況嗎?
 
     遇到上面的情況,或許你是在 Console 上多開幾個 Window、或使用
 NCSA的時多開幾個Sessions而免去枯坐等待的困擾,但這並非根本的解決
 之道,因為你終究還是得坐在Console 或PC前,等待這些FTP 的工作完成
 ,如何是好呢?
 
     現在提供一個方法,使你的FTP 可以在Background執行。讓你不必為
 一個未完成的FTP ,停留在電腦前面。熟悉UNIX的人都知道在指令之後加
 一個& ,即表示須在Background執行該指令,但FTP 是一個交談式的工具
 ,我們必需輸入指令以到達我們所要的目錄,再取回我們想要的檔案,這
 些過程似乎無法在Background下動作,這樣如何可以在Background下執行
  FTP 呢? 很簡單,如果我們把過程所需的指令事先寫在一個檔案,再讓
 ftp 自動去讀取這些指令並執行,就不就可以省去輸入指令並等待的麻煩
 ,進而可以讓FTP 到background去執行了嗎?接下來,就一步步說明如何
 來寫這樣一個檔案,讓FTP乖乖的去Background工作。
 
 舉例來說:我們現在於AMY上,要到 ccsun1 的 Anonymous
 FTP server取一些檔案回來,過程如下:
 
 amy[stdnt/u8123456]%ftp ccsun1
 Connected to ccsun1.cc.nctu.edu.tw.
 220 ccsun1 FTP server (Version 4.162 Tue Nov 1 10:50:37 PST 1988) ready
 Name (ccsun1:u8123456): anonymous
 331 Guest login ok, send ident as password
 Local directory now /usr/people/stdnt/u8123456/virus
 ftp> cd virus
 250 CWD command successful.
 ftp> prompt                  ←切掉交談模式
 Interactive mode off.
 ftp> binary                  ←設定二進位傳輸模式
 200 Type set to I.
 ftp> mget *.*                ←取回所有的檔案
 local: readme.1st remote: readme.1st
 200 PORT command successful.
      ...
 150 Opening BINARY mode data connection for readme.1st (5012 bytes)
 226 Transfer complete.
 5012 bytes received in 0.02 seconds (244.24 Kbytes/s)
 ftp> bye                     ←結束FTP
 221 Goodbye.
 amy[stdnt/u8123456]%
 
     以上便是利用FTP 傳回檔案的一般過程,順利的話,一下子就可以
 結束FTP 檔案傳輸,但如果不順利的話,你可能會開始不耐煩。現在,
 我們將上面的過程改以Background來做。
 
 1.首先,將過程所用到的指令依順序放入檔案中,如下:
 
 amy[stdnt/u8123456]%cat ftp_command
 !mkdir virus
 lcd virus
 cd virus
 prompt
 binary
 mget *.*
 bye
 
 2.其次,建一個.netrc檔,讓ftp 自動到此讀取Username
   與Password,方可順利login 到Anonymous FTP的主機,如下:
 
amy[stdnt/u8123456]%cat .netrc
machine ccsun1 login anonymous password guest
                        帳號             密碼
 
 3.最後再執行下面指令即可。
 
amy[stdnt/u8123456]%nohup ftp ccsun1 < ftp_command > message &
 
   其中nohup表示即使logout 系統也不會kill這process。
而 > message 是將過程中的訊息存到 message 這個檔案,
以便在其中有錯誤發生時,我們可以從中得到錯誤訊息。
不難吧?各位不妨試試,以解除枯坐螢幕前等待FTP 結束的
苦狀。
 
-----------------
 
[ 整理者的話 ]
 
      真的, 上述的技巧是一個十分方便的檔案傳輸方法, 也節省了我們
  不少的時間, 免於枯坐等候.
 
      但是, 如果因為它的方便, 每個人都在尖峰時段使用, 心裡覺得反
  正不須等候而任意使用, 那將只有造成大家的不便, 蓋檔案傳輸對線路
  造成的負荷不小, 若大量傳輸或大家都同時使用, 相對的, 所有的傳輸
  都會趨於遲鈍, 只會弄巧成拙, 耽擱了自己也延誤了別人.
 
      為此, 個人在此呼籲各位使用者, 站在網路禮節與給大家方便的原
  則上, 督促自己多加利用離峰時段進行傳檔工作, 尤其傳輸速率較低的
  線路上的工作, 實不容小視!