11個rsync使用實例


rsync表示 remote sync,其用於在本地或與遠程主機間進行文件或目錄備份。相比較scp等工具,rsync有以下優點:

  1. 速度:除首次全拷貝外,其他時候實現增量拷貝,加快傳輸速度
  2. 安全:傳輸數據時可用ssh加密傳輸
  3. 帶寬占用:rsync可對數據進行分塊壓縮傳輸,相比其他文件傳輸工具占用更少帶寬
  4. 權限限制:非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/

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM