!rsync同步模式
sync在進行同步或備份時,使用遠程shell,或TCP鏈接遠程daemon,有兩種途經鏈接遠程主機。
shell模式,不須要使用配置文件,也不須要啓動遠端rsync。遠程傳輸時通常使用ssh做爲傳輸工具。
daemon模式,但必須在一臺機器上啓動rsync。
!rsync命令調用格式
本地文件同步:
rsync [OPTION...] SRC... [DEST]
示例:
rsync -a /home/back1 /home/back2
基於遠程shell同步:
拉取: rsync [OPTION...] [USER@]HOST:SRC... [DEST]
推送: rsync [OPTION...] SRC... [USER@]HOST:DEST
基於rsync daemon同步:
拉取: rsync [OPTION...] [USER@]HOST::SRC... [DEST]
rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]
推送: rsync [OPTION...] SRC... [USER@]HOST::DEST
rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST
若是隻指定了源路徑,而沒有指定目的路徑,rsync將會顯示源路徑中的文件列表。
源路徑的最後有斜槓,則只複製目錄中的文件;沒有斜槓,不但要複製目錄中的文件,還要複製目錄自己。
目的路徑的最後有沒有斜槓,對傳輸沒有影響。
!經常使用參數說明
-delete 刪除服務端不存在的客戶端文件
-password-file=FILE 指定本機rsyncd.secrets的位置
-a, --archive 歸檔模式,表示以遞歸方式傳輸文件,並保持全部文件屬性,等於-rlptgoD
-v, --verbose 詳細模式輸出
-q, --quiet 精簡輸出模式
-c, --checksum 打開校驗開關,強制對文件傳輸進行校驗
-r, --recursive 對子目錄以遞歸模式處理
-R, --relative 使用相對路徑信息
-b, --backup 建立備份,也就是對於目的已經存在有一樣的文件名時,將老的文件從新命名爲~filename。可使用--suffix選項來指定不一樣的備份文件前綴。
--backup-dir 將備份文件(如~filename)存放在在目錄下。
-suffix=SUFFIX定義備份文件前綴
-u, --update 僅僅進行更新,也就是跳過全部已經存在於DST,而且文件時間晚於要備份的文件。(不覆蓋更新的文件)
-l, --links 保留軟鏈結
-L, --copy-links 想對待常規文件同樣處理軟鏈結
--copy-unsafe-links 僅僅拷貝指向SRC路徑目錄樹之外的鏈結
--safe-links 忽略指向SRC路徑目錄樹之外的鏈結
-H, --hard-links 保留硬鏈結
-p, --perms 保持文件權限
-o, --owner 保持文件屬主信息
-g, --group 保持文件屬組信息
-D, --devices 保持設備文件信息
-t, --times 保持文件時間信息
-S, --sparse 對稀疏文件進行特殊處理以節省DST的空間
-n, --dry-run 現實哪些文件將被傳輸
-W, --whole-file 拷貝文件,不進行增量檢測
-x, --one-file-system 不要跨越文件系統邊界
-B, --block-size=SIZE 檢驗算法使用的塊尺寸,默認是700字節
-e, --rsh=COMMAND 指定使用rsh、ssh方式進行數據同步
--rsync-path=PATH 指定遠程服務器上的rsync命令所在路徑信息
-C, --cvs-exclude 使用和CVS同樣的方法自動忽略文件,用來排除那些不但願傳輸的文件
-f, --filter=RULE 從指定文件加載過濾規則。
--existing 僅僅更新那些已經存在於DST的文件,而不備份那些新建立的文件
--delete 刪除那些DST中SRC沒有的文件
--delete-excluded 一樣刪除接收端那些被該選項指定排除的文件
--delete-after 傳輸結束之後再刪除
--ignore-errors 及時出現IO錯誤也進行刪除
--max-delete=NUM 最多刪除NUM個文件
-P, --partial 保留那些因故沒有徹底傳輸的文件,以是加快隨後的再次傳輸
--force 強制刪除目錄,即便不爲空
--numeric-ids 不將數字的用戶和組ID匹配爲用戶名和組名
--timeout=TIME IP超時時間,單位爲秒
-I, --ignore-times 不跳過那些有一樣的時間和長度的文件
--size-only 當決定是否要備份文件時,僅僅察看文件大小而不考慮文件時間
--modify-window=NUM 決定文件是否時間相同時使用的時間戳窗口,默認爲0
-T --temp-dir=DIR 在DIR中建立臨時文件
--compare-dest=DIR 一樣比較DIR中的文件來決定是否須要備份
--progress 顯示備份過程
-z, --compress 對備份的文件在傳輸時進行壓縮處理
--exclude=PATTERN 指定排除不須要傳輸的文件模式
--include=PATTERN 指定不排除而須要傳輸的文件模式
--exclude-from=FILE 排除FILE中指定模式的文件
--include-from=FILE 不排除FILE指定模式匹配的文件
--version 打印版本信息
--address 綁定到特定的地址
--config=FILE 指定其餘的配置文件,不使用默認的rsyncd.conf文件
--port=PORT 指定其餘的rsync服務端口
--blocking-io 對遠程shell使用阻塞IO
-stats給出某些文件的傳輸狀態
--progress 在傳輸時現實傳輸過程
--log-format=formAT 指定日誌文件格式
--password-file=FILE 從FILE中獲得密碼
--bwlimit=KBPS 限制I/O帶寬,KBytes per second
-h, --help 顯示幫助信息
!rsyncd.conf配置,按「[]」設定的模塊劃分同步模塊。每一個模塊中包含格式爲name = value的參數定義。格式、參數說明及經常使用設置以下:
#默認存放位置/etc/rsyncd.conf
#全局參數
#指定消息文本文件,當客戶端鏈接成功時顯示該文件的內容到客戶端
motd file=/usr/local/etc/rsyncdmsg
#指定pid文件
pid file=/var/run/rsyncd.pid
#指定rsync監聽端口,默認爲873
port=873
#指定IP
address=127.0.0.1
#模塊參數,部分模塊參數也可在全局段定義,做用於所有模塊。
#模塊名爲sync_test
[sync_test]
#以nobody身份運行rsync server
uid = nobody
#指定守護程序以root方式運行時模塊應當替換的文件傳入和傳出的組名或組ID,配合"uid"選項。
gid = nobody
#同步模塊備註
comment = backup demo
#須要作鏡像的目錄
path = /opt/data
#認證用戶名,未指定爲容許匿名。多個用戶名可用空格或逗號分隔。
auth users = tester
#密碼文件存放路徑
secrets file = /usr/local/etc/rsyncd.secrets
#同步是否爲只讀,默認爲yes
read only = yes
#同步是否爲只寫,默認爲no
write only=no
#當客戶請求可使用的模塊列表時,該模塊是否應該被列出。若是設置該選項爲false,能夠建立隱藏的模塊。默認爲yes
list=yes
#不對指定類型文件壓縮
dont compress = *.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.tbz *.jpg
#若是設爲true,則在傳輸文件時chroot到path指定的目錄下。須要rsync以root權限啓動,而且不能備份指向外部的符號鏈接所指向的目錄文件。默認值爲true。
use chroot=true
#指定該模塊的最大併發鏈接數量,默認值是0。
max connections=0
#指定支持max connections參數的鎖文件。
lock file=/var/run/rsyncd.lock
#指定日誌記錄消息級別,默認爲daemon。
#常見的消息級別是:uth, authpriv, cron, daemon, ftp, kern, lpr, mail, news, security, sys-log, user, uucp, local0, local1, local2, local3,local4, local5, local6和local7。
syslog facility=daemon
#指定同步日誌文件位置,不指定則將日誌存入syslog
log file=/var/log/rsyncd.log
#若是爲true,則密碼文件只能被rsync服務器運行身份的用戶訪問,其餘任何用戶不能夠訪問該文件。默認值爲true。
strict modes=true
# 只容許指定IP的客戶端鏈接該模塊
# 多個IP或網段用空格隔開,「*」則表示全部,默認是容許全部主機鏈接。
# 網段設定示例:192.168.0.0/24,也能夠是192.168.0.0/255.255.255.0
hosts allow=*
# 不容許指定IP的客戶端鏈接該模塊,默認不指定
hosts deny
# 是否忽略server上的IO錯誤,通常來講rsync在出現IO錯誤時將將跳過--delete操做,以防止由於暫時的資源不足或其它IO錯誤致使的嚴重問題。
ignore errors=yes
#忽略沒有訪問權限的文件。
ignore nonreadable=yes
#用ftp格式的文件來記錄下載和上載操做在單獨的日誌中。
transfer logging
# 定製日誌文件的字段。其格式是一個包含格式定義符的字符串
# 主要定義符及含義:
# %h遠程主機名
# %a遠程IP地址
# %l文件長度字符數
# %p該次rsync會話的進程id
# %o操做類型:"send"或"recv"
# %f文件名
# %P模塊路徑
# %m模塊名
# %t當前時間
# %u認證的用戶名(匿名時是null)
# %b實際傳輸的字節數
# %c當發送文件時,該字段記錄該文件的校驗碼
#默認log格式爲:"%o %h [%a] %m (%u) %f %l",通常來講,在每行的頭上會添加"%t [%p] "。
log format=%o %h [%a] %m (%u) %f %l
# 設定同步超時時間。單位爲秒鐘,0表示沒有超時定義,這也是默認值。
timeout=100
# 列表禁止客戶端使用的命令參數列表。必須使用命令全名。
refuse options
# 用來指定多個由空格隔開的多個文件或目錄(相對路徑),並將其添加到忽略列表中。一個模塊只能指定一個exclude選項。
# 可是須要注意的一點是該選項有必定的安全性問題,客戶頗有可能繞過exclude列表,若是但願確保特定的文件不能被訪問,那就最好結合uid/gid選項一塊兒使用。
exclude
# 指定一個包含exclude模式的定義的文件名,服務器從該文件中讀取exclude列表定義。
exclude from
# 用來指定不排除符合要求的文件或目錄。
include
# 指定一個包含include模式的定義的文件名,服務器從該文件中讀取include列表定義。
include from
!rsyncd.secrets配置,格式爲用戶名:密碼,每一行指定一個用戶。
示例:tester:123456
rsyncd.secrets文件要將權限修改成600,不然同步時會報錯。
!rsync的過濾規則
rsync按照命令行中filter規則順序創建一個有序列表。filter規則的語法以下:
rule [pattern_or_filename]
rule,modfiers [pattern_or_filename]
可使用完整規則名稱,也可使用簡寫名稱。若是使用簡寫形式,前面語法中rule和modefiers之間的逗號是可選的,緊跟着的pattern或filename(若是存在)以後必須有一個空格或下劃線。
若是規則是從文件中讀取的,那麼文件中的空白行將被忽略,以#開頭的行被視爲註釋。
可用rule以下:
exclude, - :排除模式
include, + :包含模式
merge, . :指定一個merge-file,供多個規則讀取
dir-merge, : :指定一個per-directory merge-file
hide, H :指定一個模式,符合該模式的文件將被隱藏,以防止傳輸
show, S :不隱藏符合該模式的文件
protect, p :指定一個模式來防止文件被刪除
risk, R :符合該模式的文件不會被保護
clear, ! :清除當前的include/exclude模式列表(該選項無參數)
exclude和include兩個rule支持modfiers,可用modfiers以下:
/,指定include/exclude規則要匹配當前項目的絕對路徑。例如,-/ /etc/passwd,每當從/etc目錄中傳輸文件時,都要排除密碼文件。
!,告訴rsync,當模式匹配失敗時,include/exclude規則才生效。如,-! */,它將匹配全部非目錄文件。
C,該修飾符指示,全部全局的CVS-exclude規則將插入到-C的地方。該修飾符後面無參數。
s,指示規則做用於發送端。當規則對發送端生效時,它將阻止文件被傳輸。該修飾符一般用於那些在兩端都生效的規則,除非指定了--delete-excluded;它將使規則默認只在發送端生效。另外一種指定發送端includes/excludes的途經是使用hide(H)和show(S)。
r,一般用來指示規則應用於接收端。當規則對接收方生效時,它將防止文件被刪除。另外一種指定接收端includes/excludes的方法是,使用protect(P)和risk(R)規則。
每一個--filter、--include、--exclude選項只接受一個rule/pattern,若是想添加多個rule/pattern,能夠在命令行中的重複這些選項,或在--filter選項中使用merge-file語法,或使用--include-from/--exclude-from選項。
--include和--exclude是--filter選項的簡化版。
daemon過濾鏈由」filter」、」include from」、」include」、」exclude from」、」exclude」參數組成,最早匹配的模式會生效。
!rsnyc的匹配原則
1 若是」/」出如今模式的開頭,那麼它標記了層級中的一個特殊位置,不然,它只是匹配路徑的結束。
所以,」/foo」將匹配」root of the transfer」中的foo(對全局規則而言),或者merge-file目錄中的foo(對per-directory規則而言)。
而未經限定的foo將匹配文件系統中任何位置的foo,由於算法是自上而下遞歸地生效,就像是路徑的每一個部分輪流變成文件或目錄的結尾。
例如foo/a/b/c,算法對該路徑的解釋將會是foo/a,foo/a/b,foo/a/b/c,算法依次把a、b、c做爲文件或目錄結尾。實際上,非錨定的」sub/foo」將會匹配層次結構中包含子目錄sub的,任何位置的foo。
2 若是」/」出如今模式的結尾,那麼它只匹配目錄,而不匹配常規文件、連接,或設備。
3 rsync會檢查模式中是否包含下列通配符,以肯定作簡單的字符匹配仍是通配符匹配:
* :匹配路徑的任何部分,遇到斜槓終止
** :匹配任何東西,包括斜槓
? :匹配任何單個字符,斜槓(「/」)除外
[ :匹配一個字符集,如[a-z],或[[:alpha:]]
4 在通配符模式中,反斜槓(「\」)對通配符進行轉義,若是通配符不存在,它會被解釋一個普通字符
5 若是模式包含」/」(尾部的」/」不計算在內)或」**」,它將匹配完整路徑,包括前導目錄(即foo/a,既匹配a,也匹配前導的foo);若是模式不包含」/」或」**」,它只匹配路徑最後的部分。注意:算法是遞歸地應用,因此實際上「完整路徑」多是從起始目錄向下,路徑的任何一個部分。
6 以dir_name/***結尾的模式,既匹配目錄(就像指定了dir_name/),又匹配目錄中的全部文件(就像指定了dir_name/**)。
請注意:若是使用了-r選項(-a選項隱含了此選項),那麼,自頂向下,路徑的每個部分都將被訪問,因此,include/exclude模式會遞歸地對路徑的每一個組成部分生效(如,要包含/foo/bar/baz,就不能排除/foo和/foo/bar)。
當rsync尋找要發送的文件時,exclude模式其實是rsync在歷遍目錄時的一個短路。若是一個模式排除了特定的父目錄,它就能使一個更深的include模式沒法生效,由於rsync沒法穿過層級中的排除部分而向下(匹配文件)。 也就是說,若是模式排除一個指定的父目錄,那麼它將沒法繼續匹配該父目錄下的子目錄或文件。
rsync過濾及匹配單元重點參考了 rsync三:過濾規則 ,強烈建議你們認真學習一下。 html