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命令解釋模式下輸入.
-p
-i
-n
(譯者注: 使用本選項, 可以實現所謂的 "非互動式登入". 你可以試試下面這條命令:
echo open ftp_server "\n" user my_name my_password "\n" dir "\n" bye | ftp -n 不能使用 rcp 的時候, 可以用這條 ftp 命令來代替.)
-e
-g
-v
-d
從命令列啟動
ftp
時,
可指定欲與之通訊的遠端主機.
如果指定了, ftp
會立即嘗試與遠端 FTP
伺服器建立連線; 否則,
ftp
會進入其命令解釋模式,
等待使用者進一步的指令.
ftp
在等待使用者指令時,
會顯示提示符
‘ftp>
’
ftp
能夠識別以下的命令:
!
[command [args]]$
macro-name [args]macdef
命令來定義.
本命令中的引數不進行檔名匹配,
直接傳給這個宏.account
[passwd]append
local-file [remote-file]ntrans
或 nmap
轉換後,
作為遠端檔名使用.
在檔案傳輸過程中還會使用
type,
forma,
mode
和 structure
的當前設定.ascii
bell
binary
bye
ftp.
檔案結束符
(譯者注: ctrl-D)
有同樣的功能.case
mget
命令會中用到本狀態.
case
狀態若為 on,
遠端主機檔案傳輸到本地時,
檔名中的大寫字母會被轉換為小寫.
預設的 case 狀態為 off.
(譯者注: toggle
這個詞我翻譯成轉換.
意思是說, 如果當前 case
狀態為 on, 你執行 case
這個命令, case
狀態就轉成了 off;
如果當前為 off,
則會變成 on. 下同.)cd
remote-directorycdup
chmod
mode file-nameclose
cr
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 最好.)delete
remote-filedebug
[debug-value]ftp
會顯示每條送往遠端機器的指令,
並在顯示的指令前加上
‘-->
’dir
[remote-directory]
[local-file]ftp
會提示使用者確認最後這個引數是用來存放
dir
顯示結果的本地檔案.
如果不指定
remote-director,
則本命令顯示遠端機器當前目錄下的檔名.
如果不指定 local-file,
或 local-file 指定為
-
,
則輸出結果顯示在你的終端上.disconnect
form
formatget
remote-file [local-file]case,
ntrans
和
nmap
轉換後,
作為本地檔名使用.
檔案傳輸過程中會用到當前的
type,
form,
mode,
和 structure
狀態.glob
mdelete,
mget
和
mput
命令時,
是否進行檔名匹配.
如果 glob 狀態為 off,
則不進行檔名匹配. 對
mput
而言,
檔名匹配規則和本地的
csh(1) 檔名匹配一樣.
對 mdelete
和
mget
而言,
每個遠端機器檔名都分別在遠端機器上進行匹配,
匹配結果中的同名檔案不會合並.
目錄名匹配規則和檔名匹配規則不盡相同,
具體結果要取決於遠端系統和
ftp 服務程式.
你可以使用 ‘mls
remote-files -
’
預先看看匹配結果是否如你所願.
注意: mget
和
mput
可能不會傳送子目錄.
想連著子目錄一起傳送,
你可以使用 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
help
[command]ftp
命令.idle
[seconds]lcd
[directory]ls
[remote-directory]
[local-file]ftp
會提示使用者確認最後一個引數是用來存放
ls
顯示結果的本地檔案.
如果不指定 local-file
, 或者 local-file
指定為 ‘-
’,
則結果顯示到使用者終端上.
可以在本命令中用引號指定附加引數.
例如, 如果遠端系統為
UNIX, 則 ls "-rt /usr"
這條命令會顯示遠端機器
/usr 這個目錄下的檔案,
顯示結果按建立時間由遠到近排序.macdef
macro-nameclose
命令後所有的宏定義會被清除.
在宏中, $ 和 \
這兩個字元為特殊字元.
$ 字元後跟數字,
將在這個宏在執行時將替換為命令列中的引數.
$ 字元後跟字元 i ,
表示迴圈執行當前宏.
在迴圈的第一次, $i
被替換為命令列中的第一個引數;
第二次,
替換為第二個引數,
以此類推. \
後面跟一個字元,
表示這個字元本身.
例如, \ 可以去掉 $
的特殊意義, 表示 $
這個字元本身.mdelete
[remote-files]mdir
remote-files local-filedir
命令相似,
但是允許你指定多個遠端檔案.
如果 prompt 狀態為 on,
ftp
會提示使用者確認最後一個引數是用來存放輸出結果的本地檔案.mget
remote-filesget
命令.
關於檔名匹配, 請參閱
glob
命令.
根據當前的 case,
ntrans,
和 nmap
狀態,
遠端檔名在經過適當的轉換後,
作為本地檔名使用.
檔案被傳輸到本地機器的當前目錄.
你可以用 ‘lcd
directory
’
命令改變本地機器的當前目錄,
也可以用 ‘! mkdir
directory
’
命令新建本地目錄.mkdir
directory-namemls
remote-files local-filenlist
命令相似,
但是允許你指定多個遠端檔案,
而且 local-file
這個引數必須指定.
如果 prompt 狀態為 on,
ftp
會提示使用者確認最後一個引數是用來存放輸出結果的本地檔案.mode
[mode-name]modtime
file-namemput
local-filesput
命令.
關於檔名匹配, 請參閱
glob
命令.
根據當前的 ntrans
和 nmap
狀態,
本地檔名在經過適當的轉換後,
作為遠端檔名使用.newer
file-name [local-file]nlist
[remote-directory]
[local-file]ftp
會提示使用者確認最後一個引數是用來存放顯示結果的本地檔案.
如果不指定本地檔案
local-file,
或者本地檔案
local-file 指定為
‘Fl,’
顯示結果會在使用者終端上顯示出來.nmap
[inpattern outpattern]mput
或
put
命令,
且不指定遠端檔名時,
遠端檔名會被對映;
在執行 mget
或
get
命令,
且不指定本地檔名時,
本地檔名會被對映. 非
unix
的遠端系統常使用不同於
unix 的檔案命名規則,
當用 ftp
連線到這樣的遠端系統時,
本命令會很有用處.
轉換規則由引數
inpattern 和 outpattern
決定.
一個檔名會先經過
ntrans
和 case
的轉換, 再按照
inpattern 進行
nmap
對映. 引數
inpattern
指定轉換前的檔案命名規則.
引數 outpattern
指定轉換後的檔案命名規則.
在 inpattern 和
outpattern
這兩個引數中, 用 $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' . ?? (譯者注:
這一段我沒看懂,
也沒試出來.) `$', '[', ']', `,'
這四個字元有特殊含義,
所以若要使用這四個字元,
需在前面加上 \
以去掉其特殊含義.ntrans
[inchars [outchars]]mput
和
put
命令,
且不指定遠端檔名時,
遠端檔名中的字元會被轉換;
在執行 mget
和
get
命令,
且不指定本地檔名時,
本地檔名中的字元會被轉換.
非 unix
的遠端系統常使用不同於
unix 的檔案命名規則, 用
ftp
連線到這樣的遠端系統時,
本命令會很有用處.
原始檔名中的
inchars
會被替換為對應的
outchars. 如果 inchar
字串比 outchar 長,
則多出的那一部分字元會從原始檔名中刪掉.open
host [port]ftp
是可選的;
如果指定了埠號,
ftp
會嘗試使用這個指定的埠號連線遠端
FTP 主機.
如果自動登陸選項
auto-login
是開啟的話
(預設為開啟), ftp
還會嘗試自動登陸.
(詳見下述)prompt
mget
和
mput
這兩個命令會不加提示地傳送所有指定的檔案,
mdelete
會不加提示地刪掉所有指定的檔案.proxy
ftp-commandopen
命令,
用來建立副連線. 執行
"proxy ?" 命令,
可以看到所有能在副連線中執行的
ftp 命令. 以下的 ftp
命令在副連線中執行時,
效果與在主連線中不同:
在自動登入過程中,
open
不會定義新的宏;
close
不會清除已有的宏定義;
get
和 mget
將檔案從主連線的遠端主機傳送到副連線的遠端主機;
put
, mput
, 和
append
將檔案從副連線的遠端主機傳至主連線的遠端主機.
第三方檔案傳輸取決於副連線的遠端主機是否支援
ftp 協議中的 PASV
命令.put
local-file [remote-file]ntrans
和 nmap
狀態,
本地檔名在經過適當的轉換後,
作為遠端檔名使用.
在檔案傳輸過程中會用到當前的
type,
format,
mode
和 structure
狀態.pwd
quit
bye
命令.quote
arg1 arg2 ...recv
remote-file [local-file]reget
remote-file [local-file]remotehelp
[command-name]remotestatus
[file-name]rename
[from] [to]reset
restart
markerget
或 put
命令; 此時的 get 或 put
命令會從引數
marker 指定的
UNIX
系統檔案偏移處
(一般以位元組計算)
重傳檔案.rmdir
directory-namerunique
get
或
mget
命令取遠端檔案到本地時,
遠端檔案會自動覆蓋本地的同名檔案;
如果 runique 狀態為 on,
則在檔案同名時,
會在取回的檔名後加一個
.1; 如果加了一個 .1
還是與本地檔案重名,
則在遠端檔名後加 .2;
若還是重名, 加 .3;
以此類推, 如果直到 .99
還重名, 則會報錯.
新檔名會顯示給使用者.
注意 runique
狀態並不影響本地 shell
命令的檔案覆蓋.
預設的 runique
狀態為 off.send
local-file [remote-file]sendport
PORT
命令. 預設狀態下,
ftp
每建立一個連線進行資料傳送時,
都會使用一個
PORT
命令. 使用
PORT
命令可以免掉多檔案傳輸時的延遲時間.
如果 PORT
命令失敗, ftp
會使用預設的資料埠.
如果禁止使用
PORT
命令,
則在每次進行資料傳送時不會使用
PORT
命令.
有些版本的 FTP
在具體實現中忽略了
PORT
命令,
但卻錯誤地應答說已經接受了
PORT
指令,
此時就需要使用本命令.site
arg1 arg2 ...SITE
命令原樣傳給遠端 FTP
伺服器.size
file-namestatus
ftp
當前的各種狀態.struct
[struct-name]sunique
STOU
命令.
新生成的不同的遠端檔名會顯示給使用者.
預設的 sunique 狀態為 off,
即自動覆蓋遠端同名檔案.system
tenex
trace
type
[type-name]type
設定為
type-name.
如果不指定引數,
則本命令顯示當前檔案傳送型別.
預設的檔案傳送型別是網路
ASCII 型別.umask
[newmask]user
user-name [password]
[account]ftp
會提示使用者輸入密碼
(無回顯);
如果不指定引數
account, 而遠端 FTP
伺服器需要提供賬號,
ftp
會提示使用者輸入賬號.
如果指定了引數
account,
而在登入過程中遠端
FTP
服務程式不需要賬號,
則在登入完成以後會使用一個
account
命令將賬號傳送給伺服器.
一般而言, ftp
在啟動時, 會與遠端 FTP
伺服器建立連線並自動完成以上的登入過程.
也可以在啟動
ftp
時使用 -n
選項禁止此自動登入功能.verbose
如果引數含有空格, 需用使用一對引號 "" 將其引起來.
按中斷鍵 (一般為 Ctrl-C
) 可放棄當前檔案傳送.
對傳送檔案而言,
此時當前傳送過程會立刻終止;
對檔案接收,
此時會發送一個 ftp
協議中的 ABOR
命令到遠端伺服器,
而剩下未接受的資料會被丟棄.
這個過程有快有慢,
具體取決於遠端伺服器如何實現
ABOR
命令.
如果遠端伺服器不支援
ABOR
命令,
則伺服器會繼續當前檔案傳送,
直到傳送完成,
才再顯示出提示符
‘ftp>.
’
如果所有的本地操作已經完成,
ftp
在等待遠端伺服器應答時,
不會對中斷鍵做出響應.
如果這時候 ftp
協議出了問題,
或如上所述遠端伺服器不支援
ABOR
命令而堅持把當前檔案傳送完,
使用者就會等待很長時間得不到響應.
如果確實是 ftp
協議出了問題,
使用者必需手工殺掉這個
ftp
程序.
ftp
命令中,
若指定檔名作為引數,
則此檔名會經過以下幾步的處理:
-
’,
則在輸出時使用標準輸出
stdin,
在輸入時使用標準輸入
stdout.Ftp
會使用 popen(3)
和所提供的引數建立一個
shell 程序,
並使用標準輸入 stdin
(標準輸出 stdout) 來進行讀
(寫) 操作. 如果 shell
命令中包含空格,
則必須用引號將其引起來;
例如: "ls -lt".
一個有用的例子是:
"dir | more".glob
命令).
如果 ftp
命令只需要單個的本地檔案作引數
(如 put),
則僅使用匹配結果裡的第一個檔名.mget
和 get
命令而言,
如果不指定本地檔名,
則遠端檔名在經過
case,
ntrans,
或
nmap
轉換後,
作為本地檔名使用.
如果 runique
狀態為
on,
本地檔名還可能加上一個字尾以免覆蓋.mput
和 put
命令而言,
如果不指定遠端檔名,
則本地檔名在經過
ntrans
或 nmap
轉換後,
作為遠端檔名使用.
如果 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
使用了以下的環境變數:
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) |