rsync 使用示例

大雄45發表於2022-06-22
導讀 Rsync(remote sync) 是用於同步某一位置檔案和目錄到另一位置的有效方法。備份的位置可以在本地伺服器或遠端伺服器。本站之前亦有介紹rsync的安裝配置和教程,詳看《 》一文。
rsync特徵

速度:第一次的rsync同步源的整個內容目錄到目標位置。之後,rsync只傳遞改變的塊或位元組到目標位置,使傳輸非常快。
安全:rsync在傳輸中允許使用ssh協議加密資料。
更少的頻寬:rsync分別在傳送和接收端對資料進行壓縮和解壓縮。所以在使用rsync傳輸資料時使用的頻寬總是比使用其他檔案傳輸協議來的少。
特權:不需要特殊許可權來安裝和執行rsync

rsync語法
$ rsync options source destination

source和destination可以是本地或遠端。在遠端的情況下,需要指定登入名、遠端伺服器的名稱和位置。

rsync使用示例

1. 在本地伺服器上同步兩個目錄

用rsync – zvr在本地伺服器上同步兩個目錄

$ rsync -zvr /var/opt/installation/inventory/ /root/temp
building file list ... done
sva.xml
svB.xml
.
sent 26385 bytes  received 1098 bytes  54966.00 bytes/sec
total size is 44867  speedup is 1.63

在上面rsync例子中:
• –z:允許壓縮
• –v:冗長
• –r:遞迴
注:Rsync不會同步原始檔或目錄的時間戳

$ ls -l /var/opt/installation/inventory/sva.xml /root/temp/sva.xml
-r--r--r-- 1 bin  bin  949 Jun 18  2009 /var/opt/installation/inventory/sva.xml
-r--r--r-- 1 root bin  949 Sep  2  2009 /root/temp/sva.xml

2. 用rsync –a同步時間戳

rsync的-a選項是archive的意思,加了之後有以下作用:
• 遞迴模式
• 同步軟連結
• 同步許可權
• 同步時間戳
• 同步屬主和屬組
現在,我們執行與例1一樣的 ,不同的是使用-a選項。

$ rsync -azv /var/opt/installation/inventory/ /root/temp/
building file list ... done
./
sva.xml
svB.xml
.
sent 26499 bytes  received 1104 bytes  55206.00 bytes/sec
total size is 44867  speedup is 1.63

我們可以看到,rsync將源目錄下檔案的時間戳也同步過來了。

$ ls -l /var/opt/installation/inventory/sva.xml /root/temp/sva.xml
-r--r--r-- 1 root  bin  949 Jun 18  2009 /var/opt/installation/inventory/sva.xml
-r--r--r-- 1 root  bin  949 Jun 18  2009 /root/temp/sva.xml

3. 只同步一個檔案

指定檔名稱,只同步一個檔案

$ rsync -v /var/lib/rpm/Pubkeys /root/temp/
Pubkeys
sent 42 bytes  received 12380 bytes  3549.14 bytes/sec
total size is 12288  speedup is 0.99

4. 將本地檔案同步到遠端伺服器

當同步到遠端伺服器時,我們需要指定使用者名稱、遠端伺服器的IP地址和目標路徑。格式為:username@remote_server_ip:path

$ rsync -avz /root/temp/ linuxprobe@192.168.200.10:/home/linuxprobe/temp/
Password:
building file list ... done
./
rpm/
rpm/Basenames
rpm/Conflictname
sent 15810261 bytes  received 412 bytes  2432411.23 bytes/sec
total size is 45305958  speedup is 2.87

5. 將遠端檔案同步到本地伺服器

$ rsync -avz linuxprobe@192.168.200.10:/var/lib/rpm /root/temp
Password:
receiving file list ... done
rpm/
rpm/Basenames
.
sent 406 bytes  received 15810230 bytes  2432405.54 bytes/sec
total size is 45305958  speedup is 2.87

6. 指定使用某一 同步

遠端同步時,Rsync可以指定使用某一shell進行安全傳輸。如:使用rsync –e ssh選擇ssh進行安全連線。

$ rsync -avz -e ssh linuxprobe@192.168.200.10:/var/lib/rpm /root/temp
Password:
receiving file list ... done
rpm/
rpm/Basenames
sent 406 bytes  received 15810230 bytes  2432405.54 bytes/sec
total size is 45305958  speedup is 2.87

7. 不覆蓋目標位置已改變的檔案

如果目標位置的檔案已被修改,而我們不希望舊檔案覆蓋它時,可以使用-u選項。下面例子中,目標位置的檔案Basenames已經被修改,使用-u 選項是它不被舊檔案覆蓋。

$ ls -l /root/temp/Basenames
total 39088
-rwxr-xr-x 1 root root        4096 Sep  2 11:35 Basenames
$ rsync -avzu linuxprobe@192.168.200.10:/var/lib/rpm /root/temp
Password:
receiving file list ... done
rpm/
sent 122 bytes  received 505 bytes  114.00 bytes/sec
total size is 45305958  speedup is 72258.31
$ ls -lrt
total 39088
-rwxr-xr-x 1 root root        4096 Sep  2 11:35 Basenames

8. 只同步目錄樹結構(不包括檔案)

使用rsync - d選項只將目錄樹從源位置同步至目標位置。下面的示例中,以遞迴方式只同步目錄樹而不同步目錄中的檔案。

$ rsync -v -d linuxprobe@192.168.200.10:/var/lib/ .
Password:
receiving file list ... done
logrotate.status
CAM/
YaST2/
acpi/
sent 240 bytes  received 1830 bytes  318.46 bytes/sec
total size is 956  speedup is 0.46

9. 檢視rsync進度

使用rsync –progress選項可以檢視rsync進度,如多少檔案已經被複製,完成率是多少等

$ rsync -avz --progress linuxprobe@192.168.200.10:/var/lib/rpm/ /root/temp/
Password:
receiving file list ...
19 files to consider
./
Basenames
     5357568 100%   14.98MB/s    0:00:00 (xfer#1, to-check=17/19)
Conflictname
       12288 100%   35.09kB/s    0:00:00 (xfer#2, to-check=16/19)
.
.
.
sent 406 bytes  received 15810211 bytes  2108082.27 bytes/sec
total size is 45305958  speedup is 2.87

10. 刪除目標位置建立的檔案

若我們希望rsync時刪除在源位置不存在而在目標位置存在的檔案,可以使用-delete選項。
此例中,我們在目標位置建立了一個新檔名為new-file.txt.,在同步過程中,-delete選項刪除了new-file.txt檔案

# Source and target are in sync. Now creating new file at the target.
$ > new-file.txt
$ rsync -avz --delete linuxprobe@192.168.200.10:/var/lib/rpm/ .
Password:
receiving file list ... done
deleting new-file.txt
./
sent 26 bytes  received 390 bytes  48.94 bytes/sec
total size is 45305958  speedup is 108908.55

11. 在目標位置不建立新檔案

使用-existing選項使得在同步時只同步目標位置存在的檔案,而不建立新檔案。

#在源位置建立新檔案new-file.txt
[/var/lib/rpm ]$ > new-file.txt
#同步目錄
$ rsync -avz --existing root@192.168.1.2:/var/lib/rpm/ .
root@192.168.1.2's password:
receiving file list ... done
./
sent 26 bytes  received 419 bytes  46.84 bytes/sec
total size is 88551424  speedup is 198991.96

12.檢視源和目標的不同檔案或目錄

源位置:

$ ls -l /var/lib/rpm
-rw-r--r-- 1 root root  5357568 2010-06-24 08:57 Basenames
-rw-r--r-- 1 root root    12288 2008-05-28 22:03 Conflictname
-rw-r--r-- 1 root root  1179648 2010-06-24 08:57 Dirnames

目標位置:

$ ls -l /root/temp
-rw-r--r-- 1 root root    12288 May 28  2008 Conflictname
-rw-r--r-- 1 bin  bin   1179648 Jun 24 05:27 Dirnames
-rw-r--r-- 1 root root        0 Sep  3 06:39 Basenames

源和目標之間有兩個不同之處:1. 檔案Dirnames屬主和屬組不同 2. 檔案Basenames的大小不同
使用-i選項來顯示不同之處,如下所示

$ rsync -avzi linuxprobe@192.168.200.10:/var/lib/rpm/ /root/temp/
Password:
receiving file list ... done
>f.st.... Basenames
.f....og. Dirnames
sent 48 bytes  received 2182544 bytes  291012.27 bytes/sec
total size is 45305958  speedup is 20.76
In the output it displays some 9 letters in front of the file name or directory name indicating the changes.

可以看到,在檔名或目錄名前有9個字元來代表不同之處。此例中,Basenames和Dirnames前的字元代表含義如下:

> 代表檔案已被傳輸到本地主機。
f:代表這是個檔案
s:代表檔案大小發生變化
t:代表時間戳發生變化
o:屬主發生變化
g:屬組發生變化

13. 在傳輸時指定包括或排除某些檔案
只傳輸’P’開頭的檔案或目錄(使用rsync include),不傳輸其他任何檔案(使用rsync exclude)

$ rsync -avz --include 'P*' --exclude '*' linuxprobe@192.168.200.10:/var/lib/rpm/ /root/temp/
Password:
receiving file list ... done
./
Packages
Providename
Provideversion
Pubkeys
sent 129 bytes  received 10286798 bytes  2285983.78 bytes/sec
total size is 32768000  speedup is 3.19

14. 不傳輸大檔案

使用rsync –max-size選項後,rsync將不傳輸大於指定大小的檔案

$ rsync -avz --max-size='100K' linuxprobe@192.168.200.10:/var/lib/rpm/ /root/temp/
Password:
receiving file list ... done
./
Conflictname
Group
Installtid
Name
Sha1header
Sigmd5
Triggername
sent 252 bytes  received 123081 bytes  18974.31 bytes/sec
total size is 45305958  speedup is 367.35

15. 傳輸整個檔案

rsync的主要特徵之一是它只傳輸改變的塊到目標位置,而不是傳輸整個檔案。如果網路頻寬對你不是問題(CPU有),您可以使用-w選項來傳輸整個檔案。它會加速rsync過程,因為它不用在源和目標位置執行校驗和。

#  rsync -avzW  linuxprobe@192.168.200.10:/var/lib/rpm/ /root/temp
Password:
receiving file list ... done
./
Basenames
Conflictname
Dirnames
Filemd5s
Group
Installtid
Name
sent 406 bytes  received 15810211 bytes  2874657.64 bytes/sec
total size is 45305958  speedup is 2.87

本文地址:


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2902078/,如需轉載,請註明出處,否則將追究法律責任。

相關文章