轉自:http://hi.baidu.com/tanyear/blog/item/d66af782702b8dbb6d811948.html
近半年在公司的pc上,用sz下載,rz上傳老是檔案會出問題。剛開始的時候,我一度懷疑是linux虛擬機器,或者網路的問題,導致傳輸的過程中丟包,也沒有仔細去探究。
最近發現,在任何伺服器上做同樣的操作都存在同樣的問題,會嚴重的影響我的工作。為此,決定把真兇就揪出來。在下載檔案前用md5sum計算它的md5值,然後用sz下載到本地的pc上,用windows下的md5sum再計算一次,發現下載到本地之後的md5值跟在伺服器上是一樣的。最後使用rz上傳到伺服器上再算一次,發現變化發生在我用rz上傳到伺服器之時。
縮小懷疑對象了。rz怎麼會出問題。先看看SecureCRT中Session Option的設定,Xmodem/Zmodem這一欄中似乎也沒有關於校正的設定。pqf說,會不會是上傳的時候沒有用binary的方式,他自己用rz,sz通常都會加上-b,-e的參數。
-b binary 用binary的方式上傳下載,不解釋字元為ascii
-e 強制escape 所有控制字元,比如Ctrl+x,DEL等
於是我老老實實的用rz -be的參數來上傳檔案,發現一切照舊。我開始懷疑是不是rz的bug,於是google之。Google來Google去都沒有結果,更換搜尋索引鍵都沒有,比如"rz file changed“,"rz transfer size"。難道Google也有不靈光的時候?
好。先放一放吧。在今天下午,我又用rz上傳一張圖片,但是圖片又因為發生了改變無法訪問。正在垂頭喪氣的時候,突然發現問題所在!
在輸入rz後,上傳檔案的對話方塊,我不知道什麼時候勾選了Upload files as ASCII。這個該死的選項,去掉後再測試,一切都正常了。
關於rz,sz
rz,sz是利用[XYZ]modem協議來實現上傳下載檔案的工具。本身來說Zmodem協議算是一個古老的協議了,似乎用rz,sz也不能續傳檔案。但是它的好處在於方便,不需要server支援。只要伺服器支援rz,sz(不支援的話,linux可以裝lrzsz這個rpm包),用戶端軟體支援(SecureCRT這類的),就可以方便的兩個命令實現本地pc和伺服器之間的檔案上傳下載