概述
Tops-20,因為在ARPA網上存在有樹狀目錄的包括Tops-20和Multics在內的其他主機,我們試圖儘可能地使這些命令成為常規命令。
常規命令
在伺服器上添加了四條命令:
XMKD child
建立一個名為“child”的目錄。
XRMD child
刪除名為“child”的目錄。
XPWD
列印當前工作目錄。
XCUP
改變目錄到當前工作目錄的父目錄。
"child"參數將作為當前工作目錄的子目錄被創建(刪除),除非“child”字元串包含足夠的信息指明其他的伺服器,例如,“child”是一個絕對路徑名(在Multics和Unix中),或在Tops-20中chlid象""的東西。
回答碼
XCUP命令是XCWD中的一種特殊情況,包含在簡單化執行的程式中,這些程式在對父目錄命名有不同語法的作業系統之間傳遞目錄樹。因此我們推薦XCUP的回答碼與XCWD的回答碼相同。同樣地, 我們推薦XRMD的回答碼和與其相似的檔案刪除的命令DELE的回答碼相同。
然而,XMKD的回答碼比較複雜。一個新近創建的目錄或許會成為XCWD命令的將來的目標。不幸的是,XMKD的參數不可能總是XCWD合適的參數。這裡有種情況,例如,在Tops-20上,一個子目錄只需在給出名字的情況下就可以被創建。也就是說,在Tops-20伺服器的FTP上,下列命令序列
XMKD MYDIR
XCWD MYDIR
將會出錯。一個新目錄可能僅僅只用“絕對的”名字指明;例如,如果在目錄下使用上述XMKD命令,新的子目錄只可使用名稱來指明。甚至在Unix和Multics上,XMKD中給定的參數可能也不合適。如果它是一個“相對”的路徑名(也就是說,一個路徑名被認為與當前目錄有關),用戶要到達子目錄必須在同一當前目錄下才行。如果依賴於應用程式,將會造成不方便。在任何情況下它都不會很健壯。
要解決這些問題,在成功完成XMKD的命令之外,伺服器應當返回一行表格:
257<空格>"<目錄名>"<空格><注釋>
也就是說,伺服器會告訴用戶在創建目錄時要用到什麼字元串。目錄名可以包含任何字元;內嵌的雙引號要用雙引號轉義(“雙重引用”慣例)。例如,用戶進入目錄/usr/dm,並創建一名為child的子目錄:
XCWD /usr/dm
200 directory changed to /usr/dm
XMKD child
257 "/usr/dm/child" directory created
一個帶有內嵌雙引號的例子:
XMKD foo"bar
257 "/usr/dm/foo""bar" directory created
XCWD /usr/dm/foo"bar
200 directory changed to /usr/dm/foo"bar
如果已存在一個同名子目錄,我們認為應解釋為一個錯誤,在這種情況下,伺服器應給出“access denied(拒絕訪問)”的錯誤回答。
CWD /usr/dm
200 directory changed to /usr/dm
XMKD child
521-"/usr/dm/child" directory already exists;
521 taking no action.
我們推薦XMKD的失敗回答與檔案創建命令STOR相類似。
同樣,如果一個與子目錄同名的檔案與子目錄創建相衝空,我們也推薦返回“access denied(拒絕訪問)”(這是一個Unix上的問題,但不是Top-20上的)。
由於XPWD命令與XMKD命令完成返回同一種的信息,我們也套用257回答碼來表示這一命令成功執行。這裡我們提交一個試驗命令的回答碼摘要。圓括弧外給出的代碼與RFC691相一致;也就是那份RFC中被建議更新的舊協定的代碼。BBN-Unix伺服器和用戶程式均執行這些代碼。
回答碼257是唯一的新編碼。圓括弧中顯示的回答碼是“新”FTP協定的,大多數已最近記錄在RFC765中。
為RFX765協定發明的代碼是251。
命令: 回答碼 解釋
XMKD 創建目錄
257 (251) "pathname" created("pathname" 已創建)
521 (450) "pathname" already exists("pathname" 已存在)
506 (502) action not implemented(操作未執行)
521 (450) access denied(拒絕訪問)
550 (501) bad pathname syntax or ambiguous(錯誤或不明確的路徑名)
425 (451) random file system error(隨機檔案系統錯誤)
XCUP 改變目錄到上一級目錄
200 (200) working directory changed(工作目錄已改變)
506 (502) action not implemented(操作未執行)
507 (551) no superior directory(無上一級目錄)
521 (450) access denied(拒絕訪問)
425 (451) random file system error(隨機檔案系統錯誤)
XRMD 刪除目錄
224 (250) deleted ok(刪除完成)
506 (502) action not implemented(操作未執行)
521 (450) access denied(拒絕訪問)
550 (501) bad pathname syntax or ambiguous(錯誤或不明確的路徑名)
425 (451) random file system error(隨機檔案系統錯誤)
XPWD 列印當前工作目錄
257 (251) "pathname"(“路徑名”)
425 (451) random file system error(隨機檔案系統錯誤)
506 (502) action not implemented(操作未執行)
SUBTLETIES
因為這些命令在機器間傳遞目錄樹非常有用,所以我們必須強調這樣一個事實,即XMKD的參數應解釋為當前工作目錄下的子目錄,除非它包含足夠的能夠說明其他情況的目的主機信息。
下面是一個Tops-20上假想的例子:
XCWD
200 Working directory changed
XMKD overrainbow
257 "" directory created
XCWD overrainbow
431 No such directory
XCWD
200 Working directory changed
XCWD
200 Working directory changed to
XMKD
257 "" directory created
XCWD
注意事項
第一個例子建立一個連線的目錄下的一個子目錄。相反,第二個例子的參數為Tops-20包含了足夠的信息,指明目錄是一個上層目錄。同時注意,在第一個例子中,用戶“違反”協定,試圖用一個不同於被Tops-20返回的名字訪問剛創建的目錄。在已存在目錄的情況下可能導致問題;這是某些Tops-20執行中固有的不確定性。XRMK命令也需要進行類似的考慮。這就是:不考慮在哪裡操作,為了表示相關的絕對路徑名,違反主機的慣例,主機會把XMKD和KRMD的操作視為對子目錄操作。XMKD命令的回答必須包含創建目錄的絕對路徑名。
基本資料
File Transfer Protocol (RFC 765), Postel, J., June 1980
CWD Command of FTP (RFC 697), Lieb, J., NIC 32963, 14 July 1975
One More Try on the FTP (RFC 691), Harvey, B., NIC 32700, 28 May
1975
Revised FTP Reply Codes (RFC 640), Postel, J., N. Neigus, K.
Pogran, NIC 30843, 5 June 1974
File Transfer Protocol (RFC 542), Neigus, N., NIC 17759, 12 July
1977
RFC775 Directory oriented FTP commands RFC775 面向目錄的 FTP 命令