Scp
-C
標誌在scp
中究竟做了什麼?
我總是使用
rsync
或scp
為了從/向遠端機器複製文件。最近,我在scp
(man scp
) 的手冊中發現了標誌-C
-C Compression enable. Passes the -C flag to ssh(1) to enable compression.
在我發現這個標誌之前,我曾經使用過
zip
before 和 thenscp
。僅使用
-C
壓縮和解壓縮是否有效?什麼時候使用一個或另一個過程可以加快傳輸速度?
它永遠不會真正產生任何重大影響,但是在復製文件之前壓縮文件的效率應該會低一些,因為使用諸如
zip
可以封裝多個文件(如tar
)的容器格式是不必要的,並且不可能流式傳輸 zip輸入和輸出(所以你需要一個臨時文件)。
gzip
另一方面,使用,而不是zip
應該完全相同,因為它是ssh -C
在引擎蓋下所做的……除了 gzip 壓縮自己比使用ssh -C
.
該
-C
標誌啟用 SSH 流的 gzip 壓縮。它相當於
Accept-Encoding: gzip
HTTP 中的。標誌的執行方式取決於您傳輸的一種數據:
- 傳輸單個大文件時,性能與傳輸前壓縮文件幾乎相同(忽略 zip 與 gzip 算法的效率)。
但是
-C
對於作為使用者的您來說,使用起來會更省力。
- 傳輸大量小文件時,性能會不如傳輸前壓縮文件。
其背後的一個原因是,在每次文件傳輸之前,SCP 伺服器和客戶端之間都會進行互動通信(用於交換文件元數據,例如時間戳和權限)。所以雙方都必須等待對方回應(等待時壓縮無濟於事)。對於每個傳輸的文件,這都是浪費時間。浪費多少時間取決於連接的延遲。最後,傳輸速度可能會慢很多。
當您傳輸單個壓縮文件時,該通信僅發生一次。