前段日子在网上找rsync daemon的filter等过滤规则的详解,怎么也找不到,哥一怒之下,决定自己动手翻译,于是有了本文…
    本文内容翻译自rsync的官方文档:http://rsync.samba.org/ftp/rsync/rsync.html,以及http://rsync.samba.org/ftp/rsync/rsyncd.conf.html,非完整的全文翻译,并且按照我的需要,对原文的相关章节或条目进行了适当的重新编排。官方文档发布日期:26 Mar 2011。

rsync是Unix/Linux系统中一款优秀高效的镜像同步和远程数据备份工具,它可以把本地文件拷贝到远程主机,或从远程主机拷贝文件到本地,也可以在本地的两个目录之间进行拷贝,但不支持两个远程主机之间的互相拷贝。


    关于rsync的工作方式:
    rsync连接远程主机进行同步或备份时有两种途径:使用远程shell程序(如ssh或rsh)进行连接,或使用TCP直接连接rsync daemon。
    当源路径或目的路径的主机名后面包含一个冒号分隔符时,rsync使用远程shell传输;当源路径或目的路径的主机名后面包含两个冒号,或使用rsync://URL时,rsync使用TCP直接连接rsync daemon。
    特别的,如果只指定了源路径,而没有指定目的路径,rsync将会显示源路径中的文件列表,类似于使用命令ls -l。
 rsync把本地端看作client,把远程端当成server。注意:不要把server与rsync daemon混淆!daemon一定是server,而server却不一定是daemon,也可能是远程shell的衍生进程。
    至于什么是daemon,以及远程shell衍生daemon,下文会有说明。

    关于rsync的安装:
    rsync安装方式是最常规的./configure && make && make install,只是要注意:源机器和目标机器都要安装。

    关于rsync的启动:
    前面说过rsync在进行同步或备份时,有两种途经连接远程主机:使用远程shell,或使用TCP连接远程daemon,可以把它们分别称之为shell模式和daemon模式。只有daemon模式才有启动rsync一说。
    如果使用shell模式,rsync安装完成后就可以直接使用了,无所谓启动,也不需要任何配置文件。远程传输时一般使用ssh作为传输工具,当然,也可以使用参数-e来指定一个远程shell。
    如果使用daemon模式,就无需远程shell了,但必须在一台机器上启动rsync daemon,默认端口873.

你可以经由inetd启动daemon,或者作为一个独立进程启动daemon,或者由rsync client通过远程shell启动daemon。
     1)如果把它作为一个独立进程来启动,只需要运行命令:rsync --daemon即可;
     2)如果通过inetd来运行,要修改两个文件:/etc/services和/etc/inetd.conf:
      在/etc/services文件中添加如下行:rsync 873/tcp
      在/etc/inetd.conf中添加:rsync stream tcp nowait root /usr/bin/rsync rsyncd --daemon
  注意把/usr/bin/rsync换成你的rsync安装目录!然后重启inetd服务,使配置文件生效。

关于由client通过远程shell启动daemon,官方文档中有一个条目:USING RSYNC-DAEMON FEATURES VIA A REMOTE-SHELL CONNECTION。
    条目中说,rsync支持这种用法:使用远程shell连接host,然后衍生出一个single-use “daemon”服务器,来读取远程用户家目录下的配置文件。从用户的角度看,通过远程shell连接而启用的daemon传输,它的命令行语法跟正常的rsync daemon传输是一样的,唯一不同的是,你必须在命令中使用--rsh=COMMAND来明确远程shell程序。如下例:
    rsync -av --rsh=ssh host::module /dest
  译者注:虽然官方文档中说这种用法在某些情况下很有用,但我觉得很别扭。

当rsync作为daemon运行时,它需要一个用户身份。如果你希望启用chroot,则必须以root的身份来运行daemon,监听端口(1024以下,默认873),或设定文件属主;如果不启用chroot,也可以不使用root用户来运行daemon,但该用户必须对相应的模块拥有读写数据、日志和lock file的权限。
    当rsync以daemon模式运行时,它还需要一个配置文件:rsyncd.conf。修改这个配置后不必重启rsync daemon,因为每一次的client连接都会去重新读取该文件。
    译者注:关于配置文件rsyncd.conf的设定,后面会有详细的参数解释。

关于rsync的两种模式:
    该部分额外的内容来自IBM官方网站上的一篇文章。该文章把rsync的运行模式扩展成了四种,但我认为rsync官方文档的两种模式的划分更加合理一些。
    所谓rsync daemon,就是在一台机器上永久运行的rsync进程。在任何一台安装rsync的机器上运行rsync --daemon,则这台机器上运行的rsync就是rsync daemon。我们可以把文件发送给daemon,也可以向daemon请求文件。
    daemon模式非常适合创建中心备份服务器,或项目存储库。
    两种模式的区别前面已经说过,shell模式在源路径和目的路径中使用一个冒号,而daemon模式使用两个冒号。

关于rsync命令的语法:

  1. 本地拷贝:
  2. rsync [选项] SRC… DEST,在本地进行复制操作
  3. shell模式:
  4. rsync [选项] [user@]Host:SRC… [DEST],拉动作,从远程主机拉文件到本地
  5. rsync [选项] SRC… [user@]Host:DEST,推动作,把本地文件推送到远程主机
  6. daemon模式:
  7. rsync [选项] [user@]Host::SRC… [DEST],拉动作
  8. rsync [选项] rsync://[user@]Host [:port]/SRC… [DEST],仍然是拉动作
  9. rsync [选项] SRC... [user@]Host::DEST,推动作
  10. rsync [选项] SRC...rsync://[user@]Host [:port]/DEST,仍然是推动作
    官方文档的举例:
    1)rsync -t *.c foo:src/
        把当前目录中所有以.c结尾的文件传输到机器名为foo的src目录中。如果某些文件已经在远程主机中存在,则跳过该文件。
    2)rsync -avz foo:src/bar /data/tmp
         从机器名为foo的远程主机上把/src/bar目录及其下所有文件传输到本地机器的/data/tmp目录中。注意:源路径src/bar的最后没有斜杠”/”!
        源路径的最后是否有斜杠有不同的含义:有斜杠,只是复制目录中的文件;没有斜杠的话,不但要复制目录中的文件,还要复制目录本身!
        目的路径的最后有没有斜杠,对传输没有影响。
    3)rsync -av host:file1 :file2 host:file{3,4} /dest/
         rsync -av host::mod/file{1,2} host::mod/file3 /dest/
         rsync -av host::mod/file1 ::mod/file{3,4}
        这个例子是rsync更高级一点的用法,使用rsync同时传输多个指定文件。
    rsync可以一次传输多个指定的文件,方法是添加多个远程主机参数,或忽略主机名。如上例。

关于rsync命令中的选项:
    上面例子中提到了一些选项,rsync的选项有很多,请参考官方文档。常用的选项如下:

  1. -a:归档模式,保持文件的所有属性,相当于-rlptgoD
  2. -r:递归模式
  3. -e:指定一个远程shell
  4. -z:文件传输时进行压缩处理
  5. --delete:镜像中常用,删除DEST中那些SRC中不存在的文件
 daemon也有一些常用选项,下面会有介绍。

client如何连接rsync daemon:
    上面第3个例子已经给出了client连接daemon的语法示例。但是官方文档又把本条目单独列了出来,提醒我们在连接rsync daemon时要注意的几点:
    1) daemon模式中的源路径,即SRC,实际上是模块的名称
    2) 如果未在双冒号::后面指定源路径,则rsync会列出daemon上所有可能的模块
    3) 不要使用--rsh(-e)参数
    4) 有些模块可能需要密码认证,你可以使用--password-file选项,来指定密码文件

启用一个rsync daemon来接受client的连接:
    除--daemon外,rsync daemon启动时还有其它一些常用选项:
    --daemon:
      使rsync作为一个daemon运行。daemon有两种启动方式,前面已经说过。对client发出的每一次连接请求,daemon会读取配置文件rsyncd.conf,然后做出相应的回应。
    --bwlimit=KBPS:
      指定daemon每秒传输的最大千字节。client在请求连接时也可以指定一个--bwlimit值,但该值不能大于daemon端的设置。
    --config=FILE:
      指定daemon的配置文件。只有当rsync以daemon模式运行的时候,该选项才有效。默认的配置文件为/etc/rsyncd.conf,除非daemon是通过远程shell运行,并且远程user非超级用户,这种情况下,配置文件rsyncd.conf默认存在于当前目录(在$HOME目录中比较典型)。关于通过远程shell启用daemon,见上文。
    --port=PORT:
      指定daemon监听的端口。
    --log-file=FILE:
      该选项告诉daemon不要使用rsyncd.conf中指定的log文件,而要使用此处指定的文件。此选项很少用到

【rsync】工作模式及语法相关推荐

  1. rsync一:工作模式及语法

    前段日子在网上找rsync daemon的filter等过滤规则的详解,怎么也找不到,哥一怒之下,决定自己动手翻译,于是有了本文-     本文内容翻译自rsync的官方文档:http://rsync ...

  2. rsync的介绍及参数详解,配置步骤,工作模式介绍

    rsync的介绍及参数详解,配置步骤,工作模式介绍 rsync是类unix系统下的数据镜像备份工具.它是快速增量备份.全量备份工具. Sync可以远程同步,支持本地复制,或者与其他SSH.rsync主 ...

  3. 程序员简历工作模式_简历的完整形式是什么?

    程序员简历工作模式 简历:简历 (CV: Curriculum Vitae) The CV is an abbreviation of Curriculum Vitae. It is a writte ...

  4. 【嵌入式开发】ARM 处理器工作模式 及 修改方法 ( 处理器模式 | 设置处理器模式 | 程序状态字寄存器 CPSR SPSR | 模式设置代码编写 | 设置 svc 模式 )

    一. 处理器工作模式相关介绍 1. 处理器模式简介 (1) 处理器工作模式分类 (2) 处理器不同工作模式区别 (3) Linux 系统运行的模式 (4) 特权模式 说明 (5) 异常模式 (6) 系 ...

  5. java加密工作模式None_simple1234

    simple1234 回答了问题 · 2018-05-25 引入文件 const {ReadCard} = CardReader; 自己编写js文件 import md5 from 'crypto-j ...

  6. vim编辑器的工作模式

    vim编辑器的三种工作模式:命令模式.输入模式.末行模式 打开文件:将准备打开的文件指定为命令行上的一个参数.# vim /etc/hosts 编辑文本 在命令模式中,键的映射不是为了插入所按下的字符 ...

  7. rsync工作机制(翻译)

    本篇为rsync官方推荐文章How Rsync Works的翻译,主要内容是Rsync术语说明和简单版的rsync工作原理.本篇没有通篇都进行翻译,前言直接跳过了,但为了文章的完整性,前言部分的原文还 ...

  8. ARM 寄存器 和 工作模式了解

    一. ARM 工作模式 1.   ARM7,ARM9,ARM11,处理器有 7 种工作模式:Cortex-A 多了一个监视模式(Monitor) 2.  用户模式:非特权模式,大部分任务执行在这种模式 ...

  9. esxi ntp服务器地址_NTP的工作原理以及工作模式

    NTP(Network Time Protocol,网络时间协议)是由RFC 1305定义的时间同步协议,用来在分布式时间服务器和客户端之间进行时间同步.NTP基于UDP报文进行传输,使用的UDP端口 ...

最新文章

  1. 什么是智能仓储?一文带你彻底搞懂!
  2. LNK2001连接错误
  3. 使用python moviepy提取视频中的音频,同时对音频数据进行数据可视化分析
  4. 【十大经典排序算法】java实现--冒泡排序(1)
  5. 滑动验证码、文件上传、form、AJAX.....
  6. 你选的那些创业方向 可能正在毁掉你!
  7. Visual Studio Code环境变量配置
  8. 数据库设计(四)概念数据模型
  9. html vue分页,Vue.js bootstrap前端实现分页和排序
  10. python 字典排序 lambda_Python使用lambda表达式对字典排序操作示例
  11. windows下IDEA全面红色,但是能编译,不能智能提示
  12. java监听鼠标接口实现_自定义Java鼠标监听器?
  13. 主机 700 主控制台重连
  14. 稀缺的“稳定”--业绩导向的基金筛选困局
  15. 《Web漏洞防护》读书笔记——第3章,其他注入防护
  16. bilibili开源弹幕库UML类图
  17. UE4有linux版本吗,ue4软件下载 rhinos软件 ue4
  18. Linux动态库依赖其它动态库的问题
  19. 使用plugman开发cordova 高德地图定位插件
  20. 用c语言实现cyk算法,从CYK算法(自然语言处理)生成解析树的步骤

热门文章

  1. CSS实现返回网页顶部
  2. 解读百度AutoDL:打破SOTA纪录的神经架构搜索是如何炼成的
  3. 利于前台开发的两大工具flex和vue
  4. URAL 1081 Binary Lexicographic Sequence
  5. 常用端口号及对应服务
  6. 启动 Eclipse 弹出“Failed to load the JNI shared library jvm.dll”错误的解决方法!在eclipse.ini中为eclipse指定jdk启动...
  7. 酱油瓶上有两个字很重要,一直都被忽略了,以后看准再买!
  8. zookeeper使用简介及注意事项
  9. SwipeListView 详解 实现微信,QQ等滑动删除效果
  10. Reapp - 下一代的 Hybrid App 开发框架