Troubleshooting-FTP傳輸型態問題

FTP 傳輸型態有 ASCII 及 Binary 等 2 種:

  • Binary :不做任何格式轉換的傳輸方式。
  • ASCII :傳輸文字檔時會做格式轉換。ASCII 傳輸型態是為了符合 Window 文字檔編碼方式,例如跳行在 linux 是『\n』,但 windows 是『\r \n』,若在 Linux 編輯好文字檔,下載到 Windows 系統並開啟,所有文字會在同一行。

Binary 型態傳輸文字檔所產生的問題

範例:在 Linux 系統產生一文字檔,並在 Windows 的筆記本中開啟(請勿使用 Notepad++ 等文字編輯軟體,因為軟體會自動完成跳行動作,若使用FTP軟體請先設定為Binary型態下載,因為軟體會自動辨視資料型態並予以轉換,像FileZilla)
# vim linuxtext.txt
 linux
 哈
 哈

# od -c linuxtext.txt
 0000000 l i n u x \n 345 223 210 \n 345 223 210 \n
 0000016

關閉 vsftpd 的 ascii 下載功能,這樣 windows 客戶端下載時就不會自動轉換。
# vim /etc/vsftpd/vsftpd.conf
 ascii_download_enable=NO  // 表示 FTP 伺服器只支援 Binary 型態下載

在 Windows 的記事本中開啟 linuxtext.txt,發現內容沒有跳行。


可使用unix2dos.x86_64及dos2unix.x86_64來轉換格式。
# yum install -y unix2dos &> /dev/null  // 安裝時不顯示安裝流程

# od -c linuxtext.txt
 0000000 l i n u x \n 345 223 210 \n 345 223 210 \n
 0000016

# unix2dos linuxtext.txt
 unix2dos: converting file linuxtext.txt to DOS format ...

# od -c linuxtext.txt
 0000000 l i n u x \r \n 345 223 210 \r \n 345 223 210 \r
 0000020 \n
 0000021

ASCII 型態傳輸壓縮檔所產生的問題

範例:在 Windows 系統產生副檔名為 gz 的壓縮檔(軟體 7-zip),上載時使用 FileZilla 並指定 ASCII 型態,再下載至 Windows 系統解壓縮時會發現壓縮檔毀損,因此上傳檔案時最好使用 Binary 型態。


沒有留言:

張貼留言