這裡介紹如何在 Linux 系統上以 scp 指令複製檔案與目錄,並提供一些參考範例。

若要在不同的 Linux 主機之間複製檔案,最常用的方法就是使用 scp 指令,它可以透過 SSH 安全加密傳輸的方式,將本地端的檔案或目錄複製到遠端,或是將遠端的資料複製到本地端,而這個指令在 Mac OS X 中也同樣可以使用。

在不同 Linux 主機之間使用 scp 指令複製檔案時,遠端的 Linux 主機必須要開啟 SSH 遠端登入服務,否則無法使用 scp 指令複製檔案。

複製檔案與目錄

scp 指令的語法跟一般的 cp 類似,只不過 scp 可以在不同的 Linux 主機之間複製檔案,其語法為:

scp [帳號@來源主機]:來源檔案 [帳號@目的主機]:目的檔案

這裡的帳號就是登入主機上的帳號(類似 ssh 指令的用法),如果省略帳號與主機,只寫一般的檔案路徑的話,就是代表本機的檔案。

例如將本地端的 /path/file1 複製到 192.168.0.1 這台主機上的 /path/file2,而登入 192.168.0.1 這台主機時,是以 myuser 這個帳號登入:

# 從本地端複製到遠端
scp /path/file1 myuser@192.168.0.1:/path/file2

也可以把遠端的檔案複製到本地端:

# 從遠端複製到本地端
scp myuser@192.168.0.1:/path/file2 /path/file1

這樣就會用 myuser 這個帳號登入 192.168.0.1,將遠端主機上的 /path/file2 複製到 /path/file1

如果本地端的使用者帳號名稱剛好跟遠端的使用者帳號一樣,也可以將使用者帳號省略,例如:

# 從本地端複製到遠端
scp /path/file1 192.168.0.1:/path/file2

反過來也是類似:

# 從遠端複製到本地端
scp 192.168.0.1:/path/file2 /path/file1

複製目錄

若要複製整個目錄以及其下的所有檔案,則加上 -r 參數:

# 複製目錄
scp -r /path/folder1 myuser@192.168.0.1:/path/folder2

保留檔案時間與權限

若要讓檔案在複製之後,還可保留原本的修改時間、存取時間與權限,可以加上 -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

參考資料:TecmintUX TechnoLinux and UbuntuJscapeO’Relly