rsync表示 remote sync,其用於在本地或與遠程主機間進行文件或目錄備份。相比較scp等工具,rsync有以下優點:
- 速度:除首次全拷貝外,其他時候實現增量拷貝,加快傳輸速度
- 安全:傳輸數據時可用ssh加密傳輸
- 帶寬占用:rsync可對數據進行分塊壓縮傳輸,相比其他文件傳輸工具占用更少帶寬
- 權限限制:非root用戶也可安轉和執行rsync命令
rsync執行方式如下:
$ rsync options source destination
source 和 destination 既可以指示本地,也可以是遠程機器。下面通過實例說明rsync的用法。
1.在本地兩個目錄間進行數據同步
以下命令用於在兩個目錄間完成文件拷貝:
$ rsync -zvr /var/opt/lx/ /root/temp/ sending incremental file list a.c b.c sent 211 bytes received 50 bytes 522.00 bytes/sec total size is 81 speedup is 0.31
以上選項表示意思如下:
- -z 傳輸前進行壓縮
- -v 顯示命令執行詳細信息
- -r 遞歸拷貝目錄
此時我們看本地和目的地兩個文件屬性,注意到兩者的時間戳是不同的:
$ ll /var/opt/lx/a.c /root/temp/a.c -rw-r--r-- 1 root root 73 04-06 21:11 /root/temp/a.c -rw-r--r-- 1 root root 73 04-06 21:05 /var/opt/lx/a.c
若要保留原文件時間戳、屬主/屬組、權限屬性,我們可以使用 -a 選項:
$ rsync -azv /var/opt/lx/ /root/temp/
-a選項亦包含遞歸的作用,因而可以替代-r選項。
2.本地與遠程主機間完成數據同步
我們可以用rsync將本地的文件,同步到遠程機器:
$ rsync -avz /root/temp/ lx@192.168.1.103:/home/lx/tmp/ Password: sending incremental file list created directory /home/lx/tmp ./ a.c b.c sent 216 bytes received 53 bytes 21.52 bytes/sec total size is 81 speedup is 0.30
以上我們指明了目的機器ip、登錄用戶以及所路徑,並且需要輸入相應用戶的登錄密碼。以上命令完成本地到遠程機器的同步,調換source和destination的位置,我們亦可完成遠程機器到本地的數據同步。
3.使用ssh通道進行數據同步
在與遠端進行數據同步時,我們一般采用ssh通道,使用 -e ssh 選項可以完成該功能:
$ rsync -avz -e ssh /root/temp/ lx@192.168.1.103:/home/lx/tmp/
4.不覆蓋目的地對文件已作的修改
經常出現這樣的場景,我們對源文件和目的地文件均作了修改,同時想將源文件作的修改同步到目的地,但又保留對目的地文件的更改,此時可以使用 -u 選項:
$ ls -l /root/temp/b.c -rw-r--r-- 1 root root 12 04-06 22:19 /root/temp/b.c $ ls -l /var/opt/lx/b.c -rw-r--r-- 1 root root 8 04-06 21:06 /var/opt/lx/b.c $ rsync -avzu /var/opt/lx/ /root/temp/ sending incremental file list ./ a.c sent 172 bytes received 34 bytes 412.00 bytes/sec total size is 101 speedup is 0.49
以上目的地 b.c 文件經過修改,與源文件不相同,此時使用 -u 選項,可以看到對 b.c 並不進行同步,目的地 b.c 的修改得以保存。
5.刪除不存在於源目錄的目的地文件
對於不存在於源目錄,但存在於目的地的文件,有時我們想在做文件同步時刪除它們,--delete 選項可以滿足要求:
$ rsync -avz --delete /var/opt/lx/ /root/temp/ sending incremental file list ./ deleting c.c b.c sent 101 bytes received 34 bytes 270.00 bytes/sec total size is 101 speedup is 0.75
以上目的地相比源目錄多了c.c文件,同步時 --delete 將該文件刪除。
6.在同步時不在目的地創建新文件
有時我們只想對目的地已經有的文件進行同步,而不理會源目錄新增的文件,此時可以使用 --existing 選項:
$ rsync -avz --existing /var/opt/lx/ /root/temp/
7.顯示執行進度
使用 --progress 選項可以顯示同步的進度,包括文件傳輸完成進度、傳輸速率信息:
$ rsync -avz --progress /var/opt/lx/ /root/temp/ sending incremental file list ./ a.c 93 100% 0.00kB/s 0:00:00 (xfer#1, to-check=1/3) b.c 8 100% 7.81kB/s 0:00:00 (xfer#2, to-check=0/3) sent 220 bytes received 53 bytes 546.00 bytes/sec total size is 101 speedup is 0.37
8.查看 source 和 destination 間的區別
rsync完成源目錄到目的地的拷貝,若能查看到源目錄與目的地間的差異,這對同步十分有幫助,-i 選項可以顯示源目錄與目的地間的差異,示例如下。
source:
$ ls -l /var/opt/lx/ 總計 8 -rw-r--r-- 1 root root 145 04-06 23:11 a.c -rw-r--r-- 1 root root 8 04-06 21:06 b.c
destination:
$ ls -l /root/temp/ 總計 8 -rw-r--r-- 1 root root 93 04-06 22:20 a.c -rw-r--r-- 1 lx root 8 04-06 21:06 b.c
可以看到 source 與 destination 有兩處不同,一處為 a.c 的文件大小,第二處為 b.c 的屬主,此時添加 -i 選項進行數據同步,有以下輸出:
$ rsync -avzi /var/opt/lx/ /root/temp/ sending incremental file list .d..t...... ./ >f.st...... a.c .f....o.... b.c sent 175 bytes received 37 bytes 424.00 bytes/sec total size is 153 speedup is 0.72
對於同步的每個文件,均對應有一條輸出,有11個標志位指示源文件與目的地文件的區別,在以上例子中,各標志位意義如下:
- > 指示傳輸到本地
- f 指示所傳為文件
- s 指示文件大小不一致
- t 指示時間戳不一致
- o 指示屬主不一致
9.按指定模式進行同步
使用 --include 和 --exclude 選項,可以幫助我們完成只同步特定文件的目的,例如以下只同步以 'a' 開頭的文件:
$ rsync -avz --include 'a*' --exclude '*' /var/opt/lx/ /root/temp/ sending incremental file list ./ a.c aa.c sent 220 bytes received 53 bytes 546.00 bytes/sec total size is 148 speedup is 0.54
10.限制傳輸文件的大小
使用 --max-size 選項,我們可以限制傳輸文件的最大大小:
$ rsync -avz --max-size='100K' /var/opt/lx/ /root/temp/
以上命令限制傳輸的文件大小只能小於或等於100K,另可以使用 M 和 G 作為大小單位。
11.全拷貝
默認情況下 rsync 采用增量拷貝,這樣能節省帶寬,在所同步文件不大的情況下,我們可以通過 -W 選項實現全拷貝:
$ rsync -avzW /var/opt/lx/ /root/temp/