rsync(remote sync)即遠程同步。rsync不只能夠遠程同步數據(相似於scp),並且能夠本地同步數據(相似於cp),但不一樣於cp或scp的是,它不會覆蓋之前的數據,而是先判斷已經存在的數據和新數據的差別,只有數據不一樣時纔會把不相同的部分覆蓋。安全
rsync的安裝命令爲:yum install -y rsync。服務器
rsync的命令格式:ssh
rsync [選項] ... SRC DEST工具
rsync [選項] ... SRC [ USER@ ]HOST:DESTui
rsync [選項] ... [ USER@ ]HOST: SRC DESTspa
rsync [選項] ... [ USER@ ]HOST::SRC DEST3d
rsync [選項] ... SRC [ USER@ ]HOST::DEST日誌
-a:歸檔模式,表示以遞歸的方式傳輸文件,並保持全部屬性,等同於-rlptgoD。-a選項後面能夠跟一個--no-OPTION,表示關閉-rlptgoD中的某一個,好比-a--no-l等同於-rptgoD。blog
-r:以遞歸的方式處理子目錄。主要是針對目錄來講的,若是單獨傳一個文件不須要加-r選項,可是傳輸目錄時必需要加。遞歸
-v:打印一些信息,好比文件列表、文件數量等。
-l:保留軟連接。
-L:表示像對待常規文件同樣處理軟連接。若是是SRC中有軟連接文件,則加上該選項後,將會把軟連接指向的目標文件複製到DST。
-p:保持文件權限。
-o:保持文件屬主信息。
-g:保持文件屬組信息。
-D:保持設備文件信息。
-t:保持文件時間信息。
--delete:刪除DST中SRC沒有的文件。
--exclude=PATTERN:指定排除不須要傳輸的文件,等號後面跟文件名,能夠是萬用字符模式(如*.txt)。
--progress:在同步的過程當中能夠看到同步的過程狀態,好比統計要同步的文件數量、同步的文件傳輸速度等。
-u:表示把DST中比SRC還新的文件排除掉,不會覆蓋。
-z:加上該選項,將會在傳輸過程當中壓縮。
經常使用的選項有-a、-v、-z、--delete和--exclude這幾個。
咱們先創建一些目錄和文件,而後對rsync的各個選項分別作詳細介紹。
使用-a選項:
從上圖可見,咱們原本想把test1目錄直接複製成test2目錄,可結果rsync卻新建了test2目錄,而後把test1放到了test2中。爲了不這樣的狀況發生,咱們能夠這樣作:
這裏加一個/就能夠解決上面的問題,因此在使用rsync備份目錄時,要養成加/的習慣。
咱們知道-a選項等同於-rlptgoD,且-a還能夠和--no-OPTIN一併使用。再來看看-l選項的做用:
如上圖可見,若是不使用-l選項,系統則不會複製軟連接文件。
使用-L選項:
如上圖可見,加-L選項就能夠把源目錄中的軟連接的目錄文件複製到目的目錄中。
使用-u選項:
咱們先查看下test1/1和test2/1的建立時間,而後使用touch修改test2/1的建立時間,讓test2/1比test1/1的建立時間晚一些。
而後不加-u選項進行同步:
此時,test2/1的建立時間仍是和test1/1是同樣的。下面加上-u選項:
如上圖可見,加上-u選項後,不會再把test1/1同步爲test2/1了。
使用--delete選項:
首先刪除test1/123.txt,而後把test1/目錄同步到test2/目錄下:
咱們會發現,test2/目錄並無刪除123.txt文件。
加上--delete選項後:
此時,test2/目錄下的123.txt文件也被刪除了。
還有一種狀況,若是在目錄目錄中增長了文件,而源目錄中沒有這些文件,同步時加上--delete選項後一樣會刪除新增的文件:
使用--exclude選項:
該選項還能夠與匹配字符*一塊兒使用:
rsync [選項] ... SRC [ USER@ ]HOST:DEST
rsync [選項] ... [ USER@ ]HOST: SRC DEST
上面兩種方式就是經過ssh的方式備份數據,經過ssh的方式,其實就是讓用戶登陸到遠程機器,而後執行rsync的任務:
也可使用第三種方式複製:
10.32 rsync經過服務同步(上)
這種方式能夠理解爲:在遠程主機上創建一個rsync的服務器,在服務器上配置好rsync的各類應用,而後將本機做爲rsync的一個客戶端鏈接遠程的rsync服務器。
配置一臺rsync服務器的方法:
在192.168.6.120主機上創建並配置rsync的配置文件/etc/rsyncd.conf,以下圖所示:
參數的做用:
port:指定在哪一個端口啓動rsyncd服務,默認是873端口。
log file:指定日誌文件。
pid file:指定pid文件,這個文件的做用涉及服務的啓動、中止等進程管理操做。
address:指定啓動rsyncd服務的IP。假如你的機器有多個IP,就能夠指定由其中一個啓動rsyncd服務,若是不指定該參數,默認是在所有IP上啓動。
[ ]:指定模塊名,裏面內容自定義。
path:指定數據存放的路徑。
use chroot true|false:表示在傳輸文件前,首先chroot到path參數所指定的目錄下。這樣作的緣由是實現額外的安全防禦,但缺點是須要root權限,而且不能備份指向外部的符號鏈接所指向的目錄文件。默認狀況下chroot的值爲true,若是你的數據當中有軟連接文件,則通常設置爲false。
max connections:指定最大的鏈接數,默認爲0,即沒有限制。
read only ture|false:若是爲true,則不能上傳到該模塊指定的路徑下。
list:表示當用戶查詢該服務器上的可用模塊時,該模塊是否被列出,設定爲true則列出,設定爲false則隱藏。
uid|gid:指定傳輸文件時以哪一個用戶/組的身份傳輸。
auth users:指定傳輸時要使用的用戶名。
secrets file:指定密碼文件,該參數連同上面的參數若是不指定,則不使用密碼驗證。注意,該密碼文件的權限必定要是600。
hosts allow:表示被容許鏈接該模塊的主機,能夠是IP或者網段,若是是多個,中間用空格隔開。
編輯secrets file並保存後要賦予600權限,若是權限不對,則不能完成同步:
若是想開機ynfcrsyncd服務,請把/usr/bin/rsync --daemon --confg=/etc/rsyncd.conf寫入/etc/rc.d/rc.local文件中。
上面的例子中,都是要輸入密碼,這意味着咱們不能寫入腳本中自動執行。其實這種方式能夠不用手動輸入密碼,有兩實現方式。
(1)、指定密碼文件
(2)、在rsync服務端不指定用戶