在开发中,经常会遇到想在两个机器之间进行同步内容,现在linux中提供两个命令,基于ssh协议的scp和rsync、rsync可以通过remote shell也可以使用自身守护进程直接通过TCP。当使用TCP的时候,rsync在机器之间数据同步不用输入对端机器的密码;当你使用SSH协议作为底层协议,那么在同步数据的时候就必须输入密码才可以完成数据的同步。scp与rsync两个命令不仅仅是可以使用在机器之间同步数据,在一个机器内部也是可以进行数据的同步。但是对于scp来说,除了在机器之间和一个机器目录之间进行数据同步之外,还可以在两台不同机器之间进行数据同步。比如你在A机器,可以对B、C两台机器上的数据进行同步,但是rsync就不可以;也就是说当rsync进行跨机器同步数据的时候只可以在本机与另外一台机器之间进行数据的同步。

scp

scp命令就是拷贝,不过是在cp命令前多加了一个s,即security cp。从这可以看出它是一个安全的、加密过了的拷贝,因此它是可以使用在机器之间进行数据的拷贝。相对于scp命令,linux还提供了像rcp(remote cp)的数据拷贝命令,也是使用在机器之间的数据拷贝。因为scp命令参数比较少,比较容易掌握,在这里就不详细说明。

rsync

原理

rsync是为了在两个机器之间进行数据的同步,既然有了scp为何还要有这个协议那。该协议主要目的是在两台机器之间进行数据同步的时候,尽量少的传递数据。rsync可以聪明的在两台机器之间进行数据的同步,并通过合适的差分编码减少数据的传输。rsync的作用就是当要同步数据的对端已经存在部分要同步数据的情况下,通过使用rsync可以只传递对端没有的数据。假设一个文件100G,在文件末尾只加了一个句号。这时候要同步数据,如果使用scp那么要拷贝传输100G数据过去,而rsync只传输修改后的数据,也就是说只传递一个句号,整个任务就结束了。

rsync采用的是rolling check算法。当启动rsync数据同步的时候,对端会把数据做一个签名发送过来,然后接下来就进行数据的比对。

使用

对于rsync,需要你启动了rsync服务,而且你想同步的机器也需要启动了rsync服务。一般情况下机器都会主动启动的,一般都是以daemon的方式启动。另外,如果想使用TCP作为底层数据传输,启动方式也必须是daemon的方式。在启动rsync的时候,除了是否以后台守护进程的方式启动之外,还可以给--port参数,来决定监听哪个端口接受其他机器发出的同步请求。除了在启动的时候给出相应的参数,相应的其他配置都可以在/etc/rsyncd.conf配置文件中相应的修改。

下面就是一个配置文件的模版,需要了解的就是[data]红色标注的目录下面的配置。这个配置表示当有发起同步请求当这台机器的时候,当发送的是面向data的请求(这个下面会有说明)那么这个data对应的目录和允许的哪些IP发出同步请求,都在这下面进行配置。

motd file = /etc/rsyncd.motd
uid = uu
gid = usersuse chroot = no
max connections = 300
timeout = 7200
address=10.168.9.30
transfer logging = yes
dont compress = *.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.tbz
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.logpath = /data
comment = /data
ignore errors
read only = no
list = no
hosts allow = 127.0.0.1[app]
path = /usr/local/app
comment = /usr/local/app
ignore errors
read only = no
list = no
hosts allow = 127.0.0.1

当所有工作都准备,现在就可以使用rsync进行数据的同步了。在之前介绍的时候,了解到rsync可以使用两种传输协议基于rsync守护进程的TCP和基于其他协议。下面两种不同的命令则是选择了两种不同的传输方式。

$>rsync a user@10.168.9.30:/data/tmp/    #ssh

$> rsync a user@10.168.9.30::data/tmp/  --port 8080 #TCP

可以看出,两个命令之间的区别是在IP和目录之间,对于TCP是多了一个冒号,而且少了一个斜线。在上面讲解配置文件的时候提到,当发起rsync请求,请求的是面向data的时候,则会根据data相关的配置进行处理和检查。这里的data就是在配置文件中配置的[data]。另外当你使用守护进程的时候因为是基于TCP的,所以需要连接对端rsync监听的接口。因为监听的端口可以在rsync启动的时候通过--port选项指定,所以并不是每台机器监听的端口都是8080。

当使用rsync的时候,可能会报出module is read only rsync。这个时候你就需要去查看一下rsyncd.conf下目录是否配置了read only =yes,如果十点话就需要把yes修改为no。

下面就对rsync常见用法进行说明

1:不同步那些数据到对端

rsync在参数可选项中提供了--exclude选项,当你不想机器上某些数据被同步,可以使用该选项。

在同步当前目录到对端,不同步以svn结尾的文件

$> rsync . user@10.168.9.30::data/tmp/  --port 8080 --exclude=".svn"

除了--exclude之外,还有--include选项。但是需要注意的是,在命令中参数出现的顺序会对最后的结果有不同的影响。最先出现的参数重要性会超过稍后出现的参数的重要性。

$> rsync . user@10.168.9.30::data/tmp/  --port 8080 --include="a.svn" --exclude=".svn"

上一条命令会把a.svn同步到另一台机器,就算exclude已经禁止了svn结尾的文件。因为--include出现的早,重要性高于exclude。

这两个参数都是可以使用正则表达式,而且也可以把不想同步的文件名放在单独的一个文件exclude.list。

$> rsync . user@10.168.9.30::data/tmp/  --port 8080 --include="a.svn" --exclude=exclude.list

2:删除操作同步

当需要删除对端的文件的时候,也可以使用rsync命令。

$> rsync . --delete user@10.168.9.30::data/tmp/  --port 8080

但是这个命令会不仅会把你当前目录下删除的文件在同步的对端删除掉之外,还会同时会做一次同步操作,即把对端不存在的而当前目录存在的文件同步到对端去。

转载:https://blog.csdn.net/zwan0518/article/details/45695939

linux 同步数据scp与rsync相关推荐

  1. linux快速同步多台服务器之间的数据scp和rsync命令用法

    一.scp命令 scp就是secure copy,是用来进行远程文件拷贝的.数据传输使用ssh1,并且和ssh1使用相同的认证方式,提供相同的安全保证.与rcp不同的是,scp会要求你输入密码如果需要 ...

  2. 群晖能从linux备份数据吗,通过rsync将Linux服务器数据备份到群晖

    linux主机同步命令 1. 使用加密的rsync服务传输数据(ssh加密) 使用加密rsync,其实就是使用ssh传输,所以可以不用启动群晖的rsync daemon服务,可以设置ssh免密登录或者 ...

  3. rsync 同步数据记录_非初学者指南与Rsync同步数据

    rsync 同步数据记录 The rsync protocol can be pretty simple to use for ordinary backup/synchronization jobs ...

  4. rsync+sersync实时同步数据

    前言 rsync+sersync实时同步数据. 简介 rsync+sersync实时同步数据的原理是在客户端安装sersync监控目录的变化,一般是增删改,检测到变化以后,将变化的文件同步到服务端. ...

  5. Linux中同步数据之scp VS rsync

    ##scp和rsync简介 项目开发中经常有服务器之间同步数据的需求,在Linux中提供了两个命令,scp和rsync,这两个命令不仅仅是可以使用在机器之间同步数据,在一个机器内部也是可以进行数据的同 ...

  6. linux运维笔记:Rsync数据同步工具

    linux运维笔记:Rsync数据同步工具 1-Rsync简介 Rsync英文全称是Remote synchronization,Rsync具有可以使本地和远程两台主机之间的数据快速复制和同步镜像.远 ...

  7. Linux实战教学笔记21:Rsync数据同步工具

    原文地址:https://www.cnblogs.com/chensiqiqi/p/6514315.html 目录 第二十一节 Rsync数据同步工具 1.1 Rsync介绍 1.1.1 什么是Rsy ...

  8. linux云计算架构师:Rsync+sersync实现数据实时同步

    全套学习资料移步至公众号[学神来啦]更多学习资料添加扣扣资源群:661308959 本节所讲内容:   2.1  Rsync概述   2.2  Rsync服务安装   2.3  Rsync+sersy ...

  9. L39.linux命令每日一练 -- 第六章 文件备份与压缩命令 -- scp和rsync

    6.5 scp:远程文件复制 6.5.1 命令详解 ​ [命令星级] ★★★★★ ​ [功能说明] ​ scp命令用于在不同的主机之间复制文件,它采用SSH协议来保证复制的安全性.scp命令每次都是全 ...

  10. linux 不同电脑cp,linux命令:拷贝命令家族(cp、scp、rsync)

    Linux命令中:rsync和cp之间的区别 - 小 楼 一 夜 听 春 雨 - 博客园 https://www.cnblogs.com/kex1n/p/7008178.html cp,scp,rsy ...

最新文章

  1. cmake 编译mysql_CentOS5.6下使用cmake编译MySQL5.5.13源码和安装
  2. 一个工程师对流程管理的思考
  3. selenium,webdriver 执行js语句 对象是百度
  4. python中html.parser_在Python中使用HTMLParser解析HTML的教程
  5. 上传图片或文件 方法一
  6. signature=ec663bb1ca3cfa2e278da44aa044d1c6,Fair Exchange of Signatures with Multiple Signers
  7. postgresql 备份 java_用JAVA执行CMD命令备份PG数据库,解决需要输入口令的问题
  8. 第六周java实验报告四
  9. ASP.NET MVC中ApiController与Controller的区别
  10. CodeChef June Challenge 2017
  11. Borland Delphi7 企业版注册方法
  12. 单片机3x3矩阵键盘c语言,C51单片机的3*3矩阵键盘程序
  13. 【WPF扁平化界面设计】
  14. 2017.12.5对内网,外网的理解
  15. Gos ——内存管理系统
  16. 【Java实例】王者荣耀阵容展示
  17. android-ultra-pull-to-refresh list,Android下拉刷新控件android-Ultra-Pull-To-Refresh 使用
  18. Java使用IKAnalyzer实现多关键字查询
  19. SCons教程(3) 编译程序
  20. JAVA与MAVEN打包

热门文章

  1. 简单的spring mvc实例
  2. zookeeper集群配置并让metaq注册进来
  3. Windows平台上实现P2P服务(一)
  4. 异曲同工 WinForm和ASP.NET如何选?
  5. Python基础学习(二)
  6. android147 360 程序锁
  7. mysql   show global variables
  8. 嵌入式工具——lsof
  9. Android 学习之逐帧动画(Frame)
  10. 应用程序热补丁(三):完整的设计与实现