rsync介紹
我們經(jīng)常需要在不同目錄或者服務器之間做文件同步和更新,LINUX提供了很多內(nèi)置命令可以使用比如SCP等等磨澡,但是今天我們介紹一個更加強大的工具rsync。rsync命令是一個遠程同步工具宿饱,可以通過LAN\WAN快速同步多臺主機間的文件毯辅,它使用的就是rsync算法達到本地和遠程兩個主機之間文件同步屋摇,該算法是增量算法简烤,即只同步兩個文件的不同部分版保,而不是每次同步整個文件果覆,所以速度是相當快
一. 同步源
1. 基于SSH的同步源
setfacl
rsync -avz 用戶名@服務器地址:/服務器目錄/* /本地目錄/
2. 基于RSYNC的同步源
/etc/rsyncd.conf
/etc/rsyncd_users.db 權限為600
上行同步時颅痊,read only = no 且 nobody需要有寫入權限
/etc/rsyncd.conf文件:
address = 192.168.0.198
port 873
pid file = /var/run/rsyncd.pid
log file = /var/log/rsync.log
[share]
comment = soft
path = /server/rsync
read only = no
dont compress = *.gz *.bz *.bz2 *.zip
auth users = wang
secrets file = /etc/rsyncd_users.db
對rsyncd.conf文件選項個別解釋(上面有的沒有寫):
uid 指定當前模塊傳輸文件時的守護進程應該具有的用戶ID,默認是"nobody"
gid 指定當前模塊傳輸文件時守護進程應該具有的用戶組ID局待,默認是"nobody"
max_connections 指定模塊的最大并發(fā)連接數(shù)量八千,以保護服務器超過限制的連接請求,將被暫時限制燎猛。默認是0恋捆,也就是沒有限制。
/etc/rsyncd_users.db文件格式為: wang:123456
啟動rsync守護進程:/usr/bin/rsync --daemon
權限: 服務權限 --> 用戶權限重绷,即只有服務權限還不行沸停,必須還要有用戶權限
rsync命令的用法:
基本格式: rsync [選項] 原始位置 目標位置
rsync的命令格式可以為:
1. rsync [OPTION]... SRC [SRC]... DEST
2. rsync [OPTION]... SRC [SRC]... [USER@]HOST:DEST
3. rsync [OPTION]... [USER@]HOST:SRC DEST
4. rsync [OPTION]... [USER@]HOST::SRC [DEST]
5. rsync [OPTION]... SRC [SRC]... [USER@]HOST::DEST
6. rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST]
rsync有六種不同的工作模式:
1. 拷貝本地文件;當SRC和DES路徑信息都不包含有單個冒號":"分隔符時就啟動這種工作模式昭卓。
2.使用一個遠程shell程序(如rsh愤钾、ssh)來實現(xiàn)將本地機器的內(nèi)容拷貝到遠程機器瘟滨。當DST路徑地址包含單個冒號":"分隔符時啟動該模式。
3.使用一個遠程shell程序(如rsh能颁、ssh)來實現(xiàn)將遠程機器的內(nèi)容拷貝到本地機器杂瘸。當SRC地址路徑包含單個冒號":"分隔符時啟動該模式。
4. 從遠程rsync服務器中拷貝文件到本地機伙菊。當SRC路徑信息包含"::"分隔符時啟動該模式败玉。
5. 從本地機器拷貝文件到遠程rsync服務器中。當DST路徑信息包含"::"分隔符時啟該模式镜硕。
6. 列遠程機的文件列表运翼。這類似于rsync傳輸,不過只要在命令中省略掉本地機信種工作模式兴枯。
常用選項:
-a :歸檔模式血淌,遞歸并保留對象屬性,等同于 -rlptgoD
-v : 顯示同步過程的詳細(verbose)信息
-z : 在傳輸文件時進行壓縮(compress)
-H : 保留硬連接文件
-A : 保留ACL屬性信息
--delete : 刪除目標位置有而原始位置沒有的文件
--timeout : 指定超時時間
--progress : 顯示備份過程
--port :指定rsync服務端口
--password-file :指定客戶端的密碼文件
-a ::
-r : 遞歸模式财剖,包含文件目錄及子目錄中所有文件
-l : 對于符號鏈接文件仍然復制為符號鏈接文件
-p : 保留文件的權限標記
-t : 保留文件的時間標記
-g : 保留文件的屬組標記(僅超級用戶使用)
-o : 保留文件的屬主標記(僅超級用戶使用)
-D : 保留設備文件及其他特殊文件
二. 實時同步
免密碼驗證
1. 基于SSH的同步源
通過秘鑰對實現(xiàn)
2. 基于RSYNC同步源
通過系統(tǒng)變量實現(xiàn)悠夯,export RSYNC_PASSWORD=123456
實時同步 inotify+rsync
1. 安裝inotify-tools輔助工具
inotifywait :用于持續(xù)監(jiān)控,實時輸出結(jié)果
inotifywatch :用于短期監(jiān)控躺坟,任務完成后再出結(jié)果
inotifywait -mrq -e create,delete /server/rsync
m:持續(xù)監(jiān)控 r:遞歸監(jiān)控 即:監(jiān)控目錄及其子目錄的內(nèi)容
q:簡化輸出
2.首先實現(xiàn)免密碼驗證疗疟,在執(zhí)行下面的腳本文件
#!/bin/bash
a="/usr/local/bin/inotifywait -mrq -e create,delete /tmp/test1"
b="/usr/bin/rsync -avz /tmp/test1/* user1@192.168.0.162:/tmp/test2/"
$a | while read directory event file
do
$b
done