Sftp

sftp如何替換文件?

  • October 15, 2014

例如,我有一些 http 靜態伺服器。我正在通過 sftp 處理 .js 文件。讓它們保持同步。我想知道 .js 文件是否會立即被替換,或者 stfp 伺服器是否會作為流寫入該文件?

例如:

  • 客戶端開始上傳文件
  • 讀取流打開
  • 伺服器接受該請求
  • 打開寫入流到文件位置
  • 發送到伺服器的塊
  • 塊被接受並管道進入寫入流
  • http靜態伺服器正在嘗試訪問尚未完全上傳的文件並選擇部分上傳的文件?
  • 結果=網頁上的js錯誤

或者

  • sftp 將整個文件載入到記憶體中
  • 然後將整個文件從記憶體轉儲到文件中

這對我來說是最好的方案。

沒有時間檢查它是如何工作的。任何解釋都會很好。

scp並將sftp就地替換文件,所以是的,理論上 HTTP 客戶端可以嘗試獲取部分上傳的文件。

rsync您可以通過使用SSH 來緩解這種情況,sftp因為這將首先寫入臨時文件*,然後*替換該文件。rsync也可以配置為備份它替換的任何文件。

它不是協議功能。SFTP(作為 SSH 的子協議/子系統)不會決定是就地覆蓋文件還是通過臨時文件覆蓋文件,伺服器只執行客戶端發送的命令。所以這整個事情應該從客戶端的角度來看。

現在,這就是說,並牢記上述內容,根據您選擇上傳 .js 文件的客戶端,您將有不同的行為:

  • sftp將簡單地上傳和覆蓋您的文件
  • rsync over SSH 可以上傳臨時名稱的文件,然後刪除舊文件並重命名新上傳的文件(更好的選擇)
  • 在 Windows 世界中,有大量 SFTP 客戶端可以使用臨時名稱上傳和刪除/覆蓋,其中最常見和最著名的可能是WinSCP

引用自:https://serverfault.com/questions/472775