Linux 中的遠端檔案同步
在本文中,我們將瞭解 Linux 中處理遠端檔案同步的 **rsync** 命令。本文將提供有關如何使用 rsync 及其最常用選項的實用示例。
**遠端同步** 或 **rsync** 是一種功能強大的命令列實用程式工具,負責在兩臺機器之間遠端和本地同步檔案和目錄。在同步檔案時,一臺機器將充當主機,另一臺充當目標。
Linux 系統管理員最常使用此命令。您可以使用 rsync 命令來複制和同步本地和遠端的檔案和目錄,維護備份和映象資料。
Rsync 命令的功能
在複製、同步和備份資料方面,rsync 是最常用的命令。使用它,我們可以根據檔案大小更改和上次修改時間更快地找到檔案。它為此使用了快速檢查演算法。
使用 rsync 進行檔案傳輸據說是更快的,因為它使用了增量傳輸演算法。在這種演算法中,它負責比較主機和目標檔案,並且只發送發現的差異。第一次將傳輸整個檔案,而後續傳輸只發送差異,這使得檔案傳輸更輕量級且更快。
Rsync 透過壓縮檔案並將其傳輸來節省您的頻寬。
語法
以下是 rsync 命令的語法
Rsync - 本地到本地
rsync [OPTION]... SRC [SRC]... DEST
Rsync - 本地到遠端
rsync [OPTION]... SRC [SRC]... [USER@]HOST:DEST
Rsync - 遠端到本地
rsync [OPTION]... [USER@]HOST:SRC [DEST]
正如我們所討論的,rsync 命令可用於將檔案/目錄從一臺機器複製到另一臺機器。因此,檔案傳輸可以在本地機器之間、本地到遠端機器以及從遠端到本地機器之間進行。
當涉及遠端機器時,rsync 命令會有所不同,讓我們檢查所有三種情況下的語法。
引數
以下是此命令的引數 -
**選項** - 您可以使用許多選項與 rsync 命令一起使用。讓我們在下面的部分中詳細討論這些選項。
**源** - 原始檔或目錄
**目標** - 目標檔案或目錄。
**使用者** - 遠端機器使用者名稱。
**主機** - 遠端機器主機名或 IP 地址。
Rsync 命令中的選項
以下是 rsync 命令最基本的一些選項列表。
**-a** - 此選項負責遞迴複製檔案,並確保維護檔案許可權(使用者、所有者、其他使用者)、符號連結許可權。
**-r** - 此選項也遞迴複製檔案,但不維護檔案許可權和符號連結許可權。
**-z** - 用於在傳輸過程中壓縮資料。
**-p** - 這有助於保留檔案許可權。
**-q** - 這負責保留組許可權。
**-t** - 這確保維護修改檔案時間。
**-P** - 有助於檢視正在傳輸的檔案的進度。
**-v** - 也將顯示進度,但會顯示每個檔案的更多詳細資訊。
示例
將檔案從一個資料夾傳輸到我的本地機器上的另一個資料夾。在下面的示例中,我的當前資料夾中有一個非常大的檔案,名為 test_backup.gz。我想將其傳輸到另一個名為 **test** 的資料夾中。將檔案傳輸到 test/ 資料夾中的命令如下 -
rsync -v test_backup.gz test/
**-v** 或 **-p** 選項將負責向用戶顯示檔案傳輸進度。相同的 test_backup.gz 檔名將被複制到 test/ 目錄中。如果您不想保留正在複製的原始檔名,您也可以指定自己的檔名。
輸出
命令的輸出如下所示 -
ubuntu@ip-xx-xx-xx-xx:~$ mkdir test ubuntu@ip-xx-xx-xx-xx:~$ rsync -v test_backup.gz test/ sending incremental file list test_backup.gz sent 828,331,571 bytes received 35 bytes 66,266,528.48 bytes/sec total size is 828,129,280 speedup is 1.00 ubuntu@ip-xx-xx-xx-xx:~$ cd test ubuntu@ip-xx-xx-xx-xx:~/test$ ls test_backup.gz ubuntu@ip-xx-xx-xx-xx:~/test$
如果您不想檢視 rsync 命令的進度,可以跳過 **-v** 選項。rsync 命令負責建立檔案或目錄(如果不存在)。
示例
讓我們首先檢視將目錄從一個位置傳輸到我的機器上的另一個位置的本地命令。
rsync -av test/ demo/
**-a** 選項將遞迴地從 test/ 資料夾複製所有檔案到 demo/ 資料夾。確保您對 test/ 資料夾具有讀取許可權,並對 demo/ 資料夾具有寫入許可權。
請注意,rsync 命令負責建立目標目錄(如果不存在)。
輸出
命令的輸出如下所示 -
ubuntu@ip-xx-xx-xx-xx:~$ rsync -av test/ demo/ sending incremental file list ./ abc.xhtml hello.xhtml login.xhtml login-test.xhtml success.xhtml activation.xhtml password.xhtml reset.xhtml return.xhtml setter.xhtml sent 73,972 bytes received 247 bytes 148,438.00 bytes/sec total size is 73,012 speedup is 0.98 ubuntu@ip-xx-xx-xx-xx:~$
示例
在我的機器上,我有一個備份檔案,我想將其複製到另一臺遠端機器上。為此,我們需要遠端機器的使用者名稱、主機名或 IP 地址。現在我有了使用者名稱和 IP 地址。讓我們嘗試將備份檔案複製到遠端機器。
執行此操作的命令如下
rsync -v my_backupfile.zip ubuntu@12.343.11.34:/tmp/
我們要傳送的檔案是 my_backupfile.zip,傳送到機器 IP **地址:12.343.11.34**。該機器的使用者名稱是 ubuntu。我們希望將檔案 my_backupfile.zip 複製到 tmp/ 資料夾中。如果伺服器受密碼保護,則在檔案傳輸過程中您需要輸入密碼。
輸出
命令的輸出如下所示
ubuntu@ip-xx-xx-xx-xx:~$ rsync -v my_backupfile.zip ubuntu@12.343.11.34:/tmp/ my_backupfile.zip sent 828,331,547 bytes received 35 bytes 61,357,894.96 bytes/sec total size is 828,129,280 speedup is 1.00 ubuntu@ip-10-97-24-72:~$
現在讓我們嘗試複製目錄並將其複製到 tmp/ 資料夾中。命令是 -
rsync -av pages ubuntu@12.343.11.34:/tmp/
在上面的命令中,您可以將 pages 目錄複製到 tmp/ 資料夾。我們使用了 -a 選項,以便所有子目錄也被複制。
ubuntu@ip-xx-xx-xx-xx:~$ rsync -av pages ubuntu@12.343.11.34:/tmp/ sending incremental file list test/ test/abc/ test/abc/one.xml test/abc/cases/ test/abc/cases/my.properties.xhtml test/abc/incl/ test/abc/incl/tpl/ test/abc/incl/tpl/login.xhtml test/src/ test/src/password.xhtml test/src/otp.xhtml test/src/login.xhtml test/src/reset-password.xhtml sent 99,589 bytes received 371 bytes 199,920.00 bytes/sec total size is 98,078 speedup is 0.98 ubuntu@ip-10-97-24-72:~$
示例
在這種情況下,我們有一些位於遠端伺服器上的檔案要複製到我們的本地機器上。相應的命令是 -
rsync -av ubuntu@12.343.11.34:test.txt tmp
檔案 test.txt 位於遠端機器 12.343.11.34 上。我們希望該檔案位於我們本地機器上的 tmp 資料夾中。如果伺服器受密碼保護,則在檔案傳輸過程中您需要輸入密碼。
輸出
命令的輸出是
ubuntu@ip-xx-xx-xx-xx:~$ rsync -av ubuntu@12.343.11.34:test.txt tmp receiving incremental file list test.txt sent 43 bytes received 1,988,966 bytes 1,326,006.00 bytes/sec total size is 1,988,385 speedup is 1.00 ubuntu@ip-xx-xx-xx-xx:~$
遠端伺服器到我們的本地機器
讓我們也嘗試將目錄從遠端伺服器同步到我們的本地機器。相應的命令是
示例
rsync -av ubuntu@12.343.11.34:demo tmp
此處,目錄 demo 存在於遠端機器 ubuntu@12.343.11.34 上。我們希望將其複製到我們本地機器上的 tmp 目錄中。
輸出
命令的輸出如下 -
ubuntu@ip-xx-xx-xx-xx:~$ rsync -av ubuntu@12.343.11.34:demo tmp receiving incremental file list demo/ demo/abc.txt sent 47 bytes received 200 bytes 164.67 bytes/sec total size is 53 speedup is 0.21 ubuntu@ip-xx-xx-xx-xx:~$