運行機制
簡單地說,支持FTP協定的伺服器就是FTP伺服器。
與大多數 Internet服務一樣,FTP也是一個 客戶機/伺服器系統。用戶通過一個支持FTP協定的客戶機程式,連線到在遠程主機上的FTP伺服器程式。用戶通過客戶機程式向伺服器程式發出命令,伺服器程式執行用戶所發出的命令,並將執行的結果返回到客戶機。比如說,用戶發出一條命令,要求伺服器向用戶傳送某一個檔案的一份拷貝,伺服器會回響這條命令,將指定檔案送至用戶的機器上。客戶機程式代表用戶接收到這個檔案,將其存放在用戶目錄中。
使用FTP時必須首先登錄,在遠程主機上獲得相應的許可權以後,方可下載或上傳檔案。也就是說,要想同哪一台 計算機傳送檔案,就必須具有哪一台計算機的適當授權。換言之,除非有用戶 ID和口令,否則便無法傳送檔案。這種情況違背了Internet的開放性,Internet上的FTP主機何止千萬,不可能要求每個用戶在每一台主機上都擁有帳號。匿名FTP就是為解決這個問題而產生的。
匿名FTP是這樣一種機制,用戶可通過它連線到遠程主機上,並從其下載檔案,而無需成為其註冊用戶。系統 管理員建立了一個特殊的用戶ID,名為anonymous, Internet上的任何人在任何地方都可使用該用戶ID。
通過FTP程式連線匿名FTP主機的方式同連線普通FTP主機的方式差不多,只是在要求提供 用戶標識ID時必須輸入anonymous,該用戶ID的口令可以是任意的字元串。習慣上,用自己的 E-mail地址作為口令,使 系統維護程式能夠記錄下來誰在存取這些檔案。
值得注意的是,匿名FTP不適用於所有Internet主機,它只適用於那些提供了這項服務的主機。
當遠程主機提供匿名FTP服務時,會指定某些目錄向公眾開放,允許匿名存取。系統中的其餘目錄則處於隱匿狀態。作為一種安全措施,大多數匿名FTP主機都允許用戶從其下載檔案,而不允許用戶向其上傳檔案,也就是說,用戶可將匿名FTP主機上的所有檔案全部拷貝到自己的機器上,但不能將自己機器上的任何一個檔案拷貝至匿名FTP主機上。即使有些匿名FTP主機確實允許用戶上傳檔案,用戶也只能將檔案上傳至某一指定上傳目錄中。隨後,系統管理員會去檢查這些檔案,他會將這些檔案移至另一個公共下載目錄中,供其他用戶下載,利用這種方式,遠程主機的用戶得到了保護,避免了有人上傳有問題的檔案,如帶病毒的檔案。
用戶分類
這類用戶是指在FTP服務上擁有帳號。當這類用戶登錄FTP伺服器的時候,其默認的主目錄就是其帳號命名的目錄。但是,其還可以變更到其他目錄中去。如系統的主目錄等等。
在FTP伺服器中,我們往往會給不同的部門或者某個特定的用戶設定一個帳戶。但是,這個賬戶有個特點,就是其只能夠訪問自己的主目錄。伺服器通過這種方式來保障FTP服務上其他檔案的安全性。這類帳戶,在Vsftpd 軟體中就叫做Guest用戶。擁有這類用戶的帳戶,只能夠訪問其主目錄下的目錄,而不得訪問主目錄以外的檔案。
這也是我們通常所說的匿名訪問。這類用戶是指在FTP伺服器中沒有指定帳戶,但是其仍然可以進行匿名訪問某些公開的資源。
在組建FTP伺服器的時候,我們就需要根據用戶的類型,對用戶進行歸類。默認情況下,Vsftpd伺服器會把建立的所有帳戶都歸屬為Real用戶。但是,這往往不符合企業安全的需要。因為這類用戶不僅可以訪問自己的主目錄,而且,還可以訪問其他用戶的目錄。這就給其他用戶所在的空間帶來一定的安全隱患。所以,企業要根據實際情況,修改用戶所在的類別。
使用方式
TCP/IP協定中,FTP標準命令TCP 連線埠號為21,Port方式數據連線埠為20。FTP的任務是從一台計算機將檔案傳送到另一台計算機,不受 作業系統的限制。
需要進行遠程檔案傳輸的計算機必須安裝和運行ftp客戶程式。在windows作業系統的安裝過程中,通常都安裝了tcp/ip協定軟體,其中就包含了ftp客戶程式。但是該程式是字元界面而不是圖形界面,這就必須以 命令提示符的方式進行操作,很不方便。
啟動ftp客戶程式工作的另一途徑是使用ie 瀏覽器,用戶只需要在ie地址欄中輸入如下格式的url地址:ftp: //[用戶名:口令@]ftp伺服器 域名:[ 連線埠號]
(在CMD命令行下也可以用上述方法連線,通過put命令和get命令達到上傳和下載的目的,通過ls命令列出目錄,除了上述方法外還可以在cmd下輸入ftp回車,然後輸入open IP來建立一個連線,此方法還適用於linux下連線ftp伺服器)
通過ie瀏覽器啟動ftp的方法儘管可以使用,但是速度較慢,還會將密碼暴露在ie瀏覽器中而不安全。因此一般都安裝並運行專門的ftp客戶程式。
1.在本地電腦上登入到國際 網際網路。
2.搜尋有 檔案共享主機或者個人電腦(一般有專門的FTP伺服器網站上公布的,上面有進入該主機或個人電腦的名稱,口令和路徑).
3.當與遠程主機或者對方的個人電腦建立連線後,用對方提供的用戶名和口令登入到該主機或對方的個人電腦。
4.在遠程主機或對方的個人電腦登入成功後,就可以上傳你想跟別人分享的東西或者下載別人授權共享的東西(這裡的東西是指能放到電腦里去又能在顯示屏上看到的東西).
5.完成工作後關閉FTP 下載軟體,切斷連線。
傳輸方式
FTP的傳輸有兩種方式:ASCII、二進制。
ASCII傳輸方式
假定用戶正在拷貝的檔案包含的簡單ASCII碼文本,如果在遠程機器上運行的不是UNIX,當檔案傳輸時ftp通常會自動地調整檔案的內容以便於把檔案解釋成另外那台計算機存儲文本檔案的格式。
但是常常有這樣的情況,用戶正在傳輸的檔案包含的不是文本檔案,它們可能是程式,資料庫,字處理檔案或者 壓縮檔案。在拷貝任何非文本檔案之前,用binary 命令告訴ftp逐字拷貝。
二進制傳輸模式
在二進制傳輸中,保存檔案的位序,以便原始和拷貝的是逐位一一對應的。即使目的地機器上包含位序列的檔案是沒意義的。例如,macintosh以二進制方式傳送 執行檔到Windows系統,在對方系統上,此檔案不能執行。
如在ASCII方式下傳輸 二進制檔案,即使不需要也仍會轉譯。這會損壞數據。(ASCII方式一般假設每一字元的第一有效位無意義,因為ASCII字元組合不使用它。如果傳輸二進制檔案,所有的位都是重要的。)
支持模式
FTP支持兩種模式:Standard (PORT方式,主動方式),Passive (PASV,被動方式)。
Port模式
FTP 客戶端首先和伺服器的TCP 21連線埠建立連線,用來傳送命令,客戶端需要接收數據的時候在這個通道上傳送PORT命令。PORT命令包含了客戶端用什麼連線埠接收數據。在傳送數據的時候,伺服器端通過自己的TCP 20連線埠連線至客戶端的指定連線埠傳送數據。FTP server必須和客戶端建立一個新的連線用來傳送數據。
Passive模式
建立控制通道和Standard模式類似,但建立連線後傳送Pasv命令。伺服器收到Pasv命令後,打開一個臨時連線埠(連線埠號大於1023小於65535)並且通知客戶端在這個連線埠上傳送數據的請求,客戶端連線FTP伺服器此連線埠,然後FTP伺服器將通過這個連線埠傳送數據。
很多 防火牆在設定的時候都是不允許接受外部發起的連線的,所以許多位於防火牆後或區域網路的FTP伺服器不支持PASV模式,因為客戶端無法穿過防火牆打開FTP伺服器的高端連線埠;而許多區域網路的客戶端不能用PORT模式登入FTP伺服器,因為從伺服器的TCP 20無法和內部網路的客戶端建立一個新的連線,造成無法工作。
命令參數
1.FTP伺服器的登入
匿名用戶:FTP 口令:FTP
用戶:ANONYMOUS 口令:任何 電子郵件
2.顯示檔案信息:DIR/LS
3.下載檔案:GET 檔案名稱(下載到當前目錄)
4.上傳檔案:PUT 檔案名稱
5.多檔案下載:MGET
6.多檔案上傳:MPUT
7.退出:BYE
8.幫助:HELP
在本地主機和遠程主機之間傳送檔案。
ftp [ -d] [ -g ] [ -i ] [ -n ] [ -v] [ -f ] [ -k realm] [-q[-C]][ HostName [ Port ] ]
-C 允許用戶指定:通過 send_file 命令發出的檔案必須在網路高速 緩衝區(NBC)中經過 快取處理。此標誌必須在指定了-q 標誌的情況下使用。只有當檔案在無保護的情況下以二進制方式傳送時此標誌才適用。
-d 將有關 ftp 命令操作的調試信息傳送給 syslogd 守護進程。如果您指定-d 標誌,您必須編輯/etc/syslog.conf 檔案並添加下列中的一項:
OR
user.debug FileName
請注意: syslogd 守護進程調試級別包含信息級別訊息。
如果不編輯/etc/syslog.conf 檔案,則不會產生訊息。變更了/etc/syslog.conf 檔案之後,請運行 refresh -s syslogd 或 kill -1 SyslogdPID 命令,以通知 syslogd 守護進程其配置檔案的變更。關於調試級別的更多信息,請參考/etc/syslog.conf 檔案。也請參考 debug 子命令。
-g 禁用檔案名稱中的元字元拓展。解釋元字元可參考為擴展(有時叫做檔案名稱匹配替換)檔案名稱。請參考 glob 子命令。
-i 關閉多檔案傳送中的互動式提示。請參考 prompt、mget、mput 和 mdelete 子命令,以取得多檔案傳送中的提示的描述。
-n 防止在起始連線中的自動登錄。否則, ftp 命令會搜尋$HOME/.netrc 登錄項,該登錄項描述了遠程主機的登錄和初始化過程。請參考 user 子命令。
-q 允許用戶指定: send_file 子例程必須用於在網路上傳送檔案。只有當檔案在無保護的情況下以二進制方式傳送時此標誌才適用。
-v 顯示遠程伺服器的全部回響,並提供數據傳輸的統計信息。當 ftp 命令的輸出是到終端(如控制台或顯示)時,此顯示方式是預設方式。
如果 stdin 不是終端,除非用戶調用帶有-v 標誌的 ftp 命令,或傳送 verbose 子命令,否則 ftp 詳細方式將禁用。
-f 導致轉發憑證。如果Kerberos 5 不是當前認證方法,則此標誌將被忽略。
-k realm 如果遠程站的域不同於本地系統的域,系統將允許用戶指定遠程站的域。因此,域和DCE 單元是同義的。如果Kerberos 5 不是當前認證方法,則此標誌將被忽略。
ftp 命令使用“ 檔案傳送協定”(FTP) 在本地和遠程主機或遠程主機之間傳送檔案。
FTP 協定允許在使用不同 檔案系統的主機之間進行數據傳送。儘管協定在傳送數據中提供了很高的靈活度,它仍然不會嘗試保留特定於某個檔案系統的 檔案屬性(如檔案保護模式或修改時間)。而且,FTP 協定為檔案系統的整體結構做了少許假設,且不提供或不允許諸如循環地複製子目錄這樣的函式。
請注意:如果您正在系統之間傳送檔案,且需要保存檔案屬性或遞歸地複製子目錄,請使用 rcp 命令。
您可以在 ftp> 提示符中輸入子命令,執行類似這樣的任務:列出遠程目錄、更改當前的本地和遠程目錄、在單一請求中傳送多個檔案、創建和除去目錄,以及轉義到本地 shell 執行 shell 命令。
如果您執行 ftp 命令而不為遠程主機指定HostName 參數,ftp 命令會立即顯示 ftp> 提示符,等待 ftp 子命令。要連線遠程主機,請執行 open 子命令。當 ftp 命令連線到遠程主機時,ftp 命令在再次顯示提示符 ftp> 之前會提示輸入登錄名和密碼。如果遠程主機中未定義登錄名的密碼,ftp 命令將不成功。
ftp 命令 解釋器(處理在 ftp> 提示符處輸入的全部子命令),會提供大多數檔案傳送程式沒有的性能,如:
* 對 ftp 子命令處理檔案名稱參數
* 將一組子命令集中成一個單一的子命令 宏
* 從$HOME/.netrc 檔案中裝入宏
這些性能會幫助您簡化重複的任務,並允許您在 unattended 方式使用 ftp 命令。
命令解釋器將按照下列規則處理檔案名稱參數:
* 如果為此參數指定了-(連字元),則標準輸入 (stdin) 將用於讀取操作,而標準輸出用於寫入操作。
* 如果未套用前面的檢查,且檔案名稱擴展已啟用(請參考-g 標誌或 glob 子命令),則解釋器將根據C shell 的規則擴展檔案名稱。啟用了檔案名稱匹配替換以及在期待單一檔案名稱的子命令中使用了模式匹配字元時,結果可能與期待的不一樣。
例如,append 和 put 子命令將拓展檔案名稱,然後僅使用所生成第一個檔案名稱。其它 ftp 子命令,如 cd、delete, get、mkdir、rename 和 rmdir 不會執行檔案名稱拓展,並從字面上接受模式匹配字元。
* 對於 get、put、mget 和 mput 子命令,解釋器有能力在不同的本地和遠程檔案名稱語法樣式之間進行翻譯和映射(請參考 case、ntrans 和 nmap 子命令),並且在本地檔案名稱不是唯一的情況下有修改它的能力(請參考 runique 子命令)。另外,如果遠程檔案名稱不是唯一的,則 ftp 命令可將指令傳送到遠程 ftpd 伺服器,以修改遠程的檔案名稱(請參考 sunique 子命令)。
* 使用雙引號(" ") 指定包含空字元的參數。
請注意:ftp 命令解釋器不支持管道。也無需支持所有多 位元組字元檔案名稱。
要在互動地運行的時候結束 ftp 會話,請使用 quit 或 bye 子命令或 ftp> 提示符處的End of File (Ctrl-D) 按鍵順序。要在檔案傳送未完成之前結束它,請按中斷按鍵順序。其預設“中斷鍵”序列是Ctrl-C。stty 指令能用於重新定義該鍵系列。
ftp 命令在正常情況下會立即暫停正在傳送(從本地主機到遠端主機)的傳輸。ftp 命令通過將FTP ABOR 指令傳送到遠程FTP 伺服器,來暫停正在接收的傳輸(從遠程主機到本地主機),並廢棄所有傳入的檔案傳送包(直到遠程伺服器停止傳送它們為止)。如果遠程伺服器不支持ABOR 指令,在遠程伺服器未傳送所有請求的檔案之前,ftp 命令不會顯示 ftp> 提示符。另外,如果遠程伺服器執行未期望的操作時,可能需要結束本地 ftp 進程。
登錄認證
如果“標準的”是當前認證方法:
ftp 命令也會通過將密碼傳送到遠程主機來處理安全性,並許可自動登錄、檔案傳送和註銷操作。
如果您執行 ftp 命令並指定遠程主機的 主機名 (HostName), ftp 命令會嘗試建立一個對於指定主機的連線。如果 ftp 命令連線成功,ftp 命令會在當前目錄或主目錄中搜尋本地的$HOME/.netrc 檔案。如果檔案存在,ftp 命令會在檔案中搜尋啟動登錄過程的入口,在命令宏定義中搜尋遠程主機。如果$HOME/.netrc 檔案或自動登錄項不存在,或是系統已使用 securetcpip 命令保護起來, ftp 命令會提示用戶輸入用戶名和密碼。不論 命令行中是否指定HostName 參數,該指令都會顯示此提示。
請注意:排隊系統不支持多位元組主機名。
如果 ftp 命令找到指定主機的$HOME/.netrc 自動登錄項, ftp 會試圖使用該登錄項中的信息登錄遠程主機。ftp 命令也會載入任何在登錄項中定義的命令宏。在某些情況(例如,所需的密碼在自動登錄項中沒有列出來),ftp 命令會在顯示 ftp> 提示符之前提示輸入密碼。
一旦 ftp 命令完成自動登錄,如果宏是在自動登錄項中定義的,ftp 命令就會執行init 宏。如果init 宏不存在或未包含 quit 或 bye 子命令,ftp 命令將顯示 ftp> 提示符並等待子命令。
請注意:在提示符或在 $HOME/.netrc 檔案中指定的遠程主機名必須存在,並擁有在遠程主機中定義的密碼。否則,ftp 指令無效。
如果Kerberos 5 是當前的認證方法:
ftp 命令會按在IETF 草稿文擋"draft-ietf-cat-ftpsec-09.txt" 定義的那樣將此拓展用於 ftp 規範。FTP 安全性擴展將使用“Generic Security Service API (GSSAPI)”安全機制來實現。GSSAPI 提供對於基礎的安全性和通信機制來說是獨立的服務。GSSAPI 是在 rfc 1508 和1509 中定義的。
ftp 命令將使用AUTH 和ADAT 命令驗證 ftpd 守護進程。如果兩者都支持Kerberos 認證,則它們會使用 本地用戶 DCE 憑證驗證遠程系統上的用戶。如果這樣失敗了,且兩個系統中都配置了“標準的”認證,則會使用上述的過程。
HostName 參數是傳送檔案的目的地主機名稱。可選的Port 參數指定了連線埠的 標識符,通過此連線埠進行傳輸。(/etc/services 檔案指定了預設連線埠。)
操作命令
下列 ftp 子命令在 ftp> 提示符下輸入。使用雙引號(" ") 指定包含空格字元的參數。
![命令[參數]] 在本地主機上調用互動的 shell。可通過 shell 命令提供帶有一個或多個可選參數的可選命令。
$>Macro [參數] 執行指定的宏(早先使用 macdef 子命令定義的)。參數不被擴展。
?[ 子命令] 顯示描述子命令的幫助訊息。如果您不指定Subcommand 參數,ftp 命令將顯示已知子命令的清單。
account [Password] 傳送遠程主機在授權對其資源進行訪問之前可能需要的補充密碼。如果密碼不是命令提供的,將提示用戶輸入密碼。密碼不在螢幕上顯示。
append LocalFile [RemoteFile] 將本地檔案添加到遠程主機檔案中。如果遠程檔案名稱未指定,則將使用本地檔案名稱,該檔案名稱由 ntrans 子命令或 nmap 子命令生成的任何設定進行改變。添加檔案的時候, append 子命令將為 form、mode, struct、和 type 子命令使用當前值。
ascii type ascii 子命令的同義詞。
bell 每個檔案傳送過程完成之後響一聲鈴。
binary type binary 子命令的同義詞。
block mode block 子命令的同義詞。
bye 結束檔案傳送會話並退出 ftp 命令。與 quit 子命令相同。
carriage-control form carriage-control 子命令的同義詞。
case 為檔案名稱 case 設定一個切換。當 case 子命令開啟的時候ftp 命令將全部遠程檔案名稱從大寫改成小寫(將它們寫入本地目錄時)。其預設值為關閉(這樣 ftp 命令就會在本地目錄中按大寫格式寫入大寫的遠程檔案名稱)。
cd RemoteDirectory 將遠程主機中的工作目錄改為指定的目錄。
cdup 將遠程主機中的工作目錄改為當前目錄的父目錄。
close 結束檔案傳送會話,但不要退出 ftp 命令。已定義的宏已被擦除。與disconnect 子命令相同。
copylocal 切換本地拷貝。copylocal 預設值為關閉。ftp 通過向自身執行 ftp 操作確認您未置零檔案(如相同的主機名和相同的路徑名)。將 copylocal 打開繞過這一檢查。
cr 在ASCII 類型檔案傳送期間接收記錄時,從回車和 line-feed 序列中除去回車字元。(ftp 命令在檔案傳送期間用回車和換行中止每一條 ASCII 類型的記錄。)
遠程主機(其作業系統與正在運行的作業系統不同)的記錄可擁有內嵌於記錄中的單一換行。要從記錄定界符中區分這些內嵌的換行,請將 cr 子命令設定為關閉。cr 子命令會在開啟和關閉中間進行切換。
debug [0 | 1] 在調試記錄保持開啟和關閉之間進行切換。指定 debug 或 debug 1,以列印傳送到遠程主機的每一個命令,並保存重新啟動的 控制檔案。重新指定 debug 或 debug 0,停止調試記錄保持。Ctrl-C 鍵也會保存重新啟動的控制檔案。
指定 debug 子命令將有關 ftp 命令操作的調試信息傳送給 syslogd 守護進程。如果指定了 debug 子命令,您必須編輯/etc/syslog.conf 檔案並添加下列中的其中一項:
請注意: syslogd 守護進程調試級別包含信息級別訊息。
如果不編輯/etc/syslog.conf 檔案,則不會產生訊息。變更了/etc/syslog.conf 檔案之後,請運行 refresh -s syslogd 或 kill -1 SyslogdPID 命令,以通知 syslogd 守護進程其配置檔案的變更。關於調試級別的更多信息,請參考/etc/syslog.conf 檔案。也請參考 ftp -d 標誌。
delete RemoteFile 刪除指定的遠程檔案。
dir [RemoteDirectory][LocalFile] 將所指定的遠程目錄的內容清單(RemoteDirectory) 寫入指定的本地檔案(LocalFile)。如果RemoteDirectory 參數未指定,dir 子命令將列出當前遠程目錄的內容。如果LocalFile 參數未指定或是一個-(連字元),則 dir 子命令將顯示本地終端上的清單。
disconnect 結束檔案傳送會話,但不退出 ftp 命令。已定義的宏已被擦除。與 close 子命令相同。
ebcdic type ebcdic 子命令的同義詞。
exp_cmd 在常規的和試驗性的協定命令中切換。其預設值為關閉。
file struct file 子命令的同義詞。
form [ carriage-control | non-print | telnet ] 指定檔案傳送的格式。form 子命令修改 type 子命令,以便按指示的格式傳送檔案傳送。有效的參數為 carriage-control、non-print 和 telnet。
carriage-control
將檔案傳送格式設定為 carriage-control。
non-print
將檔案傳送格式設定為 non-print。
telnet
將檔案傳送格式設定為 Telnet。Telnet 是打開對系統的連線的 傳輸控制協定/網間協定(TCP/IP)。
get RemoteFile [LocalFile] 將遠程檔案拷貝到本地主機。如果LocalFile 參數未指定,將在本地使用遠程檔案名稱,並由 case、ntrans 和 nmap 子命令生成的任何設定進行改變。 ftp 命令在傳送檔案時,將使用 type、form、mode 和 struct 子命令的當前設定。
glob 切換 mdelete、mget 和 mput 子命令的檔案名稱拓展(檔案名稱匹配替換)。如果檔案名稱匹配替換禁用,這些子命令的檔案名稱參數將不會拓展。啟用了檔案名稱匹配替換以及在期待單一檔案名稱的子命令中使用了模式匹配字元時,結果可能與期待的不一樣。
例如,append 和 put 子命令將拓展檔案名稱,然後僅使用所生成第一個檔案名稱。其它 ftp 子命令,如 cd、delete, get、mkdir、rename 和 rmdir 不會執行檔案名稱拓展,並從字面上接受模式匹配字元。
mput 子命令的檔案名稱匹配替換在本地執行,其方式與 csh 命令的方式一樣。對於 mdelete 和 mget 子命令,每個檔案名稱都是在遠程機器上分別地進行擴展的,其清單也不會合併。根據遠程主機和 ftp 伺服器的不同,目錄名的拓展可與檔案名稱的拓展不一樣。
要預覽目錄名的擴展請使用 mls 子命令。
mls RemoteFile
要傳送檔案的整個目錄子樹,請勿使用 mget 或 mput 子命令,而按二進制格式傳送子樹的 tar 壓縮文檔。
hash 切換散列符號(#) 列印。當 hash 子命令是開啟的時候ftp 命令會為每個所傳送的數據塊(1024 位元組)顯示一個散列符號。
help [子命令] 顯示幫助信息。請參考? 子命令。
image type image 子命令的同義詞。
lcd [Directory] 更改本地主機中的工作目錄。如果您未指定目錄,ftp 命令將使用主目錄。
local M type local M 子命令的同義詞。
ls [RemoteDirectory] [LocalFile] 請將遠程目錄縮寫的檔案清單寫入本地檔案。如果RemoteDirectory 參數未指定,ftp 命令將列出當前遠程目錄。如果LocalFile 參數未指定或是一個-(連字元),則 ftp 命令將顯示本地終端上的清單。
macdef Macro 定義子命令宏。隨後直到空行的行(兩個連續的換行)將作為宏的文本保存。能為所有宏定義多達16 個宏,包含4096 個字元。在重新定義或執行 close 子命令前,應將宏保持為已定義的宏。
$(美元符號)和\ (反斜槓) 是 ftp 宏中的特殊字元。跟隨一個或多個數字的$ 符號將被調用行中對應的宏參數所替換(請參考$ 子命令)。$ 符號後緊隨字母 i 表示將要循環該宏,$i 字元組合將被每一傳遞中連續的字元替換。
第一個參數用於第一個傳遞,第二個參數用於第二個傳遞,依此類推。\ 符號會防止下一個字元的特殊處理。請使用\ 符號關閉$ 和\.(反斜槓句點)符號的特殊意義。
mdelete RemoteFiles 擴展在遠程主機上RemoteFiles 參數所指定的檔案,並刪除遠程檔案。
mdir [RemoteDirectories LocalFile] 擴展在遠程主機上RemoteDirectories 參數所指定的目錄,並將這些目錄的內容清單寫入在LocalFile 參數中定義的檔案。如果RemoteDirectories 參數包含模式匹配字元,mdir 子命令將提示輸入本地檔案(如果沒指定)。如果RemoteDirectories 參數是用空格隔開的遠程目錄清單,則清單中最後一個參數必須是一個本地檔案名稱或-(連字元)。
如果 LocalFile 參數是-(連字元),mdir 子命令將顯示本地終端上的清單。如果互動式提示啟用(請參考 prompt 子命令),ftp 命令將提示用戶驗證最後一個參數是本地檔案且不是遠程目錄。
mget RemoteFiles 請擴展在遠程主機上RemoteFiles 參數,並將指示的遠程檔案拷貝到本地主機的當前目錄中。請參考 glob 子命令,取得更多有關檔案名稱擴展的信息。遠程檔案名稱在本地使用,並由 case、ntrans 和 nmap 子命令所生成的設定進行變更。在傳送檔案時,ftp 命令將使用 form、mode、struct 和 type 子命令的當前設定。
mkdir [RemoteDirectory] 創建在RemoteDirectory 參數(遠程主機中)中指定的目錄。
mls [RemoteDirectories LocalFile] 擴展在遠程主機上在RemoteDirectories 參數中指定的目錄,並將所指示的遠程目錄的縮寫檔案清單寫入本地檔案。如果RemoteDirectories 參數包含模式匹配字元,mls 子命令將提示輸入本地檔案(如果沒指定)。如果RemoteDirectories 參數是用空格隔開的遠程目錄清單,則清單中最後一個參數應是一個本地檔案名稱或-(連字元)。
如果 LocalFile 參數是-(連字元),mls 子命令將顯示本地終端上的清單。如果互動式提示啟用(請參考 prompt 子命令),ftp 命令將提示用戶驗證最後一個參數是本地檔案且不是遠程目錄。
mode [ stream | block ] 設定檔案傳送方式。如果參數未提供,則預設值為 stream。
block
請將檔案傳送方式設定為 block。
stream
將檔案傳送方式設定為 stream。
modtime 顯示遠程機器中所指定檔案的最後修改時間。如果 ftp 命令未連線到執行前的主機,則 modtime 子命令將帶錯誤訊息而終止。ftp 命令忽略第一個參數以外的參數。如果FileName 參數未指定,ftp 命令將提示輸入檔案名稱。如果未給出檔案名稱,ftp 命令將把用法訊息傳送給標準輸出,並終止該子命令。
如果遠程主機中有FileName 參數指定的名稱,且該名稱指定一個檔案,則 ftp 命令將包含檔案最後修改時間的訊息傳送給標準輸出,並終止該子命令。如果FileName 指定一個目錄,則 ftp 命令將把錯誤訊息傳送給標準輸出,並終止該子命令。
注意: modtime 子命令在允許的時候會解釋元字元。
mput [LocalFiles] 擴展在主機的LocalFiles 參數中指定的檔案,並將指示的本地檔案複製給遠程主機。請參考 glob 子命令,取得更多有關檔案名稱擴展的信息。本地檔案名稱在遠程主機中使用,並由 ntrans 和 nmap 子命令所生成的設定進行變更。 ftp 命令會在傳送檔案時,使用 type、form、mode 和 struct 子命令的當前設定。
nlist [RemoteDirectory][LocalFile] 將所指定的遠程目錄的內容清單(RemoteDirectory) 寫入指定的本地檔案(LocalFile)。如果RemoteDirectory 參數未指定,nlist 子命令將列出當前遠程目錄的內容。如果LocalFile 參數未指定或是一個-(連字元),則 nlist 子命令將顯示本地終端上的清單。
nmap 打開或關閉檔案名稱映射機制。如果未指定任何參數,檔案名稱映射將關閉。如果參數已指定,在沒有指定目標檔案名稱的時候,將為 mget 和 mput 子命令以及 get 和 put 子命令映射源檔案名稱。此子命令在本地和遠程主機使用不同的檔案命名約定和慣例時很有用。映射下列由InPattern 和OutPattern 參數設定的模式。
InPattern 參數為傳入的檔案名稱指定了模板,該檔案名稱有可能已根據 case 和 ntrans 設定處理過。可將從$1 到$9 的模板變數包含進InPattern 參數。除$(美元符號)和 \$ (反斜槓,美元符號)以外,InPattern 參數中的所有字元,都是按字面意義處理的,並用作InPattern 變數之間的定界符。例如,如果InPattern 參數是$1.$2 且遠程檔案名稱是 mydata.dat,則$1 的值是 mydata,$2 的值是 dat。
此OutPattern 參數確定結果檔案名稱。從$1 到$9 的變數將被它們從InPattern 參數獲得的值替換,而變數$0 將由原檔案名稱替換。另外,如果Sequence1 不為空,序列[Sequence1,Sequence2] 將由Sequence1 替換;否則它將由Sequence2 的值替換。例如,子命令:
nmap $1.$2.$3 [$1,$2].[$2,file]
會從 myfile.data 或 myfile.data.old 中產生 myfile.data,從 myfile 中產生 myfile.file,從。myfile中產生myfile.myfile。請使用 \ (反斜槓) 符號防止OutPattern參數中 $(美元符號)、[(左括弧)、](右括弧)和,(逗號)的特殊意義。
non-print form non-print 子命令的同義詞。
ntrans ] 打開或關閉檔案名稱字元翻譯機制。如果未指定任何參數,字元翻譯將關閉。如果參數已指定,在沒有指定目標檔案名稱的時候,將為 mget 和 mput 子命令以及 get 和 put 子命令翻譯源檔案名稱中的字元。
此子命令在本地和遠程主機使用不同的檔案名稱約定和慣例時很有用。字元翻譯遵從InCharacters 和OutCharacters 參數設定的模式。匹配InCharacters 參數中字元的源檔案名稱中的字元將由OutCharacters 參數中對應的字元替換。
如果InCharacters 參數指定的字元串比OutCharacters 參數指定的字元串長,而且其在OutCharacters 參數中無對應的字元,則InCharacters 參數中的字元將被刪除。
open HostName [Port] 在由HostName 參數所指定主機中建立對FTP 伺服器的連線。如果可選的連線埠號已指定ftp 命令將嘗試連線該連線埠中的伺服器。如果已設定自動登錄功能(即,該-n 標誌沒有在命令行中指定), 則 ftp 命令就會試圖讓用戶登錄到FTP 伺服器。
您還必須擁有其中帶有正確信息的$HOME/.netrc 檔案和正確的許可集。。netrc 檔案應在您的主目錄中。
passive 切換檔案傳送的被動方式。在被動方式關閉的情況下調用檔案傳送命令(如 get、mget 和 put,或 mput)時,ftp 伺服器就會打開對客戶機的數據連線。在被動方式下,客戶機在傳送和接收數據的時候打開對主機的數據連線。
private 請將保護級別設定為“private”。在此級別,數據的保護既完整而又機密。
prompt 切換互動式提示。如果互動式提示啟用(預設值)ftp 命令在檢索、傳送或 刪除檔案(在 mget、mput, 和 mdelete)之前會提示進行驗證操作。否則,ftp 命令會根據所有指定的檔案來執行。
protect 此指令會返回保護的當前級別。
proxy [ 子命令] 在輔助控制連線中執行 ftp 命令。此子命令允許 ftp 子命令同時連線兩個遠程FTP 伺服器,以便在兩個伺服器之間傳送檔案。第一個 proxy 子命令應是建立次要控制連線的 open 子命令。請輸入 proxy ? 子命令,查看其它在二級連線中可執行的 ftp 子命令。
下列子命令在由 proxy 子命令開頭時的表現會不一樣:
* open 子命令在自動登錄過程中不定義新的宏。
* close 子命令不會擦除現存的宏定義。
* get 和 mget 子命令從主連線中的主機上將檔案傳送到二級連線的主機上。
* put、 mput 和 append 子命令從第二連線中的主機上將檔案傳送到主連線的主機上。
* restart 子命令可由 proxy 命令進行處理。
* status 子命令顯示出準確的信息。
檔案傳送要求第二連線上的FTP 伺服器必須支持PASV(passive)指令。
put LocalFile [RemoteFile] 將本地檔案存儲到遠程主機中。如果您未指定RemoteFile 參數,ftp 命令將使用本地檔案名稱命名遠程檔案,而遠程檔案名稱由 ntrans 和 nmap 子命令所生成的設定加以改變。 ftp 命令會在傳送檔案時,將使用 type、form、mode 和 struct 子命令的當前設定。
pwd 顯示遠程主機中的當前目錄名。
quit 關閉連線並退出 ftp 命令。與 bye 子命令相同。
quote 字元串逐字地將由 String 參數指定的字元串傳送到遠程主機。執行remotehelp 或 quote help 子命令,顯示String 參數的有效值清單。
注意:涉及數據傳輸的“Quoting”命令會產生不可預見的結果。
record struct record 子命令的同義詞。
recv RemoteFile [LocalFile] 請將遠程檔案拷貝到本地主機。與 get 子命令相同。
reinitialize 通過刷新所有I/O 並允許完成傳輸操作來對FTP 會話進行重新初始化。按照用戶已開始FTP 會話但未登錄到遠程主機的情況復位所有預設值。
remotehelp [Subcommand] 請求從遠程FTP 伺服器獲得幫助。
rename FromName ToName 重新命名遠程主機上的檔案。
reset 清除回復佇列。此子命令將使命令分析重新同步。
restart get | put | append 請在生成上一個檢查點的位置重新啟動檔案傳送。要想順利運行,該子命令應與異常終止子命令相同,包括結構、類型和格式。有效參數為 get、put 和 append。
rmdir RemoteDirectory 除去由遠程主機中的RemoteDirectory 參數所指定的遠程目錄。
runique (ReceiveUnique) 在子命令 get 和 mget 期間,切換為本地目的檔案創建唯一檔案名稱稱的功能。如果此功能為“關閉”狀態(預設值),ftp 命令會覆蓋本地檔案。否則,如果本地檔案名稱與為本地目的檔案指定的名稱相同,ftp 將使用.1 修改為本地目的檔案指定的名稱。如果本地檔案已使用了新名稱,ftp 將把後綴。2 添加給所指定的名稱。如果本地檔案已使用了此第二個名稱,則 ftp 命令會在找到唯一的檔案名稱或未找到唯一檔案名稱但到達.99 之前繼續增加後綴。如果 ftp 命令找不到唯一的檔案名稱,ftp 會報告錯誤,傳輸過程也不會發生。請注意 runique 子命令不會影響從 shell 命令產生的本地檔案名稱。
safe 將保護級別設定為“safe”。在此級別,數據的完整性會得到保護。
send LocalFile [RemoteFile] 將本地檔案存儲到遠程主機中。其方式與 put 子命令相同。
sendport 切換對於FTP PORT 指令的使用。根據預設,ftp 命令在為每個數據傳輸建立連線的時候會使用PORT 指令。當禁用PORT 指令時,ftp 不會在數據傳輸中使用PORT 命令。PORT 指令在處理某些FTP 伺服器時很有用,那些伺服器在未正確指示指令已被接受時會忽略PORT 指令。
site Args 使用 chmod 命令顯示或設定空閒逾時周期、顯示或設定檔案創建 umask 或更改檔案的許可權。Args 參數可能的值是 umask 和 chmod。
size RemoteFile 以位元組的方式顯示RemoteFile 參數所指定的遠程檔案的大小。
status 顯示 ftp 命令的當前狀態以及子命令的狀態。
stream mode stream 子命令的同義詞。
struct [ file | record ] 設定數據傳送結構類型。有效的參數為 file 和 record。
file
將數據傳送結構類型設定為 file。
record
將數據傳送結構類型設定為 record。
sunique (Send/Store Unique) 在子命令 put 和 mput 期間,切換為遠程目的檔案創建唯一檔案名稱稱的功能。如果此功能為“關閉”狀態(預設值),ftp 命令會覆蓋遠程檔案。否則,如果遠程檔案名稱與為遠程目的檔案指定的名稱相同,遠程FTP 伺服器會修改遠程目的檔案的名稱。請注意遠程伺服器必須支持STOU 指令。
系統顯示在遠程機器上運行的作業系統類型。
telnet form telnet 子命令的同義詞。
tenex type tenex 子命令的同義詞。
跟蹤切換包跟蹤。
type [ ascii | binary | ebcdic | image | local M | tenex ] 設定檔案傳送類型。有效參數是 ascii、binary、ebcdic、image,、local M 和 tenex。如果參數未指定,則當前類型被顯示。預設類型為 ascii;binary 類型可能會比 ascii 更有效。
ascii
將檔案傳送類型設定為網路ASCII。此類型為預設值。檔案傳送使用二進制映像傳送可能會更有效。請參考 binary 參數,以取得更多信息。
binary
檔案傳送類型設定為二進制映像。此類型可能比 ASCII 傳送更有效。
ebcdic
將檔案傳送類型設定為 EBCDIC。
image
將檔案傳送類型設定為二進制映像。此類型可能比 ASCII 傳送更有效。
local M
將檔案傳送類型設定為本地。M 參數定義每計算機字位的 十進制數。此參數沒有預設值。
tenex
將檔案傳送類型設定為 TENEX 機器需要的類型。
user User [Password] [Account] 識別遠程FTP 伺服器的本地用戶(User)。如果未指定Password 或Account 參數,而遠程伺服器需要它,則 ftp 命令會提示輸入本地的密碼和帳戶。如果Account 參數是必須的,則 ftp 命令會在 遠程登錄過程完成後將它傳送到遠程伺服器。
注意:除非通過在命令行上指定 -n 標誌來禁用自動登錄,否則 ftp 命令將User、Password和 Account 參數自動地傳送給遠程伺服器用於初始連線。您亦需主目錄中的。netrc 檔案以便發布自動登錄。
verbose 切換詳細方式。如果詳細方式啟用(預設值),ftp 命令將顯示遠程FTP 伺服器的全部回響。另外, ftp 會在傳輸完成後顯示所有檔案傳送的統計信息。
命令實例
1. 要調用 ftp 命令,請登錄 canopus 系統,顯示本地幫助信息,顯示遠程幫助信息,顯示狀態,切換 bell、prompt、runique、trace 和 verbose 子命令,然後再退出,請輸入:
$ ftp canopus
名稱(canopus:eric):dee
331 dee 所需要的密碼。
密碼:
230 用戶 dee 登錄。
ftp> 幫助
Commands 可能為縮寫。命令:
! delete mdelete proxy runique
$ debug mdir sendport send
account dir mget put size
append disconnect mkdir pwd status
ascii form mls quit struct
bell get mode quote sunique
binary glob modtime recv system
bye hash mput remotehelp tenex
case help nmap rstatus trace
cd image nlist rhelp type
cdup lcd ntrans rename user
close ls open reset verbose
cr macdef prompt rmdir ?
clear private protect safe
ftp> remotehelp
214 —識別下列命令(* => 未實施)。
USER PORT RETR MSND* ALLO DELE SITE* XMKD CDUP
PASS PASV STOR MSOM* REST* CWD STAT* RMD XCUP
ACCT* TYPE APPE MSAM* RNFR XCWD HELP XRMD STOU
REIN* STRU MLFL* MRSQ* RNTO LIST NOOP PWD
QUIT MODE MAIL* MRCP* ABOR NLST MKD XPWD
AUTH ADAT PROT PBSZ MIC ENC CCC
無代理連線。
方式:流;類型:ascii; 表單:非列印的;結構:檔案
詳細:開; Bell:關; 提示:開;檔案名稱匹配替換: 開
存儲唯一:關; 接收唯一:關
Case:關; CR stripping:開
Ntrans: 關
Nmap:關
散列標記列印:關;PORT cmds 的使用:開
ftp> bell
Bell 方式開啟
ftp> 提示符
互動方式關閉。
ftp> runique
接收唯一開啟。
ftp> trace
包跟蹤開啟。
ftp> verbose
詳細方式關閉。
ftp> quit
$
2. 要調用 ftp 命令,請登錄 canopus 系統,列印工作目錄,更改工作目錄,將檔案傳送類型設定為ASCII 向遠程主機傳送本地檔案,將工作目錄改為父目錄,然後退出,請輸入:
$ ftp canopus
名稱(canopus:eric):dee
331 dee 所需要的密碼。
密碼:
230 用戶 dee 登入。
ftp> pwd
257 "/home/dee" 為當前目錄。
ftp> cd 桌面
250 CWD 命令順利完成。
ftp> 類型 ascii
200 類型設定為A。
ftp> 傳送 typescript
200 PORT 命令順利完成。
150 為 typescript (128.114.4.99,1412) 打開數據連線。
226 傳輸完成。
ftp> cdup
250 CWD 命令順利完成。
ftp> bye
221 再見。$
3. 要調用具有自動登錄功能的 ftp 命令(使用。netrc 檔案),請打開與 canopus 系統的會話,登入,將工作目錄改為父目錄,顯示工作目錄,列出當前目錄的內容,刪除檔案,將當前目錄的內容清單寫入本地檔案,關閉會話,然後退出,請輸入:
$ ftp canopus
331 dee 所需要的密碼。
230 用戶 dee 登入。
ftp> cdup
250 CWD 命令順利完成。
ftp> pwd
257 "/home" 是當前目錄。
ftp> dir
200 PORT 命令順利完成。
150 為/usr/bin/ls (128.114.4.99,1407) 打開數據連線。
(0 位元組)。
一共104
drwxr-xr-x 2 system 32 Feb 23 17:55 bin
Drwxr-xr-x 26 rios 4000 May 30 17:18 bin1
drwxr-xr-x 2 system 32 Feb 23 17:55 books
drwxrwxrwx 18 rios 1152 Jun 5 13:41 dee
-r--r--r-- 1 system 9452 May 17 12:21 filesystems
drwxr-xr-x 2 system 32 Feb 23 17:55 jim
drwxr-xr-x 5 system 80 Feb 23 17:55 krs
drwxrwxrwx 2 rios 16432 Feb 23 17:36 lost+found
-rwxr-xr-x 1 rios 3651 May 24 16:45 oldmail
drwxr-xr-x 2 system 256 Feb 23 17:55 pubserv
drwxrwxrwx 2 system 144 Feb 23 17:55 rein989
drwxr-xr-x 2 system 112 Feb 23 17:55 reinstall
226 傳輸完成。
ftp> 刪除舊郵件。
250 DELE 命令順利完成。
ftp> mdir /home/dee/bin binlist
output to local-file: binlist? y
200 PORT 命令順利完成。
150 為/usr/bin/ls (128.114.4.99,1408)(0 位元組)打開數據連線。
226 傳輸完成。
ftp> close
221 再見。
ftp> quit
$
檔案
/usr/samples/tcpip/netrc 包含。netrc 樣本檔案。
/etc/syslog.conf 包含 syslogd 守護進程的配置信息。
傳輸協定
FTP是一個8位的客戶端-伺服器協定,能操作任何類型的檔案而不需要進一步處理,就像MIME或Unicode一樣。但是,FTP有著極高的延時,這意味著,從開始請求到第一次接收需求數據之間的時間,會非常長;並且不時的必須執行一些冗長的登入進程。