rsync 是 Unix 系统中一个常用的设备间文件同步工具,用好它一定会提升你很多效率。
rsync
这次还是跟大家分享一个服务端相关的知识,就当是一起扩展认知吧,也说不定在某些时候正好能帮到你。这次跟大家聊得是一个叫做 rsync 的工具, 从它的名字可以看出,是一个专门用于在不同机器上面同步文件的工具。
rsync 分为服务端和客户端。 在服务端一般是以 daemon 守护进程的方式运行,监听客户端发送过来的文件。 在客户端, rsync 用于向开启 daemon 进程的服务器同步文件。
服务端配置
使用它需要在服务端和客户端同时进行配置。 我们首先来看服务端的配置。
如果你的服务端操作系统没有预装 rsync, 可以通过操作系统的包管理工具安装。 现代的类 Unix 系统大多数的包管理系统都非常完善,使用效率大幅提高。
以我的实验环境 CentOS 7 为例, 使用 yum 包管理工具安装:
$ yum install rsync
安装完成后,需要编辑 rsync 的配置文件:
$ vim /etc/rsyncd.conf
使用 vim 编辑器打开这个文件,然后输入如下内容:
[document]
path = /usr/share/document
list = true
uid = root
gid = root
read only = false
这是 rsync 最简单的一种配置方式,首先一对中括号的 [document] 代表配置节点的名称。 紧接着几个属性:
path: 该节点对应的文件路径。
list: 表示该节点是否可被发现。
uid: 指定传输到这里文件所属的用户。
gid: 指定传输到这里的文件所属的组。
read only: 该目录是否只读。
配置完这些选项之后,运行这条命令,则可开启 rsync 服务:
$ rsync --daemon
到这里服务端的配置就完成了, 这里是最简单的配置,关于 rsync 更完整的配置项,大家可以参考这里 http://www.gsp.com/cgi-bin/man.cgi?topic=rsyncd.conf
客户端配置
服务端配置完成以后,我们就可以在客户端操作文件同步了, 首先执行命令:
$ export RSYNC_PASSWORD=""
这个命令给 rsync 设置环境变量,设置服务器的登录密码。当然,你也可以不设置这个环境变量,这样在进行文件同步的时候,你就需要手工的输入密码。
接下来执行这条命令,就可以将本地的文件同步到服务端了:
rsync -azv ./ [email protected]::document --delete --exclude '.git'
这几个参数我们逐一讲解一下。
-a 参数: 是 archive 模式的缩写,这个模式是一系列参数的组合,一般文件同步都会带上它。
-z 参数: 对传输的文件进行压缩。
-v 参数: 输出详细日志。
这三个参数一般使用 -azv 组合写出。 紧接着这个参数是要同步的本地目录, 这里输入 ./ 代表当前目录。
然后接着写出远程服务器的用户名和 ip 地址, 在冒号后面是 rsync 模块名称 document, 在前面的配置文件中咱们设置过,还记得不?
--delete 参数表示,删除远程服务器存在,但本地目录不存在的文件。 加入你在本地删除了一个文件,想把这个文件的删除也同步到远程服务器,就需要加上这个参数。
--exclude 是排除选项,在这个参数中指定的文件,不会计入 rsync 文件同步列表中。 我们这个例子中忽略了 .git 目录,也就是 git 版本控制系统的隐藏目录。
执行这条命令后,我们当前目录以及子目录中的所有文件就都会同步到我们指定的远程服务器中了。
结语
rsync 是一个非常方便的文件同步工具。 相比于我们更熟悉的 ftp 模式, rsync 的同步方案更加自动化。 比如你在开发一个小型的 Web App,就非常推荐使用 rsync 上传你的程序文件。 除了进行服务器的文件同步, rsync 其实还支持更多的场景,只要涉及多个设备文件同步的问题, 都是 rsync 合适的场景。
更多精彩内容可关注微信公众号:
swift-cafe