Linux中怎么利用Unison實現(xiàn)文件雙向同步

本篇文章給大家分享的是有關Linux中怎么利用Unison實現(xiàn)文件雙向同步,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

專注于為中小企業(yè)提供成都做網(wǎng)站、網(wǎng)站制作、成都外貿(mào)網(wǎng)站建設服務,電腦端+手機端+微信端的三站合一,更高效的管理,為中小企業(yè)云和免費做網(wǎng)站提供優(yōu)質(zhì)的服務。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了上千余家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設實現(xiàn)規(guī)模擴充和轉(zhuǎn)變。

一、Unison簡介
Unison是Windows、Linux以及其他Unix平臺下都可以使用的文件同步工具,它能使兩個文件夾(本地或網(wǎng)絡上的)保持內(nèi)容的一致。Unison擁有與其它一些同步工具或文件系統(tǒng)的相同的特性,但也有自身的特點:
1.跨平臺使用;
2.對內(nèi)核和用戶權限沒有特別要求;
3.Unison是雙向的,它能自動處理兩分拷貝中更新沒有沖突的部分,有沖突的部分將會顯示出來讓用戶選擇更新策略;
4.只要是能連通的兩臺主機,就可以運行unison,可以直接使用socket連接或安全的ssh連接方式,對帶寬的要求不高,使用類似rsync的壓縮傳輸協(xié)議。

環(huán)境如下:
vm1:10.13.114.19
vm2:10.13.114.32

二、編譯安裝Unison
Linux下通過源碼包編譯安裝Unison時,需要用到Objective Caml compiler。
通過以下方式安裝
[root@vm1 ~]# wget http://caml.inria.fr/pub/distrib/ocaml-3.12/ocaml-3.12.1.tar.gz
[root@vm1 ~]# tar -xzvf ocaml-3.12.1.tar.gz
[root@vm1 ~]# cd ocaml-3.12.1
[root@vm1 ocaml-3.12.1]# ./configure
[root@vm1 ocaml-3.12.1]# make world opt
[root@vm1 ocaml-3.12.1]# make install

編譯安裝Unison
[root@vm1 ~]# wget http://www.seas.upenn.edu/~bcpierce/unison//download/releases/stable/unison-2.40.63.tar.gz
[root@vm1 ~]# tar -xzvf unison-2.40.63.tar.gz
[root@vm1 ~]# cd unison-2.40.63
[root@vm1 unison-2.40.63]# make UISTYLE=text
[root@vm1 unison-2.40.63]# make install

在執(zhí)行make install的過程中,可能會出現(xiàn)以下錯誤提示:
mv: cannot stat '/root/bin//unison': No such file or directory
make: [doinstall] Error 1 (ignored)
cp unison /root/bin/
cp: cannot create regular file '/root/bin/': Is a directory
make: *** [doinstall] Error 1

出現(xiàn)錯誤的原因在與Unison默認是將文件Copy到/root/bin目錄,但Linux默認是沒有該目錄的,因此我們需要將生成的可執(zhí)行文件unison復制到系統(tǒng)的PATH目錄。
[root@vm1 unison-2.40.63]# cp unison /usr/local/bin



將可執(zhí)行文件unison上傳到遠程主機10.13.114.32
[root@vm1 unison-2.40.63]# scp unison root@10.13.114.32:/root/
通過SSH登陸到遠程主機,再將unison復制到vm2的PATH目錄
[root@vm2 ~]#cp unison /usr/local/bin

三、配置ssh key信任
建議通過普通用戶進行操作,理由是通過root操作本身就危險,免密碼登陸的root就更危險了。

在兩臺服務器上創(chuàng)建admin用戶
[root@vm1 ~]# useradd -m admin
[root@vm1 ~]# passwd 12345
[root@vm2 ~]# useradd -m admin
[root@vm2 ~]# passwd 123456

在vm1上創(chuàng)建key并配置vm2的信任
[root@vm1 ~]# su – unison
[admin@vm1 ~]$ ssh-keygen -t rsa
在提示保存私鑰(key)和公鑰(public key)的位置時,使用默認值;
在提示是否需要私鑰密碼(passphrase)時,直接敲回車,即不使用私鑰密碼。
之后,將生成一對密鑰,id_rsa(私鑰文件)和id_rsa.pub(公鑰文件),保存在/home/unison/.ssh/目錄下。

將公鑰添加到vm2的 authorized_keys 文件中
將文件上傳到vm2
[admin@vm1 ~]$ scp ~/.ssh/id_rsa.pub unison@10.13.114.32:/home/unison/

使用rsync用戶SSH到登陸到遠程主機,并將公鑰添加到 authorized_keys 文件中
[admin@vm2 ~]$ mkdir .ssh
[admin@vm2 ~]$ chmod 700 .ssh
[admin@vm2 ~]$ mv ~/id_rsa.pub ~/.ssh/authorized_keys
[admin@vm2 ~]$ chmod 600 ~/.ssh/authorized_keys

同理,執(zhí)行以下步驟在vm2上創(chuàng)建key并配置vm1的信任
[root@vm2 ~]# su – admin
[admin@vm2 ~]$ ssh-keygen -t rsa

將文件上傳到vm1
[admin@vm2 ~]$ scp ~/.ssh/id_rsa.pub unison@10.13.114.19:/home/unison/

使用rsync用戶SSH到登陸到vm1,并將公鑰添加到 authorized_keys 文件中
[admin@vm1 ~]$ mv ~/id_rsa.pub ~/.ssh/authorized_keys

重啟SSH服務
[root@vm1 ~]# /etc/init.d/sshd restart
[root@vm2 ~]# /etc/init.d/sshd restart

四、Unison的配置與使用
在兩臺服務器上創(chuàng)建test目錄,用于測試
[root@vm1 ~]# su - admin
[unison@vm1 ~]$ mkdir test
[root@vm2 ~]# su - unison
[unison@vm2 ~]$ mkdir test

在兩臺服務器上分別執(zhí)行一次unison,如果出現(xiàn)提示確認,則直接敲回車選擇默認值
[unison@vm1 ~]$ unison /home/admin/test/ ssh://admin@10.13.114.32//home/admin/test/
[unison@vm2 ~]$ unison /home/admin/test/ ssh://admin@10.13.114.19//home/admin/test/

修改兩臺服務器的unison配置文件,輸入以下內(nèi)容
[unison@vm1 ~]$ vim /home/unison/.unison/default.prf
 

    #Unison preferences file root = /home/admin/test root = ssh://admin@10.13.114.32//home/admin/test/ #force = #ignore = batch = true #repeat = 1 #retry = 3 owner = true group = true perms = -1 fastcheck = false rsync = false sshargs = -C xferbycopying = true log = true logfile = /home/unison/.unison/unison.log



[unison@vm2 ~]$ vim /home/unison/.unison/default.prf

    #Unison preferences file root = /home/admin/test root = ssh://admin@10.13.114.19//home/admin/test/ #force = #ignore = batch = true #repeat = 1 #retry = 3 owner = true group = true perms = -1 fastcheck = false rsync = false sshargs = -C xferbycopying = true log = true logfile = /home/unison/.unison/unison.log



相關注解如下:
force表示會以本地所指定文件夾為標準,將該目錄同步到遠端。這里需要注意,如果指定了force參數(shù),那么Unison就變成了單項同步了,也就是說會以force指定的文件夾為準進行同步,類似與rsync。
Unison雙向同步基本原理是:假如有A B兩個文件夾,A文件夾把自己的改動同步到B,B文件夾也把自己的改動同步到A,最后A B兩文件夾的內(nèi)容相同,是AB文件夾的合集。
Unison雙向同步的一個缺點是,對于一個文件在兩個同步文件夾中都被修改時,unison是不會去同步的,因為unison無法判斷以那個為準。
ignore = Path表示忽略指定目錄,即同步時不同步它。
batch = true,表示全自動模式,接受缺省動作,并執(zhí)行。
-fastcheck true 表示同步時僅通過文件的創(chuàng)建時間來比較,如果選項為false,Unison則將比較兩地文件的內(nèi)容。
log = true 表示在終端輸出運行信息。
logfile 指定輸出的log文件。

另外,Unison有很多參數(shù),這里僅介紹常用的幾個,詳細的請參看Unison手冊。
-auto //接受缺省的動作,然后等待用戶確認是否執(zhí)行。
-batch //batch mode, 全自動模式,接受缺省動作,并執(zhí)行。
-ignore xxx //增加 xxx 到忽略列表中
-ignorecase [true|false|default] //是否忽略文件名大小寫
-follow xxx //是否支持對符號連接指向內(nèi)容的同步
owner = true //保持同步過來的文件屬主
group = true //保持同步過來的文件組信息
perms = -1 //保持同步過來的文件讀寫權限
repeat = 1 //間隔1秒后,開始新的一次同步檢查
retry = 3 //失敗重試
sshargs = -C //使用ssh的壓縮傳輸方式
xferbycopying = true"
-immutable xxx //不變目錄,掃描時可以忽略
-silent //安靜模式
-times //同步修改時間
-path xxx 參數(shù) //只同步 -path 參數(shù)指定的子目錄以及文件,而非整個目錄,-path 可以多次出現(xiàn)。

PS:Windows下的unison配置文件默認位于C:\Documents and Settings\currentuser\.unison目錄,默認的配置文件名是default.prf。

五、測試
首先分別在server1與server2的/home/unison/test目錄下創(chuàng)建文件或目錄,然后在server1上執(zhí)行unison,接著如果在server1與server2上都能看到各自創(chuàng)建的文件,就說明同步成功。

分別在server1與server2上創(chuàng)建文件
[unison@server1 ~]$ cd test
[unison@server1 test]$ touch 1.txt touch 3.txt
[unison@server2 ~]$ cd test
[unison@server2 test]$ touch 2.txt touch 4.txt

在server1上執(zhí)行unison
[unison@server1 ~]$ unison

在server1與server2上查看文件是否同步
[unison@server1 ~]$ cd test
[unison@server1 test]$ ls
1.txt 2.txt 3.txt 4.txt
[unison@server2 ~]$ cd test
[unison@server2 test]$ ls
1.txt 2.txt 3.txt 4.txt

均看到了“1.txt 2.txt 3.txt 4.txt”所有文件,說明文件同步已經(jīng)成功!

注意:第一次SSH連接的時候可能需要輸入一次密碼,之后就不需要輸入了。

六、定期或?qū)崟r執(zhí)行同步
如果想要定期執(zhí)行,則通過crontab計劃任務來實現(xiàn),例如通過以下方式設置每5分鐘執(zhí)行一次
[root@server1 ~]# su - unison
[unison@server1 ~]$ crontab -e
1    */5 * * * * /usr/local/bin/unison

以上就是Linux中怎么利用Unison實現(xiàn)文件雙向同步,小編相信有部分知識點可能是我們?nèi)粘9ぷ鲿姷交蛴玫降?。希望你能通過這篇文章學到更多知識。更多詳情敬請關注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

本文標題:Linux中怎么利用Unison實現(xiàn)文件雙向同步
URL網(wǎng)址:http://muchs.cn/article24/pdhcje.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供商城網(wǎng)站、網(wǎng)站設計公司、網(wǎng)站策劃、小程序開發(fā)、外貿(mào)建站、定制網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站托管運營