兩臺linux的檔案傳輸

科里布發表於2024-10-30

起因

本地拉取docker映象timeout,然後就準備把阿里雲上已經在執行的映象打包下載下來。

指令1:rsync

rsync 是一個非常強大的工具,用於檔案同步和高效的資料傳輸。它可以用於備份、檔案傳輸以及資料同步等多種場景。
rsync 的主要優點在於其高效性和靈活性,特別是在處理大量檔案和遠端傳輸時表現優異。

主要特點

  1. 增量傳輸rsync 只傳輸兩個檔案之間的差異部分,而不是整個檔案,從而顯著減少了傳輸時間。
  2. 多平臺支援rsync 可以在多種作業系統上執行,包括 Linux、macOS 和 Windows。
  3. 安全傳輸:透過 SSH 或 SSL/TLS 進行加密傳輸,保證資料的安全性。
  4. 靈活的選項:支援多種選項來定製傳輸行為,如保留檔案後設資料、壓縮資料等。
  5. 遠端檔案同步:可以輕鬆地在本地計算機和遠端伺服器之間同步檔案。

基本語法

rsync 的基本語法如下:

rsync [options] SOURCE DESTINATION

其中:

  • options:一系列用於控制 rsync 行為的選項。
  • SOURCE:要同步或傳輸的原始檔或目錄。
  • DESTINATION:目標檔案或目錄的位置。

常用選項

基礎選項

  • -a(archive):歸檔模式,保留檔案屬性(如許可權、時間戳、符號連結等)。
  • -v(verbose):詳細模式,顯示更多輸出資訊。
  • -z(compress):啟用壓縮,減少資料傳輸量。
  • -P(progress):顯示進度條,並在傳輸完成後列印統計資料。
  • -r(recursive):遞迴複製目錄。
  • -u(update):只傳輸那些源端比目標端新或不存在的檔案。

進階選項

  • -e(program):指定用於遠端 shell 的程式,預設為 ssh
  • -H(hard-links):保持硬連結的關聯。
  • -L(links):將符號連結作為普通檔案傳輸。
  • -B(block-size):指定塊大小,用於提高傳輸效率。
  • -S(sparse):保留稀疏檔案的稀疏性。
  • -I(ignore-errors):忽略錯誤,繼續處理其他檔案。
  • -q(quiet):安靜模式,減少輸出資訊。

示例

1. 本地檔案同步

將本地目錄 source_dir 同步到本地目錄 dest_dir

rsync -avz /path/to/source_dir /path/to/dest_dir

2. 從遠端伺服器拉取檔案到本地

將遠端伺服器上的檔案 remote_file 拉取到本地目錄 local_dir

rsync -avz user@remote_server:/path/to/remote_file /path/to/local_dir

3. 將本地檔案推送到遠端伺服器

將本地目錄 local_dir 推送到遠端伺服器的 remote_dir

rsync -avz /path/to/local_dir user@remote_server:/path/to/remote_dir

應用場景

資料備份

定期將重要資料備份到另一個儲存裝置或遠端伺服器上:

rsync -avz --delete /path/to/data user@backup_server:/path/to/backup_dir

檔案同步

實時同步工作目錄到遠端伺服器:

rsync -avz --delete /path/to/workdir user@remote_server:/path/to/remotedir

--delete:該選項表示在同步過程中刪除目標端(destination)中不再存在於源端(source)的檔案或目錄。這有助於保持目標端與源端的一致性。

親測

將我筆記本上的ollama.tar的包傳輸到辦公室的Pi5上。之前從阿里雲伺服器上下載下來操作類似,網速也差不多,不過沒截圖。

指令2 scp

scp(Secure Copy)是一個用於透過 SSH 協議安全地傳輸檔案的工具。它主要用於簡單的檔案傳輸任務,特別適合在本地計算機和遠端伺服器之間傳輸單個檔案或目錄。

基本語法

scp 的基本語法如下:

scp [options] source destination

常用選項

  • -r:遞迴複製目錄。
  • -p:保留檔案的許可權、時間戳等屬性。
  • -v:詳細模式,顯示更多輸出資訊。
  • -C:啟用壓縮(預設不壓縮)。
  • -P :指定 SSH 埠(預設為 22)。
  • -i <identity_file>:指定私鑰檔案,用於金鑰認證。

常見用法

1. 從本地傳輸檔案到遠端伺服器

將本地的 file.txt 檔案傳輸到遠端伺服器的 /home/user/ 目錄:

scp -P 22 file.txt user@remote_server:/home/user/

這裡的 -P 22 指定使用預設的 SSH 埠 22。

2. 從遠端伺服器拉取檔案到本地

將遠端伺服器上的 file.txt 檔案拉取到本地的當前目錄:

scp -P 22 user@remote_server:/home/user/file.txt .

3. 傳輸目錄

將本地的 directory 目錄傳輸到遠端伺服器的 /home/user/ 目錄:

scp -Pr directory user@remote_server:/home/user/

這裡的 -Pr 表示遞迴複製目錄。

示例

1. 從本地傳輸檔案到遠端伺服器

假設你要將本地的 ~/Documents/file.txt 檔案傳輸到遠端伺服器的 ~/backups 目錄:

scp -P 22 ~/Documents/file.txt user@remote_server:~/backups

2. 從遠端伺服器拉取檔案到本地

假設你要將遠端伺服器上的 ~/data/file.txt 檔案拉取到本地的 ~/Downloads 目錄:

scp -P 22 user@remote_server:~/data/file.txt ~/Downloads

3. 傳輸目錄

假設你要將本地的 ~/Projects/project 目錄傳輸到遠端伺服器的 ~/projects 目錄:

scp -Pr ~/Projects/project user@remote_server:~/projects

rsync 的區別

雖然 scprsync 都可以用來傳輸檔案,但它們有一些不同之處:

  • 功能複雜度rsync 提供了更豐富的功能,如增量傳輸、檔案同步等。
  • 效能:對於大型檔案或目錄,rsync 通常更高效,因為它只傳輸檔案的不同部分。
  • 易用性scp 更適合簡單的檔案傳輸任務,而 rsync 更適合複雜的同步和備份場景。

相關文章