Rsync是一個非常有用的工具,它允許Linux係統管理員在本地或與遠程文件係統同步數據。使用rsync
比簡單地複製數據更方便,因為它能夠主動發現和同步源和目標之間的差異。該程序具有:保留標準和擴展文件係統權限、在傳輸過程中壓縮數據等選項。我們將在本指南中看到最常用的一些功能。
在本教程中,您將學習到:
- 如何使用rsync同步數據
- 如何通過ssh在遠程文件係統上使用rsync
- 如何通過rsync守護進程將rsync與遠程文件係統一起使用
- 如何從同步中排除文件
Rsync-用法介紹
讓我們從rsync基本用法開始。假設我們在本地文件係統上有一個目錄,並且我們想將其內容與另一個目錄(可能在外部USB設備上)進行同步,以便創建文件的備份。在示例中,源目錄為/mnt/data/source
,目的地將掛載在/run/media/egdoc/destination
。源包含兩個文件:file1.txt
和 file2.txt
,而目的地目錄為空。第一次運行rsync時
所有數據被複製。如果現在列出目標目錄內容,則可以看到它現在包含源文件:
$ ls /run/media/egdoc/destination/ -l
total 0
-rw-r--r--. 1 egdoc egdoc 0 Oct 6 19:42 file1.txt
-rw-r--r--. 1 egdoc egdoc 0 Oct 6 19:42 file2.txt
隨後,我們運行rsync來同步兩個目錄,僅複製新文件和修改過的文件:這將節省大量時間和資源。讓我們驗證一下:首先,我們在源目錄中修改file1.txt的內容:
$ echo linuxconfig > /mnt/data/source/file1.txt
然後,我們再次運行rsync
,觀察輸出:
$ rsync -av /mnt/data/source/
/run/media/egdoc/destination
sending incremental file list
file1.txt
sent 159 bytes received 35 bytes 388.00 bytes/sec
total size is 12 speedup is 0.06
唯一複製的文件是我們修改的文件file1.txt。
創建源到目標的鏡像副本
默認rsync
隻需確保將源目錄中的所有文件(指定為例外的文件除外)都複製到了目的地:它不會使兩個目錄保持相同,也不會刪除文件;因此,如果我們要創建源到目標的鏡像副本,則必須使用--delete
選項,這將刪除僅在目標內部存在的文件。
假設我們創建一個名為file3.txt
在目標目錄中:
$ touch /run/media/egdoc/destination/file3.txt
該文件在源目錄中不存在,因此如果我們運行rsync
--delete
選項,將其刪除:
$ rsync -av --delete /mnt/data/source/ /run/media/egdoc/destination
sending incremental file list
deleting file3.txt
./
sent 95 bytes received 28 bytes 246.00 bytes/sec
total size is 0 speedup is 0.00
由於這種同步可能會造成破壞,因此您可能需要先使用--dry-run
選項,以便使程序顯示將要執行的操作,而無需實際修改文件係統。
遠程同步文件
到目前為止,我們已經了解了如何使用rsync同步兩個本地文件係統。該程序還可以通過遠程 shell (例如,rsh或者
ssh)
或者rsync
守護程序遠程同步文件。我們將探討這兩種方法。
通過SSH運行rsync
對於我們的示例,我們仍將使用與先前示例相同的源目錄,但作為目標,我們將使用具有IP(192.168.122.32)的遠程計算機上的目錄。之前,我在計算機上設置了具有基於密鑰登錄名的openssh服務器,因此無需提供密碼即可訪問它。
我們如何通過ssh運行
rsync
?首先,要使遠程同步生效,必須在源計算機和遠程計算機上都安裝rsync。在現代版本的rsync中默認情況下使用ssh;要使用另一個遠程 shell 程序,或顯式聲明該 shell 程序,我們可以使用-e
選項並以它作為參數。假設我們在遠程機器上的目標目錄是/home/egdoc/destination
,我們可以運行:
$ rsync -av -e ssh /mnt/data/source/ egdoc@192.168.122.32:/home/egdoc/destination
請注意,我們指定了目的地<user>@<machine address>:/path/to/directory
。
通過rsync守護程序聯係遠程計算機
與遠程計算機同步文件的另一種方法是使用rsync daemon(守護進程)
。顯然,這需要在目標計算機上安裝並運行該守護程序。
假設rsync守護程序正在偵聽端口873
(默認),在遠程計算機上,我們可以通過運行以下命令與它聯係:
$ rsync -av /mnt/data/source/ 192.168.122.32:/home/egdoc/destination
另外,我們可以使用rsync URL
:
$ rsync -av /mnt/data/source/ rsync://192.168.122.32/home/destination
在兩個示例中,home
(在命令中突出顯示),不代表遠程計算機上的目錄名稱,而是資源的名稱(在rsync術語中稱為module)
,由管理員配置,並可以通過rsync守護程序進行訪問。該module可以指向文件係統上的任何路徑。
從同步中排除文件
有時我們想從同步中排除一些文件或目錄。基本上有兩種方法可以完成此任務:通過直接指定排除模式--exclude
(可以通過重複該選項來指定多個模式),也可以將所有模式寫入文件(每行一個)。使用後一種方法時,我們必須將文件路徑作為參數傳遞給--exclude-from
選項。
與該模式匹配的所有文件和目錄都將從同步中排除。例如,要排除所有擴展名為”.txt”的文件,我們將運行:
$ rsync -av /mnt/data/source/ /run/media/egdoc/destination --exclude=*.txt
結論
在本文中,我們介紹了rsync,這是一個非常有用的工具,可用於同步本地和遠程文件係統上的文件和目錄。我們學習了該程序最常用的選項,它能讓我們完成了什麽任務,如何指定源目錄和目標目錄,以及用來聯係遠程文件係統的方法。最後,我們了解了如何從同步中排除文件,如何直接或在文件中指定排除模式。