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服务端不指定用户