這裡介紹如何在 Linux 系統上以 scp
指令複製檔案與目錄,並提供一些參考範例。
若要在不同的 Linux 主機之間複製檔案,最常用的方法就是使用 scp
指令,它可以透過 SSH 安全加密傳輸的方式,將本地端的檔案或目錄複製到遠端,或是將遠端的資料複製到本地端,而這個指令在 Mac OS X 中也同樣可以使用。
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
參考資料:Tecmint、UX Techno、Linux and Ubuntu、Jscape、O’Relly、nixCraft
Alex
經過多年,依然好用,謝謝大大的分享~