使用cwRsync在windows和linux之间同步文件
1、背景
在做linux服务器上的开发项目时,本来可以直接使用远程的vim+tmux作为自己的IDE,但是最近网络不是很好,所以构想还是在本地用windows+eclipse进行开发,等待网络稳定时,使用rsync同步两边文件夹,再到linux环境上去调试代码。
2、eclipse需要的设置
2.1设置eclipse的换行符
eclipse模式使用操作系统的换行,改成unix模式的(window->preference):

如果是已经存在的文件,怎么修改换行?(File-->Convert line Delimeters)
2.2设置python的缩进
python的缩进在linux中设置的是4个空格,在eclipse中也改过来(preference->Editors->Text Editors)

同时将tab改为4个空格,在pydev的设置中改过来

3 cwRsync的使用
参考的教程:
- 1、http://www.dahouduan.com/2014/11/19/rsync-daemon/
- 2、https://www.ilanni.com/?p=8499
- 3、https://www.ilanni.com/?p=8646
在考虑使用Rsync的时候本来也考虑使用git或者svn的,但是我的linux上本来就是用git管理的,所以为了不那么复杂,想直接使用rsync在linux和windows之间进行文件夹的同步。
3.1安装cwRsync
windows下的rsync软件是cwRsync,因为自带了cygwin,所以下载下来之后解压直接可用,最好把bin目录添加到环境变量:

3.2 rsync ssh模式
最直接使用rsync的方式就是ssh模式了,缺点是每次都需要输入密码。
通过ssh推送本地目录到远程目录:
rsync -avz --delete -e 'ssh -p 28949' --chown=0:0 /cygdrive/d/workspace/rsync_test
root@47.89.xxx.xxx:/root
- ssh可以使用非默认端口
- cygdrive是一个增加的根目录,windows本来没有这个,/cygdrive/d/表示windows下的d盘
- avz是默认参数,可以加上--delete会在文件夹中进行强制同步(删除远程端文件)
- chown可以设置推送过去的文件的user和group名,由于windows没有这个东西,我直接设置root:root会失败,不过可以设置用户名和组名的编号
通过ssh拉取远程目录到本地目录
rsync -avz -e 'ssh -p 28949' root@47.89.xxx.xxx:/root/rsync_test /cygdrive/d/workspace
3.3 rsync daemon模式
除了使用ssh每次输入密码之外,还可以使用rsync的daemon模式,更加安全(不能随便指定任意的远程目录),也更加复杂,如果要使用daemon模式在window和linux双向同步数据,需要在linux和windows上都启动rsync server。
在linux上设置rsync server,需要参考的文档 https://download.samba.org/pub/rsync/rsyncd.conf.html
配置/etc/rsyncd.conf
uid = root
gid = root
max connections = 4
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
#下面这个模块区域可以配置多个,每一个代表一个允许同步的path
[logs]
path = /root/
ignore errors
read only = no
list = true
auth user = root
secrets file = /etc/rsyncd.pwd
同时设置/etc/rsyncd.pwd
root:rootpassword
在linux上启动和停止rsync daemon
#启动,会打开端口873
rsync --daemon
#停止rsync daemon
pkill rsync
启动之后可以在windows上进行推送了,推送的目标设置为logs,在配置文件中,logs会对应到指定的path
rsync -avzP --chown=0:0 --password-file=/cygdrive/d/XXX /cygdrive/d/workspace/rsync_test root@47.89.xxx.xxx::logs
PAUSE
4 cwRsyncServer在windows上开启daemon
在windows上开启daemon模式可能是另一个故事了,可以阅读参考教程中的第三个,由于我暂时用不到,就先略过
5 补充几点
应用起来的时候还出现几个问题,需要补充一下
5.1 关于rsync版本
在我的linux服务器centos7上的rsync是3.0.9,有很多功能都没有,还需要进行一波手动升级,升级到3.1.2就好了。升级流程是简单的./configure, make, make install
5.2 windows到linux chmod的问题
在windows里面的文件权限和linux是很不一样的,rsync将windows文件同步到linux时默认使用的是755权限,如果需要修改,可以使用--chmod参数
rsync -avzP --chown=0:0 --chmod=644 /cygdrive/d/workspace/test root@192.168.xx.xx::test
#还有一种更先进的chmod方式,可以指定到具体的文件夹和文件
--chmod=Dg+s,ug+w,Fo-w,+X
--chmod=D2775,F664
#D代表目录,F代表文件,ugo,应该代表user、group、other
5.3 exclude排除同步文件夹,文件
在rsync一个目录的时候,可以手动的排除其中的某一些文件和子目录
rsync -avzP --chown=0:0 --chmod=644 --exclude='Suite' /cygdrive/d/workspace/test root@192.168.xx.xxx::test