Rsync是一款通过网络备份重要数据的工具/软件。它同样是一个在类Unix和Window系统上通过网络在系统间同步文件夹和文件的网络协议。Rsync可以复制或者显示目录并复制文件。Rsync默认监听TCP 873端口,通过远程shell如rsh和ssh复制文件。Rsync必须在远程和本地系统上都安装。

rsync的主要好处是:

  1. 速度:最初会在本地和远程之间拷贝所有内容。下次,只会传输发生改变的块或者字节。(增量同步)
  2. 安全:传输可以通过ssh协议加密数据。
  3. 低带宽:rsync可以在两端压缩和解压数据块。

rsync有两种工作方式:SSH和daemon。

说明:

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的衍生进程。

SSH方式是使用系统上的用户通过SSH进行同步操作。
daemon方式是rsync服务器会开一个873端口,等待客户端去连接,连接是进行验证,通过后进行同步。

下面讲解 ssh方式的使用:

语法:

rsysnc [options] source path destination path

常用options说明:

-v  可视化,显示同步过程
-r  递归
-z  启用压缩
-a  保留了所有人和所属组、时间戳、软链接、权限,并以递归模式运行
-d  仅传输文件而非递归


(-h) –help 打印这个帮组信息 (-h 仅在单独使用时与 –help 同意)

-a、--archive参数表示存档模式,保存所有的元数据,比如修改时间(modification time)、权限、所有者等,并且软链接也会同步过去。

--append参数指定文件接着上次中断的地方,继续传输。

--append-verify参数跟--append参数类似,但会对传输完成后的文件进行一次校验。如果校验失败,将重新发送整个文件。

-b、--backup参数指定在删除或更新目标目录已经存在的文件时,将该文件更名后进行备份,默认行为是删除。更名规则是添加由--suffix参数指定的文件后缀名,默认是~。

--backup-dir参数指定文件备份时存放的目录,比如--backup-dir=/path/to/backups。

--bwlimit参数指定带宽限制,默认单位是 KB/s,比如--bwlimit=100。

-c、--checksum参数改变rsync的校验方式。默认情况下,rsync 只检查文件的大小和最后修改日期是否发生变化,如果发生变化,就重新传输;使用这个参数以后,则通过判断文件内容的校验和,决定是否重新传输。

--delete 参数删除只存在于目标目录、不存在于源目标的文件,即保证目标目录是源目标的镜像。

-e 参数指定使用 SSH 协议传输数据。

--exclude参数指定排除不进行同步的文件,比如--exclude="*.iso"。

--exclude-from参数指定一个本地文件,里面是需要排除的文件模式,每个模式一行。

--existing、--ignore-non-existing参数表示不同步目标目录中不存在的文件和目录。

-h参数表示以人类可读的格式输出。

-h、--help参数返回帮助信息。

-i参数表示输出源目录与目标目录之间文件差异的详细情况。

--ignore-existing参数表示只要该文件在目标目录中已经存在,就跳过去,不再同步这些文件。

--include参数指定同步时要包括的文件,一般与--exclude结合使用。

--link-dest参数指定增量备份的基准目录。

-m参数指定不同步空目录。

--max-size参数设置传输的最大文件的大小限制,比如不超过200KB(--max-size='200k')。

--min-size参数设置传输的最小文件的大小限制,比如不小于10KB(--min-size=10k)。

-n参数或--dry-run参数模拟将要执行的操作,而并不真的执行。配合-v参数使用,可以看到哪些内容会被同步过去。

-P参数是--progress和--partial这两个参数的结合。

--partial参数允许恢复中断的传输。不使用该参数时,rsync会删除传输到一半被打断的文件;使用该参数后,传输到一半的文件也会同步到目标目录,下次同步时再恢复中断的传输。一般需要与--append或--append-verify配合使用。

--partial-dir参数指定将传输到一半的文件保存到一个临时目录,比如--partial-dir=.rsync-partial。一般需要与--append或--append-verify配合使用。

--progress参数表示显示进展。

-r参数表示递归,即包含子目录。

--remove-source-files参数表示传输成功后,删除发送方的文件。

--size-only参数表示只同步大小有变化的文件,不考虑文件修改时间的差异。

--suffix参数指定文件名备份时,对文件名添加的后缀,默认是~。

-u、--update参数表示同步时跳过目标目录中修改时间更新的文件,即不同步这些有更新的时间戳的文件。

-v参数表示输出细节。-vv表示输出更详细的信息,-vvv表示输出最详细的信息。

--version参数返回 rsync 的版本。

-z参数指定同步时压缩数据。

用法实例:

1、本地文件之间同步:


# 同步 /home/aloft/ 目录下的文件到 /backuphomedir目录

rsync -zvr /home/aloft/ /backuphomedir

2、同步本地到远程主机:

rsync -avzr /home/aloft/ azmath@192.168.1.4:/share/rsysnctest/

3、远程同步到本地:

rsync -avzr azmath@192.168.1.4:/share/rsysnctest/ /home/aloft/

4、找出文件间的不同

rsync -avzir /backuphomedir  /home/aloft/

5、列出远程机的文件列表。这类似于rsync传输,不过只要在命令中省略掉本地机信息即。

rsync -avzir  wml@192.168.1.1:/logs/

注意:跨系统间的同步数据需要输入用户密码

6、免输入密码传输文件

使用ssh 公私钥形式

rsync -e  "ssh -i ~/.ssh/id_rsa"  -avzr   /Users/wml/Desktop/h5/  public@114.5.3.95:/alidata/www/h5