`scp` 指令的語法跟一般的 `cp` 類似,只不過 `scp` 可以在不同的 Linux 主機之間複製檔案,其語法為: ``` scp [帳號@來源主機]:來源檔案 [帳號@目的主機]:目的檔案 ``` # 保留檔案時間與權限 若要讓檔案在複製之後,還可保留原本的修改時間、存取時間與權限,可以加上 `-p` 參數: ``` scp -p /path/file1 myuser@192.168.0.1:/path/file2 ``` # 資料壓縮 若要將資料壓縮之後再傳送,減少網路頻寬的使用量,可以加上 `-C` 參數: ``` scp -C /path/file1 myuser@192.168.0.1:/path/file2 ``` # 限制傳輸速度 若要限制網路的使用頻寬,可以用 `-l` 指定可用的網路頻寬上限值(單位為 Kbit/s): ``` # 限制傳輸速度為 400 Kbit/s scp -l 400 /path/file1 myuser@192.168.0.1:/path/file2 ``` 這樣就會限制 `scp` 只能使用 `400` Kbit/s,也就是 `400 / 8 = 50` KB/s。 # 自訂連接埠 一般 SSH 伺服器的連接埠號為 22,如果遇到使用非標準埠號的伺服器,可以用 `-P` 來指定埠號。若遠端的 SSH 伺服器使用 `2222` 這個連接埠,我們就可以這樣複製檔案: ``` # 使用 2222 連接埠 scp -P 2222 /path/file1 myuser@192.168.0.1:/path/file2 ``` # IPv4 與 IPv6 `-4` 與 `-6` 兩個參數分別可以讓 `scp` 使用 IPv4 與 IPv6 來傳輸資料: ``` # 使用 IPv4 scp -4 /path/file1 myuser@192.168.0.1:/path/file2 # 使用 IPv6 scp -6 /path/file1 myuser@192.168.0.1:/path/file2 ``` # 更快的方法:使用SSH+TAR ``` ssh 使用者@主機 "cd 目標目錄 ;tar -zcvf - 目標" | cat > 目標.tar.gz ``` 例: ``` ssh 192.168.0.22 "cd /var ;tar -zcvf - log" | cat > 22_log.tar.gz ``` # 參考 - [SSH + TAR 取代 SCP @ Vexed's Blog :: 隨意窩 Xuite日誌](https://blog.xuite.net/vexed/tech/586811949) - [Linux中互传文件:ssh+tar 与Scp 比较 - 简书](https://www.jianshu.com/p/856a2dc883e0) - [轉貼--ssh tar 命令把遠端檔拉回來或推過去 --- 山城風雲的點滴](http://jimsung168.blogspot.com/2014/01/ssh-tar.html)