ftp
概述
- 「文件傳送協定」 (FTP) 在本地和遠端主機之間傳送文件。
- FTP上傳期間,如果是覆寫遠端的舊檔,上傳前會先刪掉遠端的舊檔,傳送完成或傳送中斷,遠端的檔案才會產生。所以上傳期間,遠端的目的檔案是不能讀寫的,因為不存在。很簡單的檔案讀寫鎖定機制。
- 不會嘗試保留特定檔案系統的檔案屬性(如保護模式或修改時間)。
- 不允許循環地複製子目錄這樣的函數。
- 需要保存文件屬性或遞歸地複製子目錄,請使用 rcp 命令。
- 子命令可做:列出遠端目錄、更改當前的本地和遠端目錄、在單一請求中傳送多個文件、創建和除去目錄,以及轉義到本地 shell 執行 shell 命令。
- 不指定遠端主機 HostName 參數,ftp 命令會立即顯示 ftp> 提示符,等待 ftp 子命令。要連接遠端主機,請執行 open 子命令。
- $HOME/.netrc 中裝入巨集。如果 ftp 連接成功,ftp 會在當前目錄或主目錄中搜索本地的 $HOME/.netrc 文件。如果文件存在,ftp 會在文件中搜索啟動登錄過程的入口,在命令巨集定義中搜索遠端主機。如果 $HOME/.netrc 文件或自動登錄項不存在,或是系統已使用 securetcpip 命令保護起來, ftp 命令會提示用戶輸入用戶名和密碼。不論命令行中是否指定 HostName 參數,該指令都會顯示此提示。
- 一旦 ftp 完成自動登錄,如果巨集是在自動登錄項中定義的,ftp 命令就會執行init 巨集。如果init 巨集不存在或未包含 quit 或 bye 子命令,ftp 命令將顯示 ftp> 提示符並等待子命令。
FTP的命令行格式
ftp [ -d] [ -g ] [ -i ] [ -n ] [ -v] [ -f ] [ -k realm] [-q[-C]][ HostName [ Port ] ]
-v 顯示遠端伺服器的所有響應資訊;當 ftp 的輸出是到終端(如控制台或顯示)時,省略-v。如果 stdin 不是終端,除非用戶用帶有 -v 的 ftp 命令,或發送 verbose 子命令,否則 ftp 禁用詳細方式。
-n 限制ftp的自動登錄,即不使用.netrc文件
-d 使用調試方式;調試資訊發送給 syslogd 行程。如果您指定 -d 標誌,您必須編輯 /etc/syslog.conf 文件並添加下列中的一項:「user.info FileName」或「user.debug FileName」。
-g 取消萬用字元文件名。請參考 glob 子命令。
-i 關閉多文件傳送中的交互式提示。請參考 prompt、mget、mput 和 mdelete 子命令,以取得多文件傳送中的提示的描述。
-q 允許指定用戶: send_file 子例程必須用於在網路上發送文件。只有當文件在無保護的情況下以二進位方式發送時此標誌才適用。
-C 指定用戶
-f 導致轉發憑證。如果 Kerberos 5 不是當前認證方法,則此標誌將被忽略。
-k realm 如果遠端站的域不同於本地系統的域,系統將允許用戶指定遠端站的域。因此,域和 DCE 單元是同義的。如果 Kerberos 5 不是當前認證方法,則此標誌將被忽略。
Linux FTP本地端子命令
ftp在本地端使用的內部命令如下(中括號表示可選項):
- ![cmd[args]]:在本地機中執行交互shell,exit回到ftp環境,如:!ls*.zip.
- $ macro-name[args]:執行巨集定義macro-name.
- account[password]:提供登錄遠端系統成功後訪問系統資源所需的補充口令。
- append local-file[remote-file]:將本地文件追加到遠端系統主機,若未指定遠端系統文件名,則使用本地文件名。文件名由 ntrans 子命令或 nmap 子命令進行改變。添加文件的時候, append 子命令使用 form、mode, struct、和 type 子命令設定值。
- ascii:使用ascii類型傳輸方式。type ascii 子命令的同義詞。
- bell:每個命令執行完畢後電腦響鈴一次。
- bin:使用二進位文件傳輸方式。type binary 子命令的同義詞。
- block:mode block 子命令的同義詞。
- bye:退出ftp會話過程。與 quit 子命令相同。
- carriage-control:form carriage-control 子命令的同義詞。
- case:在使用mget時,將遠端主機文件名中的大寫轉為小寫字母。其預設值為關閉(這樣 ftp 命令就會在本地目錄中按大寫格式寫入大寫的遠端文件名)。
- cd remote-dir:進入遠端主機目錄。
- cdup:進入遠端主機目錄的父目錄。
- chmod mode file-name:將遠端主機文件file-name的存取方式設置為mode,如: chmod 777 a.out 。
- close:中斷與遠端伺服器的ftp會話(與open對應)。但不要退出 ftp 命令。已定義的巨集已被擦除。與disconnect 子命令相同。
- copylocal:切換本地拷貝。copylocal 預設值為關閉。ftp 通過向自身執行 ftp 操作確認您未置零文件(如相同的主機名和相同的路徑名)。將 copylocal 打開繞過這一檢查。
- cr:使用asscii方式傳輸文件時,將回車換行轉換為回行。
- debug[0 | 1]:設置調試方式,顯示發送至遠端主機的每條命令,如: deb up 3,若設為0,表示取消debug。調試資訊發送給 syslogd 行程。如果您指定 -d 標誌,您必須編輯 /etc/syslog.conf 文件並添加下列中的一項:「user.info FileName」或「user.debug FileName」。
- delete remote-file:刪除遠端主機文件。
- dir[remote-dir][local-file]:顯示遠端主機目錄,並將結果存入本地文件local-file。如果 RemoteDirectory 參數未指定,dir 子命令將列出當前遠端目錄的內容。如果 LocalFile 參數未指定或是一個 -(連字元),則 dir 子命令將顯示本地終端上的清單。
- disconnection:同close。
- ebcdic:type ebcdic 子命令的同義詞。
- exp_cmd 在常規的和試驗性的協定命令中切換。其預設值為關閉。
- file:struct file 子命令的同義詞。
- form [ carriage-control | non-print | telnet ]:指定文件傳送的格式。form 子命令修改 type 子命令,以便按指示的格式發送文件傳送。有效的參數為 carriage-control、non-print 和 telnet。預設為file方式。
- carriage-control 將文件傳送格式設置為 carriage-control。
- non-print將文件傳送格式設置為 non-print。
- telnet將文件傳送格式設置為 Telnet。Telnet 是打開對系統的連接的傳輸控制協定/網間協定 (TCP/IP)。
- get remote-file[local-file]: 將遠端主機的文件remote-file傳至本地硬碟的local-file。如果 LocalFile 參數未指定,將在本地使用遠端文件名,並由 case、ntrans 和 nmap 子命令生成的任何設置進行改變。 ftp 命令在傳送文件時,將使用 type、form、mode 和 struct 子命令的當前設置。
- glob:設定mdelete,mget,mput可用萬用字元文件名,預設不用萬用字元文件名,同命令行的-g參數。
- hash:每傳輸1024位元組,顯示一個hash符號(#)。
- help[cmd]:顯示ftp內部命令cmd的幫助資訊,如:help get。請參考 ? 子命令。
- idle[seconds]:將遠端伺服器的休眠計時器設為[seconds]秒。
- image:設置二進位傳輸方式(同binary)。type image 子命令的同義詞。
- lcd[dir]:將本地工作目錄切換至dir。如果您未指定目錄,ftp 將使用主目錄。
- local M:type local M 子命令的同義詞。
- ls[remote-dir][local-file]:顯示遠端目錄remote-dir並存入本地文件local-file。如果 RemoteDirectory 參數未指定,ftp 命令將列出當前遠端目錄。如果 LocalFile 參數未指定或是一個 -(連字元),則 ftp 命令將顯示本地終端上的清單。
- macdef macro-name:定義一個巨集,遇到macdef下的空行(兩個連續的換行)時,巨集定義結束。巨集定義可多達 16 個,包含 4096 個字元。
$ (美元符號)和 \ (反斜槓) 是 ftp 巨集中的特殊字元。跟隨一個或多個數字的 $ 符號將被調用行中對應的巨集參數所替換(請參考 $ 子命令)。$ 符號後緊隨字母 i 表示將要循環該巨集,$i 字元組合將被每一傳遞中連續的字元替換。
第一個參數用於第一個傳遞,第二個參數用於第二個傳遞,依此類推。\ 符號會防止下一個字元的特殊處理。請使用 \ 符號關閉 $ 和 \.(反斜槓句點)符號的特殊意義。
- mdelete[remote-file]:刪除遠端主機文件。遠端文件名可用萬用字元。
- mdir remote-files local-file:與dir類似,但可指定多個遠端文件,如: mdir *.o.*.zipoutfile 。如果 RemoteDirectories 參數是用空格隔開的遠端目錄清單,則清單中最後一個參數必須是一個本地文件名或 -(連字元)。如果 LocalFile 參數是 -(連字元),mdir 子命令將顯示本地終端上的清單。如果交互式提示啟用(請參考 prompt 子命令),ftp 將提示用戶驗證最後一個參數是本地文件且不是遠端目錄。
- mget remote-files:傳輸多個遠端文件。使用 form、mode、struct 和 type 子命令的當前設置。
- mkdir dir-name:在遠端主機中建一目錄。
- mls remote-file local-file:同nlist,但可指定多個文件名。
- mode [ stream | block ]:設置文件傳送方式。如果參數未提供,則預設值為 stream。
- mode [ stream | block ]:設置文件傳送方式。如果參數未提供,則預設值為 stream。
- modtime file-name:顯示遠端主機文件的最後修改時間。
- mput local-file:將多個文件傳輸至遠端主機。使用 type、form、mode 和 struct 子命令的當前設置。
- newer file-name: 如果遠端機中file-name的修改時間比本地硬碟同名文件的時間更近,則重傳該文件。
- nlist[remote-dir][local-file]:顯示遠端主機目錄的文件清單,並存入本地硬碟的local-file。
- nmap[inpattern outpattern]:打開或關閉文件名映射機制, 使得文件傳輸時,文件中的某些字元相互轉換,如:nmap $1.$2.$3[$1,$2].[$2,$3],則傳輸文件a1.a2.a3時,文件名變為a1,a2。該命令特別適用於遠端主機為非UNIX機的情況。
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[inchars[outchars]]:打開或關閉文件名字元的翻譯機制,如ntrans1R,則文件名LLL將變為RRR。如果 InCharacters 參數指定的字串比 OutCharacters 參數指定的字串長,而且其在 OutCharacters 參數中無對應的字元,則 InCharacters 參數中的字元將被刪除。
- open host[port]:建立指定ftp伺服器連接,可指定連接連接埠。
- passive:進入被動傳輸方式。被動方式關閉時傳送文件(如 get、mget 和 put,或 mput),ftp 伺服器就會打開對客戶機的數據連接。在被動方式下,客戶機在發送和接收數據時打開對主機的數據連接。
- private:將保護級別設置為「private」。在此級別,數據的保護既完整而又機密。
- prompt:設置多個文件傳輸時的交互提示。如果交互式提示啟用(預設值)ftp 在檢索、發送或刪除文件(在 mget、mput, 和 mdelete)之前會進行驗證操作。
- protect:此指令會返回保護的當前級別。
- proxy ftp-cmd:在次要控制連接中,執行一條ftp命令,該命令允許連接兩個ftp伺服器,以在兩個伺服器間傳輸文件。第一條ftp命令必須為open,以首先建立兩個伺服器間的連接。請輸入 proxy ? 子命令,查看其它在二級連接中可執行的 ftp 子命令。
下列子命令在由 proxy 子命令開頭時的表現會不一樣:
open 子命令在自動登錄過程中不定義新的巨集。
close 子命令不會擦除現存的巨集定義。
get 和 mget 子命令從主連接中的主機上將文件傳送到二級連接的主機上。
put、 mput 和 append 子命令從第二連接中的主機上將文件傳送到主連接的主機上。
restart 子命令可由 proxy 命令進行處理。
status 子命令顯示出準確的資訊。
文件傳送要求第二連接上的 FTP 伺服器必須支援 PASV(passive)指令。
- put local-file[remote-file]:將本地文件local-file傳送至遠端主機
- pwd:顯示遠端主機的當前工作目錄。
- quit:同bye,退出ftp會話。
- quote arg1,arg2...:將參數逐字發至遠端ftp伺服器,如:quote syst。執行remotehelp 或 quote help 子命令,均會顯示 String 參數的有效值清單。
注意:涉及數據傳輸的「Quoting」命令會產生不可預見的結果。
- record:struct record 子命令的同義詞。
- recv remote-file[local-file]:同get。
- reget remote-file[local-file]:類似於get,但若local-file存在,則從上次傳輸中斷處續傳。
- reinitialize:刷新所有 I/O 對 FTP 會話進行重新初始化。按照用戶已開始 FTP 會話但未登錄到遠端主機的情況復位所有預設值。
- remotehelp [Subcommand] 請求從遠端 FTP 伺服器獲得幫助。
- rename [fromName][toName]:更改遠端主機文件名。
- reset:清除回答隊列。此子命令將使命令分析重新同步。
- restart marker:從指定的標誌marker處,重新開始get或put或append,如:restart 130。
- rmdir dir-name:刪除遠端主機目錄。
- runique:設置文件名唯一性存儲,若文件存在,則在原文件後加後綴..1,.2等。如果此功能為「關閉」狀態(預設值),ftp 命令會覆蓋本地文件。否則,如果本地文件名與為本地目的文件指定的名稱相同, ftp 將使用.1 修改為本地目的文件指定的名稱。如果本地文件已使用了新名稱,ftp 將把後綴 . 2 添加給所指定的名稱。如果本地文件已使用了此第二個名稱,則 ftp 命令會在找到唯一的文件名或未找到唯一文件名但到達 .99 之前繼續增加後綴。如果 ftp 命令找不到唯一的文件名,ftp 會報告錯誤,傳輸過程也不會發生。請注意 runique 子命令不會影響從 shell 命令產生的本地文件名。
- safe:將保護級別設置為「safe」。在此級別,數據的完整性會得到保護。
- send local-file[remote-file]:同put。
- sendport:切換對於 FTP PORT 指令的使用。
- site arg1,arg2...:將參數作為SITE命令逐字發送至遠端ftp主機。
- size file-name:顯示遠端主機文件大小,如:site idle 7200。
- status:顯示當前ftp狀態。
status [file-name]:若未指定文件名,則顯示遠端主機的狀態,否則顯示文件狀態。
- stream:mode stream 子命令的同義詞。
- struct [ file | record ]:設置數據傳送結構類型。
- sunique:將遠端主機文件名存儲設置為唯一(與runique對應)。請注意遠端伺服器必須支援 STOU 指令。
- system:顯示遠端主機的作業系統類型。
- telnet:form telnet 子命令的同義詞。
- tenex:將文件傳輸類型設置為TENEX機的所需的類型。type tenex 子命令的同義詞。
- tick:設置傳輸時的位元組計數器。
- trace:設置包跟蹤。
- type [ ascii | binary | ebcdic | image | local M | tenex ]:設置文件傳送類型。預設為ascii,binary 類型可能會比 ascii 更有效。
ascii 將文件傳送類型設置為網路 ASCII。此類型為預設值。
binary文件傳送類型設置為二進位映像。此類型可能比 ASCII 傳送更有效。
ebcdic將文件傳送類型設置為 EBCDIC。
image 將文件傳送類型設置為二進位映像。此類型可能比 ASCII 傳送更有效。
local M將文件傳送類型設置為本地。M 參數定義每電腦字位的十進位數。此參數沒有預設值。
tenex 將文件傳送類型設置為 TENEX 機器需要的類型。
- umask[newmask]:將遠端伺服器的預設umask設置為newmask,如:umask3。
- user user-name[password][account]:向遠端主機表明自己的身份,需要口令時,必須輸入口令,如:user anonymous my@email。
- verbose:同命令行的-v參數,即設置詳盡報告方式,ftp伺服器的所有響應都將顯示給用戶,預設為on。
- ?[cmd]:同help
XP FTP 本地端對遠端下令
- append local-file[remote-file]:將本地文件追加到遠端系統主機,若未指定遠端系統文件名,則使用本地文件名。文件名由 ntrans 子命令或 nmap 子命令進行改變。添加文件的時候, append 子命令使用 form、mode, struct、和 type 子命令設定值。
- cd remote-dir:進入遠端主機目錄。
- cdup:進入遠端主機目錄的父目錄。
- chmod mode file-name:將遠端主機文件file-name的存取方式設置為mode,如: chmod 777 a.out 。
- rename [fromName][toName]:更改遠端主機文件名。
- delete remote-file:刪除遠端主機文件。
- mdelete[remote-file]:刪除遠端主機文件。遠端文件名可用萬用字元。
- mkdir dir-name:在遠端主機中建一目錄。
- rmdir dir-name:刪除遠端主機目錄。
- dir[remote-dir][local-file]:顯示遠端目錄並存入本地文件local-file。如果 RemoteDirectory 參數未指定,dir 子命令將列出當前遠端目錄。如果 LocalFile 參數未指定或是一個 -(連字元),則 dir 子命令將顯示於本地終端上。
- ls [remote-dir][local-file]:顯示遠端目錄並存入本地文件local-file。如果 RemoteDirectory 參數未指定,ftp 將列出當前遠端目錄。如果 LocalFile 參數未指定或是一個 -(連字元),則 ftp 將顯示於本地終端上。
- mdir remote-files local-file:與dir類似,但可指定多個遠端文件,如: mdir *.o.*.zipoutfile 。如果 RemoteDirectories 參數是用空格隔開的遠端目錄清單,則清單中最後一個參數必須是一個本地文件名或 -(連字元)。如果 LocalFile 參數是 -(連字元),mdir 子命令將顯示本地終端上的清單。如果交互式提示啟用(請參考 prompt 子命令),ftp 將提示用戶驗證最後一個參數是本地文件且不是遠端目錄。
- mls remote-file local-file:同nlist,但可指定多個文件名。
- get remote-file[local-file]: 將遠端主機的文件remote-file傳至本地硬碟的local-file。如果 LocalFile 參數未指定,將在本地使用遠端文件名,並由 case、ntrans 和 nmap 子命令生成的任何設置進行改變。 ftp 命令在傳送文件時,將使用 type、form、mode 和 struct 子命令的當前設置。
- recv remote-file[local-file]:同get。
- mget remote-files:傳輸多個遠端文件。使用 form、mode、struct 和 type 子命令的當前設置。
- put local-file[remote-file]:將本地文件local-file傳送至遠端主機
- mput local-file:將多個文件傳輸至遠端主機。使用 type、form、mode 和 struct 子命令的當前設置。
- quote arg1,arg2...:將參數逐字發至遠端ftp伺服器,如:quote syst。執行remotehelp 或 quote help 子命令,均會顯示 String 參數的有效值清單。
伺服器端命令
以下命令可辨識(* 代表 須再加參數):
CWD XCWD CDUP XCUP SMNT* QUIT PORT PASV
EPRT EPSV ALLO* RNFR RNTO DELE MDTM RMD
XRMD MKD XMKD PWD XPWD SIZE SYST HELP
NOOP FEAT OPTS AUTH CCC* CONF* ENC* MIC*
PBSZ PROT TYPE STRU MODE RETR STOR STOU
APPE REST ABOR USER PASS ACCT* REIN* LIST
尚待查:
- EPRT |proto|addr|port|
- EPSV 傳回某種port
- FEAT 傳回特點,如MDTM(文件最後修改時間)、REST STREAM、SIZE
- OPTS command [ options]
- CONF base64-data
- REST byte-count
- NLST [ (pathname)]:給出目錄下文件的名稱列表(此 FTP 請求和 ls 命令是同樣的)。
- SMNT* 回應不可應用,
- REIN* 回應不可應用,應為重新啟始
解說:
- CWD 改變工作目錄。
- CDUP 轉到當前工作目錄的父目錄。
- QUIT 終止會話。
- PORT 指定數據連接連接埠。
- PASV 為伺服器間的傳輸做準備。
- ALLO* 分配存儲器(空)。
- RNFR 指定重命名源文件名。
- RNTO 指定重命名目標文件名。
- DELE 刪除文件。
- MDTM 顯示文件最後的修改時間。
- RMD 除去目錄。
- MKD 創建目錄。
- PWD 顯示當前工作目錄。
- SIZE 返回當前文件的大小。
- SYST 顯示伺服器系統的作業系統類型。
- HELP 給出幫助資訊。
- NOOP 無操作。
- AUTH 指定認證 / 安全機制。
ADAT 指定認證 / 安全數據。戰國策不認得的命令,但手冊上有。
- CCC* 指定清除命令通道。
- ENC* 指定私有保護命令。
- MIC* 指定完整性保護命令。
- PBSZ 指定保護緩衝區的大小。
- PROT 指定數據通道保護級別。
- TYPE 用 Type 參數指定數據傳輸類型。
- STRU 指定作為文件結構傳輸的數據結構。
- MODE 指定數據傳輸方式。
- RETR 檢索文件。(下載檔案)
- STOR 存儲文件。(上傳檔案)
- STOU 使用唯一的文件名存儲文件。
- APPE pathname:添加到文件。
- ABOR 終止前一次命令。
- USER 指定用戶名。
- PASS 指定密碼。
- ACCT* 指定帳戶(被忽略)。
- LIST 在目錄中給出列表文件(此 FTP 請求和 ls -lA 命令是同樣的)。
- XCUP 改變當前工作目錄的父目錄(通常不使用)。
- XCWD 改變當前目錄(通常不使用)。
- XMKD 創建目錄(通常不使用)。
- XPWD 列印當前工作目錄(通常不使用)。
- XRMD 除去目錄(通常不使用)。
- SITE 請求支援以下非標準的或者 UNIX 專用的命令:
- UMASK改變 umask( SITE UMASK 002 )。
- IDLE 設置閒置時間( SITE IDLE 60 )。
- CHMOD改變文件的方式( SITE CHMOD 755 文件名)。
- HELP 給出幫助資訊( SITE HELP )。
- STAT 返回伺服器的狀態。
對遠端下指令的例子:
戰國策使用協定
220 ProFTPD 1.3.0 Server (ProFTPD) [202.133.244.132]
COMMAND:> USER pedu2org 登入
COMMAND:> PASS ******** 給密碼
COMMAND:> TYPE I 二進位傳輸
COMMAND:> pwd 顯示當前工作目錄
COMMAND:> TYPE A 文字傳輸
COMMAND:> PORT 192,168,3,170,4,57
COMMAND:> LIST 列出目錄中文件
COMMAND:> CWD httpdocs/edu 改變工作目錄至
COMMAND:> pwd
COMMAND:> TYPE A
COMMAND:> PORT 192,168,3,170,4,58
COMMAND:> LIST
COMMAND:> RNFR jj 改名從jj
COMMAND:> RNTO /httpdocs/edu2/cache/jj 改名至...(結合上列命令,構成搬移目錄或文件)
COMMAND:> REST 0 350 Restarting at 0. Send STORE or RETRIEVE to initiate transfer
COMMAND:> CDUP 回上一層目錄
回應: 220 ProFTPD 1.3.0 Server (ProFTPD) [202.133.244.132]
指令: USER pedu2org
指令: PASS ********
指令: CWD /httpdocs/edu2/
指令: PWD
指令: TYPE I
指令: PASV 進入被動模式(為伺服器間的傳輸做準備)
指令: LIST
指令: site chmod 755 edu2 改變屬性
指令: RETR test.htm 下載檔案
指令: STOR test.html 下傳檔案