Arch manual pages

FTP(1) General Commands Manual FTP(1)

ftp
Internet 文件傳輸程序 (file transfer program)

ftp [-pinegvd] [host] pftp [-inegvd] [host]

用戶通過 Ftp 這個程序來使用 Internet 上的標準文件傳輸協議 (File Transfer Protocol). 本程序允許用戶向遠端網站發送文件, 或從遠端網站接收文件.

參數選項可以在命令行啓動ftp時指定, 也可以在ftp命令解釋模式下輸入.

使用被動模式進行數據傳輸. 如果你本地網絡有防火牆, 外部主機不能連接到你這個客戶端, 這個選項就派上用場了. 本選項要求 ftp 服務器支持 PASV 命令. 如果使用 pftp 從命令行啓動 ftp, 本選項是默認打開的.
進行多個文件傳輸時關掉交互式的確認提示.
一般,在啓動 ftp 時, ftp 會試着進行自動登錄. 本選項可以關掉這個功能. 如果 auto-login 功能被啓用的話, ftp 會在用戶 home 目錄下的 .netrc (參閱 netrc(5)) 文件中查找遠端主機上的用戶帳號. 如果 .netrc 文件中用戶帳號這一項不存在, ftp 會提示用戶輸入遠端主機上的登錄名 (缺省爲用戶在本地機器上的帳號), 如果需要, 還會提示你輸入密碼和用來登錄的帳號. ??

(譯者注: 使用本選項, 可以實現所謂的 "非交互式登錄". 你可以試試下面這條命令:

echo open ftp_server "\n" user my_name my_password "\n" dir "\n" bye | ftp -n 不能使用 rcp 的時候, 可以用這條 ftp 命令來代替.)

如果被編譯成了 ftp 可執行格式, 本選項會關掉命令編輯和歷史命令功能; 否則什麼也不做. ??
關掉文件名匹配功能.
顯示詳細信息. 本選項使得 ftp 顯示遠端服務器的所有響應, 並在數據傳輸完成後顯示傳輸數據的統計信息.
打開 debug 模式.

從命令行啓動 ftp 時, 可指定欲與之通訊的遠端主機. 如果指定了, ftp 會立即嘗試與遠端 FTP 服務器建立連接; 否則, ftp 會進入其命令解釋模式, 等待用戶進一步的指令. ftp 在等待用戶指令時, 會顯示提示符 ‘ftp>

ftp 能夠識別以下的命令:

[command [args]]
在本地機器上啓動一個交互的shell. 如果本命令帶有參數, 第一個參數作爲 shell 命令直接執行, 其它的參數成爲這個 shell 命令的參數.
macro-name [args]
執行宏 macro-name 所指代的命令. 宏使用 macdef 命令來定義. 本命令中的參數不進行文件名匹配, 直接傳給這個宏.
[passwd]
在你成功登錄以後, 本命令可以提供一個附加的密碼, 遠端系統會用這個密碼來訪問某些資源. 如果不指定參數, 則會提示用戶輸入密碼; 輸入密碼時, 回顯會被禁止.
local-file [remote-file]
添加本地文件到遠端機器上. 如果沒有指定 remote-file, 則本地文件名在經過 ntransnmap 轉換後, 作爲遠端文件名使用. 在文件傳輸過程中還會使用 type, forma, modestructure 的當前設置.
將當前文件傳輸方式設置爲網絡 ASCII 方式, 即文本模式. 這也是缺省的文件傳送方式.
每個文件傳送命令完成後響鈴提示.
將當前文件傳輸方式設置爲 binary image, 即二進制模式.
終止與當前 FTP 服務器的連接, 退出 ftp. 文件結束符 (譯者注: ctrl-D) 有同樣的功能.
轉換 case 狀態, 即遠端主機文件名大小寫轉換規則. mget 命令會中用到本狀態. case 狀態若爲 on, 遠端主機文件傳輸到本地時, 文件名中的大寫字母會被轉換爲小寫. 缺省的 case 狀態爲 off. (譯者注: toggle 這個詞我翻譯成轉換. 意思是說, 如果當前 case 狀態爲 on, 你執行 case 這個命令, case 狀態就轉成了 off; 如果當前爲 off, 則會變成 on. 下同.)
remote-directory
改變遠端機器上的當前目錄到 remote-directory.
改變遠端機器上的當前目錄到其父目錄, 即其上級目錄.
mode file-name
將遠端系統上文件 file-name 的權限改爲 mode.
終止與當前遠端服務器的 FTP 連接, 回到命令解釋模式. 所有定義的宏都會被清除.
轉換 cr 狀態, 即 ascii 方式下取文件時的回車換行轉換規則. 用 ascii 方式獲取文件時, 文件內容被分割爲一條條紀錄, 以回車換行符爲分隔符; 如果 cr 狀態爲 on, 回車換行符會被轉換爲 UNIX 系統的單個換行符. 非 UNIX 系統的文本文件中可能含有單個換行符; 在進行 ascii 方式的文件傳輸時, 只有將 cr 狀態設置爲 off, 這些單個換行符才能與回車換行符區分開來. cr 的缺省狀態爲 on. (譯者注: 回車符的 ASCII 碼爲 0D, 對應的 C 語言轉義字符爲 \r; 換行符的 ASCII 碼爲 0A , 對應的 C 語言轉義字符爲 \n; UNIX 下的文本文件, 換行的時候就一個換行符; DOS 下的文本文件, 換行的時候是兩個字符: 回車 + 換行. 服務器端 ftpd 在用 ascii 方式發送文件時, 會先把單個換行轉換爲回車 + 換行, 再送到網絡上傳輸; 客戶端 ftp 在用 ascii 方式接受文件時, 如果 cr 狀態爲 on, ftp 會把回車 + 換行轉換爲單個換行; 如果爲 off, 則不進行這種轉換. 如果網上傳輸的數據中同時含有單個換行和回車 + 換行, 你就一定要把 cr 狀態設爲 off, 才能把數據原樣取回來; 否則, 取回來的單個換行和回車 + 換行都轉換成了單個換行, 你就分不清這兩種了. 還是使用 binary 最好.)
remote-file
刪除遠端機器上的文件 remote-file.
[debug-value]
轉換 debugging 狀態, 即是否跟蹤每條指令. debug-value 是可選的, 其值用來設置跟蹤的級別. 當 debigging 狀態爲 on 時, ftp 會顯示每條送往遠端機器的指令, 並在顯示的指令前加上 ‘-->
[remote-directory] [local-file]
顯示遠端機器目錄 remote-director 下的文件名. local-file 這個參數是可選的. 如果指定了這個參數, 本命令的顯示結果會保存在 local-file 這個本地文件中. 如果 prompt 狀態爲 on, ftp 會提示用戶確認最後這個參數是用來存放 dir 顯示結果的本地文件. 如果不指定 remote-director, 則本命令顯示遠端機器當前目錄下的文件名. 如果不指定 local-file,local-file 指定爲 -, 則輸出結果顯示在你的終端上.
close.
format
將文件傳輸格式設置爲 format. 缺省格式爲 “file”. ??
remote-file [local-file]
把遠端機器上的文件 remote-file 取回到本地. 如果不指定本地文件名, 則遠端文件名在經過 case, ntransnmap 轉換後, 作爲本地文件名使用. 文件傳輸過程中會用到當前的 type, form, mode,structure 狀態.
轉換 glob 狀態, 即在執行 mdelete, mgetmput 命令時, 是否進行文件名匹配. 如果 glob 狀態爲 off, 則不進行文件名匹配. 對 mput 而言, 文件名匹配規則和本地的 csh(1) 文件名匹配一樣. 對 mdeletemget 而言, 每個遠端機器文件名都分別在遠端機器上進行匹配, 匹配結果中的同名文件不會合並. 目錄名匹配規則和文件名匹配規則不盡相同, 具體結果要取決於遠端系統和 ftp 服務程序. 你可以使用 ‘mls remote-files -’ 預先看看匹配結果是否如你所願. 注意: mgetmput 可能不會傳送子目錄. 想連着子目錄一起傳送, 你可以使用 binary 方式傳送這個子目錄的 tar(1) 包. (譯者注: 1、 文件匹配是說, *n 代表所有以 n 結尾的文件. 例如, 在你本地 linux 機器當前目錄下有三個文件 Xie Wen Min , 在 shell 下用 echo *n 這條命令, 結果爲 Wen Min , 可見 *n 被 shell 匹配爲 Wen Min. 在 ftp 中, 如果 glob 爲 on , mput *n 這條指令會被匹配爲 mput Wen Min , 本地的 Wen Min 兩個文件被傳送到遠端. 如果 glob 爲 off , mput *n 這條指令不會被匹配, 於是 mput 會試圖把文件名爲 "*n" 的本地文件傳到遠端, 如果本地沒有這個名爲 "*n" 的文件, ftp 就會報錯. 2、 mput 是把本地文件送到遠端機器, 故其匹配規則與本地 shell的文件名匹配一致. mget, mdelete 則是把遠端機器上的文件送到本地, 故其匹配規則和最終結果要取決於遠端系統. 3、 考慮如下情況: 遠端機器上有三個文件 Xie, Wen, Min 如果執行 mget X* W* *n, 顯然, 匹配結果會是 Xie Wen Min Wen. 雖然 Wen 這個文件出現了兩次, 但 ftp 不會把這兩個文件名合爲一個, 所以 Wen 這個文件會被 mget 兩次, 第二次覆蓋第一次. 如果 mdel X* W* *n, Wen 這個文件會被刪兩次, 第二次報錯.)
轉換 hash 狀態, 即是否顯示數據傳輸進度. 如果 hash 狀態爲 on, 每傳送完一個 1024 字節的數據塊時顯示一個 # 號.
[command]
顯示指定命令 command 的簡要說明. 如果不指定參數, 本命令列出所有已知的 ftp 命令.
[seconds]
將遠端服務器的最長空閒時間設爲 seconds 秒. 如果不指定參數 seconds, 則本命令顯示當前的最長空閒時間值. (譯者注:如果在最長空閒時間內沒執行任何 ftp 命令, 與遠端機器的連接將自動終止. )
[directory]
改變本地的當前工作目錄. 如果不指定參數 directory, 則切換到用戶的 home 目錄.
[remote-directory] [local-file]
顯示遠端機器目錄下的文件名列表. 具體如何顯示與遠端系統有關; 例如, 大多數 UNIX 系統顯示 shell 命令 ls -l 的輸出 (參閱 nlist ). 如果不指定 remote-directory 則顯示遠端機器當前目錄的內容. 如果 prompt 狀態爲 on , ftp 會提示用戶確認最後一個參數是用來存放 ls 顯示結果的本地文件. 如果不指定 local-file , 或者 local-file 指定爲 ‘-’, 則結果顯示到用戶終端上. 可以在本命令中用引號指定附加參數. 例如, 如果遠端系統爲 UNIX, 則 ls "-rt /usr" 這條命令會顯示遠端機器 /usr 這個目錄下的文件, 顯示結果按創建時間由遠到近排序.
macro-name
定義一個宏. 執行本命令後, 接下來輸入的內容會存放到宏 macro-name 裏. 空行 (文件中的連續換行, 或終端的回車換行) 表示宏定義結束. 最多隻能定義 16 條宏, 而且所有的宏內容加起來不能超過 4096 字節. 執行 close 命令後所有的宏定義會被清除. 在宏中, $ 和 \ 這兩個字符爲特殊字符. $ 字符後跟數字, 將在這個宏在執行時將替換爲命令行中的參數. $ 字符後跟字符 i , 表示循環執行當前宏. 在循環的第一次, $i 被替換爲命令行中的第一個參數; 第二次, 替換爲第二個參數, 以此類推. \ 後面跟一個字符, 表示這個字符本身. 例如, \ 可以去掉 $ 的特殊意義, 表示 $ 這個字符本身.
[remote-files]
刪除遠端機器文件 remote-files.
remote-files local-file
dir 命令相似, 但是允許你指定多個遠端文件. 如果 prompt 狀態爲 on, ftp 會提示用戶確認最後一個參數是用來存放輸出結果的本地文件.
remote-files
匹配參數 remote-files 中指定的遠端文件名, 對匹配結果裏的每個文件都執行一個 get 命令. 關於文件名匹配, 請參閱 glob 命令. 根據當前的 case, ntrans,nmap 狀態, 遠端文件名在經過適當的轉換後, 作爲本地文件名使用. 文件被傳輸到本地機器的當前目錄. 你可以用 ‘lcd directory’ 命令改變本地機器的當前目錄, 也可以用 ‘! mkdir directory’ 命令新建本地目錄.
directory-name
在遠端機器上創建目錄.
remote-files local-file
nlist 命令相似, 但是允許你指定多個遠端文件, 而且 local-file 這個參數必須指定. 如果 prompt 狀態爲 on, ftp 會提示用戶確認最後一個參數是用來存放輸出結果的本地文件.
[mode-name]
將文件傳輸模式設置爲 mode-name 所指定的模式. 缺省模式爲 “stream” 模式. ??
file-name
顯示遠端機器上文件的最後修改時間.
local-files
匹配參數中指定的本地文件名, 對匹配結果裏的每個文件都執行一個 put 命令. 關於文件名匹配, 請參閱 glob 命令. 根據當前的 ntransnmap 狀態, 本地文件名在經過適當的轉換後, 作爲遠端文件名使用.
file-name [local-file]
比較遠端文件和本地文件的修改時間, 如果遠端文件比本地文件新, 或本地文件不存在, 則從遠端機器上取此文件.
[remote-directory] [local-file]
顯示遠端機器上指定目錄下的文件列表. 如果不指定參數 remote-directory, 則顯示遠端機器當前目錄的內容. 如果 prompt 狀態爲 on, ftp 會提示用戶確認最後一個參數是用來存放顯示結果的本地文件. 如果不指定本地文件 local-file, 或者本地文件 local-file 指定爲 ‘Fl,’ 顯示結果會在用戶終端上顯示出來.
[inpattern outpattern]
設置或取消文件名映射機制. 如果不指定參數, 則本命令取消文件名映射機制. 如果指定了參數, 則在執行 mputput 命令, 且不指定遠端文件名時, 遠端文件名會被映射; 在執行 mgetget 命令, 且不指定本地文件名時, 本地文件名會被映射. 非 unix 的遠端系統常使用不同於 unix 的文件命名規則, 當用 ftp 連接到這樣的遠端系統時, 本命令會很有用處. 轉換規則由參數 inpatternoutpattern 決定. 一個文件名會先經過 ntranscase 的轉換, 再按照 inpattern 進行 nmap 映射. 參數 inpattern 指定轉換前的文件命名規則. 參數 outpattern 指定轉換後的文件命名規則. 在 inpatternoutpattern 這兩個參數中, 用 $1, $2, ..., $9 來替代變量; 用 \$ 替代 $ 字符; 其餘的字符則沒有特殊含義. 例如, 若 inpattern 爲 $1.$2, 則對於文件名 mydata.data, $1 取值 mydata, $2取值 data. 結果文件名由 outpattern 決定. 在 outpattern 中, $1, $2, ..., $9 被相應的取值代替, 作爲最終結果. $0 被替換爲整個原始文件名. 對方括號括起來的兩個變量 [$x,$y] 而言, 若 $x 非空, 則其相當於 $x; 否則相當於 $y (以上 x,y 爲數字). 舉例如下: 輸入命令行 nmap $1.$2.$3 [$1,$2].[$2,file], 則 原始文件名 myfile.data 會被映射爲 myfile.data, 原始文件名 myfile.data.old 會被映射爲 myfile.data, 原始文件名 myfile 會被映射爲 myfile.file, 原始文件名 .myfile 會被映射爲 myfile.myfile, Spaces may be included in outpattern, as in the example: `nmap $1 sed "s/ *$//" > $1' . ?? (譯者注: 這一段我沒看懂, 也沒試出來.) `$', '[', ']', `,' 這四個字符有特殊含義, 所以若要使用這四個字符, 需在前面加上 \ 以去掉其特殊含義.
[inchars [outchars]]
設置或取消文件名字符轉換機制. 如果不指定參數, 則本命令取消文件名字符轉換機制. 如果指定了參數, 則在執行 mputput 命令, 且不指定遠端文件名時, 遠端文件名中的字符會被轉換; 在執行 mgetget 命令, 且不指定本地文件名時, 本地文件名中的字符會被轉換. 非 unix 的遠端系統常使用不同於 unix 的文件命名規則, 用 ftp 連接到這樣的遠端系統時, 本命令會很有用處. 原始文件名中的 inchars 會被替換爲對應的 outchars. 如果 inchar 字符串比 outchar 長, 則多出的那一部分字符會從原始文件名中刪掉.
host [port]
連接到指定的遠端主機 host FTP 服務器. 端口號 ftp 是可選的; 如果指定了端口號, ftp 會嘗試使用這個指定的端口號連接遠端 FTP 主機. 如果自動登陸選項 auto-login 是打開的話 (缺省爲打開), ftp 還會嘗試自動登陸. (詳見下述)
轉換 prompt 狀態, 即是否進行交互提示. 如果 prompt 狀態爲 on , 在傳送多個文件時, ftp 會提示用戶選擇要上傳或下載的文件; 如果 prompt 狀態爲 off (缺省爲 on), mgetmput 這兩個命令會不加提示地傳送所有指定的文件, mdelete 會不加提示地刪掉所有指定的文件.
ftp-command
在副連接上執行 ftp 命令. 本命令允許同時連接到兩個遠端 ftp 服務器, 並在這兩個遠端服務器之間傳送文件. (譯者注: 原始的 ftp 所建立的連接爲 primary control connection, 主連接; 使用 proxy open 所建立的連接爲 secondary control connection, 副連接. 在副連接上運行 ftp 命令, 即在 ftp 命令前加上 proxy 前綴, 如 proxy open, proxy put 等. 以下將這種 ``proxy ftp command'' 譯爲 "代理命令".) 第一個執行的代理命令應該是 open 命令, 用來建立副連接. 運行 "proxy ?" 命令, 可以看到所有能在副連接中運行的 ftp 命令. 以下的 ftp 命令在副連接中運行時, 效果與在主連接中不同: 在自動登錄過程中, open 不會定義新的宏; close 不會清除已有的宏定義; getmget 將文件從主連接的遠端主機傳送到副連接的遠端主機; put, mput, 和 append 將文件從副連接的遠端主機傳至主連接的遠端主機. 第三方文件傳輸取決於副連接的遠端主機是否支持 ftp 協議中的 PASV 命令.
local-file [remote-file]
將本地文件傳至遠端主機. 如果不指定參數 remote-file, 則根據當前的 ntransnmap 狀態, 本地文件名在經過適當的轉換後, 作爲遠端文件名使用. 在文件傳輸過程中會用到當前的 type, format, modestructure 狀態.
顯示遠端機器的當前路徑.
bye 命令.
arg1 arg2 ...
將你指定的參數原樣送到遠端 FTP 服務器. (譯者注: 你輸入的 ftp 命令, 經由本地 ftp 客戶程序解釋, 轉換成 ftp 協議命令, 再發送給遠端 ftp 服務程序. 這些轉換後的 ftp 協議命令, 叫做 raw ftp command, 也就是本命令所能使用的參數. 關於這些參數, 請參閱 remotehelp 命令. 下文中出現的大寫字母的命令都是 raw ftp command.)
remote-file [local-file]
同 get 命令.
remote-file [local-file]
和 get 命令相似, 略有差異如下: 如果本地文件 local-file 的長度比遠端文件 remote-file 短, ftp 會認爲這是由於上一次傳送異常中斷, 導致本地文件只是遠端文件的開頭一部分, 故 reget 會從本地文件的最後開始續傳. 在連接不穩、經常異常斷掉的網絡中傳送大文件時, 本命令會很有用.
[command-name]
顯示遠端 FTP 服務程序的幫助信息. 如果指定了參數 command-name, 則此參數也會一併傳給遠端服務器.
[file-name]
如果不指定參數, 本命令顯示遠端機器的狀態. 如果指定了參數 file-name, 則顯示遠端文件 file-name 的狀態.
[from] [to]
將遠端機器上的文件 from 重命名爲 to.
清除應答隊列. 本命令使本地 ftp 客戶和遠端 ftp 服務程序 重新同步命令/應答序列. 遠端 ftp 服務程序可能出錯, 並導致 ftp 協議出現錯誤, 此時需要使用本命令.
marker
使用本命令後, 接下來應使用一個 getput 命令; 此時的 get 或 put 命令會從參數 marker 指定的 UNIX 系統文件偏移處 (一般以字節計算) 重傳文件.
directory-name
刪除遠端機器上的目錄.
轉換 runique 狀態, 即本地同名文件是否自動覆蓋. 如果 runique 狀態爲 off, 則在使用 getmget 命令取遠端文件到本地時, 遠端文件會自動覆蓋本地的同名文件; 如果 runique 狀態爲 on, 則在文件同名時, 會在取回的文件名後加一個 .1; 如果加了一個 .1 還是與本地文件重名, 則在遠端文件名後加 .2; 若還是重名, 加 .3; 以此類推, 如果直到 .99 還重名, 則會報錯. 新文件名會顯示給用戶. 注意 runique 狀態並不影響本地 shell 命令的文件覆蓋. 缺省的 runique 狀態爲 off.
local-file [remote-file]
同 put 命令.
轉換 sendport 狀態, 即是否使用 PORT 命令. 缺省狀態下, ftp 每建立一個連接進行數據傳送時, 都會使用一個 PORT 命令. 使用 PORT 命令可以免掉多文件傳輸時的延遲時間. 如果 PORT 命令失敗, ftp 會使用缺省的數據端口. 如果禁止使用 PORT 命令, 則在每次進行數據傳送時不會使用 PORT 命令. 有些版本的 FTP 在具體實現中忽略了 PORT 命令, 但卻錯誤地應答說已經接受了 PORT 指令, 此時就需要使用本命令.
arg1 arg2 ...
本命令將參數作爲 SITE 命令原樣傳給遠端 FTP 服務器.
file-name
顯示遠端機器上文件 file-name 的大小.
顯示 ftp 當前的各種狀態.
[struct-name]
將文件傳輸結構 structure 設置爲參數 struct-name. 缺省取值爲 stream. ??
轉換 sunique 狀態, 即遠端同名文件是否自動覆蓋. 要使用本命令, 遠端的 ftp 服務程序必須支持 ftp 協議中的 STOU 命令. 新生成的不同的遠端文件名會顯示給用戶. 缺省的 sunique 狀態爲 off, 即自動覆蓋遠端同名文件.
顯示遠端機器的操作系統類型.
設置文件傳輸方式爲與 TENEX 機器通訊所需要的方式. ??
轉換 trace 狀態, 即是否跟蹤每個數據包.
[type-name]
將文件傳送類型 type 設置爲 type-name. 如果不指定參數, 則本命令顯示當前文件傳送類型. 缺省的文件傳送類型是網絡 ASCII 類型.
[newmask]
設置遠端機器上的文件掩碼爲 newmask. 如果不指定參數 newmask, 則本命令顯示當前的文件掩碼.
user-name [password] [account]
使用 [user-name] 作爲用戶名登錄遠端 FTP 服務器. 如果不指定參數 password, 而遠端服務器需要提供密碼, 則 ftp 會提示用戶輸入密碼 (無回顯); 如果不指定參數 account, 而遠端 FTP 服務器需要提供賬號, ftp 會提示用戶輸入賬號. 如果指定了參數 account, 而在登錄過程中遠端 FTP 服務程序不需要賬號, 則在登錄完成以後會使用一個 account 命令將賬號發送給服務器. 一般而言, ftp 在啓動時, 會與遠端 FTP 服務器建立連接並自動完成以上的登錄過程. 也可以在啓動 ftp 時使用 -n 選項禁止此自動登錄功能.
轉換 verbose 狀態, 即是否顯示詳細信息. 如果 verbose 狀態爲 on , 則會顯示遠端 FTP 服務器的每一個響應, 並在文件傳送結束後顯示關於傳輸效率的統計信息. 缺省的 verbose 狀態爲 on .
? [command]
同 help 命令.

如果參數含有空格, 需用使用一對引號 "" 將其引起來.

按中斷鍵 (一般爲 Ctrl-C ) 可放棄當前文件傳送. 對發送文件而言, 此時當前發送過程會立刻終止; 對文件接收, 此時會發送一個 ftp 協議中的 ABOR 命令到遠端服務器, 而剩下未接受的數據會被丟棄. 這個過程有快有慢, 具體取決於遠端服務器如何實現 ABOR 命令. 如果遠端服務器不支持 ABOR 命令, 則服務器會繼續當前文件傳送, 直到傳送完成, 纔再顯示出提示符 ‘ftp>.

如果所有的本地操作已經完成, ftp 在等待遠端服務器應答時, 不會對中斷鍵做出響應. 如果這時候 ftp 協議出了問題, 或如上所述遠端服務器不支持 ABOR 命令而堅持把當前文件發送完, 用戶就會等待很長時間得不到響應. 如果確實是 ftp 協議出了問題, 用戶必需手工殺掉這個 ftp 進程.

ftp 命令中, 若指定文件名作爲參數, 則此文件名會經過以下幾步的處理:
  1. 如果指定的文件名爲 ‘-’, 則在輸出時使用標準輸出 stdin, 在輸入時使用標準輸入 stdout.
  2. 如果指定的文件名首字母是 ‘|,’ 則此參數餘下的部分被當作是一個 shell 命令. Ftp 會使用 popen(3) 和所提供的參數創建一個 shell 進程, 並使用標準輸入 stdin (標準輸出 stdout) 來進行讀 (寫) 操作. 如果 shell 命令中包含空格, 則必須用引號將其引起來; 例如: "ls -lt". 一個有用的例子是: "dir | more".
  3. 如果上述兩步處理失敗, 而 globbing 狀態爲 on , 本地文件名會進行匹配, 匹配規則同 csh(1) (參閱 glob 命令). 如果 ftp 命令只需要單個的本地文件作參數 (如 put), 則僅使用匹配結果裏的第一個文件名.
  4. mgetget 命令而言, 如果不指定本地文件名, 則遠端文件名在經過 case, ntrans,nmap 轉換後, 作爲本地文件名使用. 如果 runique 狀態爲 on, 本地文件名還可能加上一個後綴以免覆蓋.
  5. mputput 命令而言, 如果不指定遠端文件名, 則本地文件名在經過 ntransnmap 轉換後, 作爲遠端文件名使用. 如果 sunique 狀態爲 on, 遠端服務器可能還會給遠端文件名加上一個後綴以免覆蓋.

FTP 規格說明書中指定了許多可能影響文件傳送的參數. type 可設置爲 ascii, image (binary), ebcdic, 或 local byte size (一般用於 PDP-10's 和 PDP-20's 機器). Ftp 支持 ascii 和 image 類型的文件傳輸, 對於 tenex 機器, 還支持 local byte size 8 方式的文件傳輸.

其它可能影響文件傳輸的參數有 mode, form,struct. Ftp 只支持這些參數的缺省值.

Ftp 使用了以下的環境變量:
本環境變量指明瞭文件 .netrc 的缺省路徑, 如果其存在的話.
本環境變量指明瞭缺省的 shell.

ftpd(8,) RFC 959

ftp 命令最初見於 4.2.BSD

對許多 ftp 命令而言, 其能否正確執行, 取決於遠端服務器如何響應.

使用 4.2BSD 的 ascii 方式傳送文件時, 對回車換行符的處理有錯誤. 本版本中已經修正了此問題, 但同時帶來了另一個問題: 使用 ascii 方式, 與 4.2BSD 服務器互傳二進制文件時可能出錯. 要避免此問題, 請使用 binary image 類型來傳送文件.

本頁面中文版由中文 man 手冊頁計劃提供。
中文 man 手冊頁計劃:https://github.com/man-pages-zh/manpages-zh
August 15, 1999 Linux NetKit (0.16)