Linux Ftp上傳檔案變更 MD5值變更

2021-07-07 10:05:36 字數 1395 閱讀 2739

最近遇到乙個很棘手的問題. 問題很簡單:

一般情況下使用ftp上傳就是這個樣子:

如下指令碼:

$ vim copy.sh 

#! /bin/bash

remote_path=遠端位址

if [ -f $1 ]

then

ftp -i -n <

這是文字檔案內容. vim會預設在檔案末尾追加\n

$ vim ***

123!$

hello!$

456$

將寫好的檔案傳到ftp伺服器:

$ ./copy.sh ***

結果傳上去之後發現文字內容跟本地內容不匹配. 肉眼看完了都沒看到是什麼緣故.  如下:

伺服器上:

$ md5sum ***

7f228319446badf0b351a74a62116074 ***

本地檔案:

$ md5sum ***

e1ea0c6e041a34a40c5ae78a12af2e20 ***

果斷對比文字內容:

本地檔案:

$ od -tx1 -tc ***

0000000 31 32 33 21 0a 68 65 6c 6c 6f 21 0a 34 35 36 0a

1 2 3 ! \n h e l l o ! \n 4 5 6 \n

0000020

ftp伺服器上:

$ od -tx1 -tc ***

0000000 31 32 33 21 0d 0a 68 65 6c 6c 6f 21 0d 0a 34 35

1 2 3 ! \r \n h e l l o ! \r \n 4 5

0000020 36 0d 0a

6 \r \n

0000023

驚訝的發現ftp客戶端在上傳的時候往文字後面新增了個 \r  !    何其的可恥.

man 了一下. 發現了 ftp的傳輸模式. 區分ascii 和 binary. 乙個是按文字讀取, 乙個是按二進位制讀取. 文字讀取會判定本地與遠端的伺服器型別從而預設增添資料. 

因此修改命令即可:

$ vim copy.sh

#! /bin/bash

remote_path=遠端位址

if [ -f $1 ]

then

ftp -i -n <

可參考這篇博文:

Linux ftp 自動上傳備份檔案指令碼

db用rman直接將備份檔案放在盤櫃上了,為了以防萬一,老大讓把這些備份檔案在copy到乙個備份伺服器上。rman對目錄有嚴格的要求,以後如果要恢復,還是還原到相同的目錄。之前我計畫是將備份伺服器共享之後,直接mount到db伺服器上,然後在cp過去,這樣是很簡單的。但是搞系統的大哥建議用ftp來實...

Linux ftp 自動上傳備份檔案指令碼

db用rman直接將備份檔案放在盤櫃上了,為了以防萬一,老大讓把這些備份檔案在copy到乙個備份伺服器上。rman對目錄有嚴格的要求,以後如果要恢復,還是還原到相同的目錄。之前我計畫是將備份伺服器共享之後,直接mount到db伺服器上,然後在cp過去,這樣是很簡單的。但是搞系統的大哥建議用ftp來實...

nginx php 上傳大於15m檔案出錯

在配置上傳apk的時候發現一台nginx php的架構的伺服器無法上傳15m的apk。而apache php的 配置的是可以的,於是 首先修改php.ini檔案 引數 設定 說明 file uploads on 是否允許通過http上傳檔案的開關。預設為on即是開 upload tmp dir 檔案...