使用 Rsync 從 Windows 同步數據到 Linux


為什么要使用 rsync 從 Windows 到 linux 進行同步?

我們經常會面臨這種的情況,項目使用 Windows 開發,最終部署在 Linux 上,但有時想要進行測試、維護、迭代版本時操作時,服務器和本地的開發環境代碼的同步就成了問題。當然我們可以選用 Git 進行代碼的同步。但有時代碼的頻繁修改,並且修改后的驗證需要依賴外部的 Linux 服務器,這時 git 的提交便成了令人抓狂的操作。當然有人說可以使用 Jenkins 等這樣的自動化工具進行部署,但由於資源或學習成本等其他外部因素,使用起來代價稍高。為了解決這個問題,今天推薦一個叫 rsync 的工具,它不但支持 Windows 與 Linux 之間的數據同步,而且配置簡單,同時增量同步的功能更是解決了頻繁修改代碼的問題。

如何配置 rsync?

rsync 配置很容易,這里以 Windows 作為客戶端,Linux 作為服務端進行演示。

Linux 配置

安裝 rsync

# 檢查是否安裝了 rsync
rpm -qa|grep rsync

# 如果沒有安裝的話,進行安裝
yum install rsync

# 將 rsync 設置成開啟自啟,並啟動
systemctl enable rsyncd
systemctl start rsyncd

編寫配置文件

rsync 涉及到的配置主要有三個:

  • /etc/rsyncd.conf -> 對 rsync 服務進行配置
  • /tmp/rsync -> 待同步的目標目錄,路徑可以自定義
  • /etc/rsyncd.passwd ->里面包含用於進行密碼驗證的賬號信息

/etc/rsyncd.conf 的配置

# /etc/rsyncd: configuration file for rsync daemon mode

# See rsyncd.conf man page for more options.

# 進行通信的端口,如果 firewall 打開的話,需要將對應的端口添加進去
port=8730

# 日志文件
log file=/var/log/rsync.log

# rsync 的進程 id
pid file=/var/run/rsync.pid

# 要同步的模塊,這里一般以項目名命名
[cmi]

# 同步的目標文件夾
path=/tmp/rsync

# rsync daemon 在傳輸前是否切換到指定的 path 目錄下,並將其監禁在內,用於增加傳輸的安全性
use chroot=no

# 指定最大的連接數
max connections=4

# yes 表示只讀本地文件無法同步到服務器
read only=no

# 客戶端請求顯示模塊列表時,該模塊是否顯示出來
list=true

# 服務運行時的用戶
uid=root

# 服務運行時的用戶組
gid=root

# 進行驗證時的用戶名,必須是系統存在的用戶
auth users = root 

# 連接用戶時的密碼
secrets file=/etc/rsyncd.passwd

# 允許的 ip
hosts allow=*

創建目標的文件夾

mkdir /tmp/rsync

創建密碼

# 創建文件夾
vim /etc/rsyncd.passwd

# 寫入密碼
echo "root:123456" > /etc/rsyncd.passwd

#更改文件權限
chmod 600 /etc/rsyncd.passwd

打開rsync

systemctl start rsyncd

windows 配置

下載 cwrsync

https://www.itefix.net/cwrsync-free-edition

將下載的文件存放到固定位置

# 下載的文件名類似於這樣
cwrsync_5.7.2_x86_free.zip
# 解壓並放入目錄,並添加到環境變量中,方便日后的使用
我這里配置的目錄是“C:\app\rsync\cwrsync_5.7.2_x86_free\bin”

執行命令

# 如果配置環境變量,隨意打開一個 cmd 就可以了,否則的話進入安裝的目錄中(bin 下面)

rsync.exe -avPz --port 8730 --password-file=/cygdrive/C/app/rsync/cwrsync_5.7.2_x86_free/bin/cmi_password.txt --exclude-from=/cygdrive/C/app/rsync/cwrsync_5.7.2_x86_free/bin/exclude.txt /cygdrive/C/test  root@your_ip::cmi/

# 常見的的參數

-a: 歸檔模式,使用遞歸傳輸並保持文件的屬性
-v: 顯示傳輸過程中的詳細信息
-P: 顯示文件傳輸的進度信息
-z: 傳輸中進行壓縮,提高傳輸速度

--password-file: 登錄時用到的密碼文件,該文件直接把密碼包含就可以,用戶名需要顯式指定
--exclude-from:  指定不需要進行傳輸的文件和文件夾
--delete: 在 exclude/include 規則生效后執行,假如服務器中文件比傳入的文件多,則刪除,少的話,則添加。

# 在指定文件夾目錄時,進入在真實目錄前添加 /cygdrive/ 后面跟正常目錄就可以了
比如密碼文件的路徑: /cygdrive/C/app/rsync/cwrsync_5.7.2_x86_free/bin/cmi_password.txt 
排除文件的路徑:/cygdrive/C/app/rsync/cwrsync_5.7.2_x86_free/bin/exclude.txt
本地傳送的路徑: /cygdrive/C/test -> 表說 C 盤的 test

# 最后兩個參數,表示想要傳送的文件夾,以及服務器的 iP 以及認證的用戶和模塊、
 root@your_ip::cmi/ -> 用戶名為 root,cmi 表示傳入的模塊,均在服務端進行配置

關於密碼文件 cmi_password.txt 的內容,寫入文件就好

123456

關於排除文件 exclude.txt 的實例

.idea
l3vpn_not_used
load-dir
_namespaces

總結

使用 rsync 從 windows 同步數據到 linux 很簡單,在 linux 作為服務器,windows 作為客戶端的情況下:

linux 分別需要進行三個文件的配置,並且不要忘了給密碼文件添加權限。

windows 僅需要在安裝后,直接使用就可以了,無非就是一些參數的添加。

最后,大家可以使用 windows 的定時任務,進行數據的定時同步。希望提高大家的工作效率。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM