1. 程式人生 > 實用技巧 >rsync基本使用詳解

rsync基本使用詳解

https://blog.csdn.net/woaizxy123/article/details/88660759

分類專欄:Linux服務學習 版權

目錄
• 瞭解rsync 功能及其特點
• 瞭解rsync語法及常用選項功能
• 瞭解rsync命令的三種基本常用使用方法
• 瞭解並掌握篩選rsync 的傳輸目標

簡介

rsync(remote synchronize)是一個遠端資料同步工具,可通過 LAN/WAN 快速同步多臺主機之間的檔案。也可以使用 rsync 同步本地硬碟中的不同目錄。
rsync 是用於替代 rcp 的一個工具,rsync 使用所謂的 rsync演算法進行資料同步,這種演算法只傳送兩個檔案的不同部分,而不是每次都整份傳送,因此速度相當快。

參考 How Rsync Works A Practical Overview 進一步瞭解 rsync 的運作機制。
rsync 的初始作者是 Andrew Tridgell 和 Paul Mackerras,目前由http://rsync.samba.org維護。
rsync 支援大多數的類 Unix 系統,無論是 Linux、Solaris 還是 BSD上 都經過了良好的測試。
配置免密:

基本特性

⚫ 可以映象儲存整個目錄樹和檔案系統
⚫ 可以很容易做到保持原來檔案的許可權、時間、軟硬連結等
⚫ 無須特殊許可權即可安裝
⚫ 優化的流程,檔案傳輸效率高
⚫ 可以使用 rsh、ssh 方式來傳輸檔案,當然也可以通過直接的 socket 連線

⚫ 支援匿名傳輸,以方便進行網站鏡象在 windows 平臺下也有相應的版本,如 cwrsync 和DeltaCopy 等。

使用基本方法

在使用 rsync 進行遠端同步時,可以使用兩種方式:遠端 Shell 方式(建議使用 ssh,使用者驗證由 ssh負責)和 C/S 方式(即客戶連線遠端 rsync 伺服器,使用者驗證由 rsync 伺服器負責)。
• 無論本地同步目錄還是遠端同步資料,首次執行時將會把全部檔案拷貝一次,以後再執行時將只拷貝有
變化的檔案(對於新檔案)或檔案的變化部分(對於原有檔案)。
• 本節重點介紹 rsync 客戶命令的使用,有關 rsync 伺服器的配置和使用請參見下節。

• rsync 在首次複製時沒有速度優勢,速度不如 tar,因此當資料量很大時可以考慮先使用 tar 進行首次複製,然後再使用 rsync 進行資料同步。

rsync命令:

rsync 命令基本格式為:
1)本地使用:
rsync [OPTION…] SRC… [DEST]
2)通過遠端 Shell 使用:
拉: rsync [OPTION…] [USER@]HOST:SRC… [DEST]
推: rsync [OPTION…] SRC… [USER@]HOST:DEST
3)訪問 rsync 伺服器:
拉: rsync [OPTION…] [USER@]HOST::SRC… [DEST]
推: rsync [OPTION…] SRC… [USER@]HOST::DEST
拉: rsync [OPTION…] rsync://[USER@]HOST[:PORT]/SRC… [DEST]
推: rsync [OPTION…] SRC… rsync://[USER@]HOST[:PORT]/DEST

其中: SRC: 是要複製的源位置 DEST: 是複製目標位置
若本地登入使用者與遠端主機上的使用者一致,可以省略 USER@
使用遠端shell 同步時,主機名與資源之間使用單個冒號“:”作為分隔符
使用 rsync伺服器同步時,主機名與資源之間使用兩個冒號“::”作為分隔符 當訪問 rsync 伺服器時也可以使用 rsync:// URL
“拉”複製是指從遠端主機複製檔案到本地主機(下載) “推”複製是指從本地主機複製檔案到遠端主機(上傳) 當進行“拉”複製時,若指定一個SRC 且省略 DEST,則只列出資源而不進行復制

rsync常用選項



rsync基本使用語法

本地磁碟同步資料
rsync -a --delete /etc/ /www/
基於ssh的rsync遠端同步資料(推)
rsync -av /etc[email protected]:/www/

基於ssh的rsync遠端同步資料(拉)
/www/兩個不同,前者為ip機的目錄,後者是給本機的

注:拉去目標需要配置上下文
配置Rsync伺服器,需要將共享目錄的SELinux Context(上下文)配置為指定型別的上下文,否則目錄無法訪問
獲取系統預設定義的所有型別的上下文,使用semanage fcontext -l
檢視檔案的上下文,在使用ls -l時,加上Z選項,也就是ls -lZ
例如
ll -Z /

配置上下示例
臨時配置,在autorelabel時,會恢復預設上下文
chcon -t public_content_t /images
永久配置上下文,在autorelabel時,還是會恢復到自定義的上下文型別
#semanage fcontext -a -t public_content_t "/images(/.*)?"
#restorecon -Rv /images
恢復上下文為自定義的public_content_t

定期自動同步資料

建立指令碼:

計劃定時任務:每天00:10分執行

篩選rsync的傳輸目標

–exclude=檔案或目錄名 指定刪除一個不需要傳輸的檔案匹配模式
–include=檔案或目錄名 制定需要傳輸的檔案匹配模式
當 include/exclude 的規則較複雜時,可以將規則寫入規則檔案。使用規則檔案可以靈活地選擇
傳輸哪些檔案(include)以及忽略哪些檔案(exclude)。
• 若檔案/目錄在剔除列表中,則忽略傳輸
• 若檔案/目錄在包含列表中,則傳輸
• 若檔案/目錄未被提及,也傳輸
在 rsync 的命令列中使用 --exclude-from=FILE 或 --include-from=FILE 讀取規則檔案。
規則檔案 FILE 的書寫約定:
• 每行書寫一條規則 RULE
• 以 # 或 ; 開始的行為註釋行
包含(include)和排除(exclude)規則的語法如下:
• include PATTERN 或簡寫為 + PATTERN
• exclude PATTERN 或簡寫為 – PATTERN
PATTERN 的書寫規則如下:
• 以 / 開頭:匹配被傳輸的跟路徑上的檔案或目錄
• 以 / 結尾:匹配目錄而非普通檔案、連結檔案或裝置檔案
• 使用萬用字元
• *:匹配非空目錄或檔案(遇到 / 截止)
• **:匹配任何路徑(包含 / )
• ?:匹配除了 / 的任意單個字元
• [:匹配字符集中的任意一個字元,如 [a-z] 或 [[:alpha:]]
• 可以使用轉義字元 \ 將上述萬用字元還原為字元本身含義
舉例說明:

例1:
# 不傳輸所有後綴為 .o 的檔案
- *.o
# 不傳輸傳輸根目錄下名為 foo 的檔案或目錄
- /foo
# 不傳輸名為 foo 的目錄
- foo/
# 不傳輸 /foo 目錄下的名為 bar 的檔案或目錄
- /foo/bar
例2:
# 傳輸所有目錄和C語言原始檔並禁止傳輸其他檔案
+ */
+ *.c
- *
定義規則檔案

 不傳輸 logs 目錄
- logs/
# 不傳輸字尾為 .tmp 的檔案
- *.tmp
# 傳輸 Apache 虛擬主機文件目錄(/*/ 匹配域名)
+ /srv/www/
+ /srv/www/*/
+ /srv/www/*/htdocs/
+ /srv/www/*/htdocs/**
# 傳輸每個使用者的 public_html 目錄(/*/ 匹配使用者名稱)
+ /home/
+ /home/*/
+ /home/*/public_html/
+ /home/*/public_html/**
# 禁止傳輸其他
- *