rsync命令介绍与使用案例

一、rsync命令简介

        Rsync命令是一个常用的用于文件传输和同步的工具,rsync 可以理解为 remote sync(远程同步),为了减少网络数据发送量,只发送源文件和目标文件之间的差异信息,从而实现数据的增量的复制。它不仅可以远程同步数据(类似于 scp 命令),还可以本地同步数据(类似于 cp 命令)。不同于 cp 或 scp 的一点是,使用 rsync 命令备份数据时,不会直接覆盖以前的数据(如果数据已经存在),而是先判断已经存在的数据和新数据的差异,只有数据不同时才会把不相同的部分覆盖。以下是一个简单的rsync命令示例:

        将本地文件复制到远程服务器:

                rsync -avz /本地路径/ 用户名@远程服务器IP地址:/远程路径/

注意:使用rsync进行远程文件传输,源端和目标端必须都装有rsync。

rsync优点:

    • 增量备份,支持socket(daemon),集中备份(支持推位,都是以客户端为参照物)。
    • 远程shell通道模式还可以加密(SSH)传输,socket(daemon)需要加密传输,可以利用服务或ipsecc服务。

rsync缺点:

    • 大量文件时候同步的时候,比对时间较长,有时候,rsync进程可能会停止。
    • 同步大文件,100G这样的大文件也会有问题,中断。未完整同步前,是隐藏文件,可以通过续传等参数实现传输。一次性远程拷贝可以用scp。

二、rsync三种传输模式

1.本地数据传输模式        

        rsync的本地数据传输模式,很类似于cp本地复制命令,可以实现文件目录移动备份等功能,多有不同的是rsync有增量复制的功能。

2.远程shell数据传输模式

        rsync远程shell数据传输模式一般是借助通道(如SSH)在两台服务器之间进行复制数据,这两台服务器之间是对等的,没有客户端与服务端之分,整个过程类似于SCP远程复制命令,所不同的是Rsync有增量复制的功能,但缺少scp的加密复制的功能。

3.守护进程传输模式

        守护进程传输模式是在客户端和服务端之间进行数据复制的,通常需要服务端部署守护进程服务,然后再客户端执行命令,实现数据的拉取和推送复制。守护进程的默认端口是837

#本地模式
   Local:  rsync [OPTION...] SRC... [DEST]
   #通过远程shell数据传输模式
   Access via remote shell:
     Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]    #从远端拉到本地
     Push: rsync [OPTION...] SRC... [USER@]HOST:DEST      #从本地推到远端
    #通过rsync守护进程模式
   Access via rsync daemon:
     Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]
           rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]
     Push: rsync [OPTION...] SRC... [USER@]HOST::DEST
           rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST
    #如果只有源文件参数,没有目的文件参数,则只是显示源文件列表
   Usages with just one SRC arg and no DEST arg will list the source files instead of copying.

三、rsync命令的使用

        The ':' usages connect via remote shell, while '::' & 'rsync://' usages connect to an rsync daemon, and require SRC or DEST to start with a module name.

        在 rsync 命令中,如果使用单个冒号(:),则默认使用 ssh 协议;反之,如果使用两个冒号(::)或‘rsync://’,则使用 rsync 协议。使用 rsync 在远程传输数据(备份数据)前,是需要进行登陆认证的,这个过程需要借助 ssh 协议或者 rsync 协议才能完成。

        ssh 协议和 rsync 协议的区别在于,rsync 协议在使用时需要额外配置,增加了工作量,但优势是更加安全;反之,ssh 协议使用方便,无需进行配置,但有泄漏服务器密码的风险。

OPTION 参数

-v 观察模式,输出更多资讯

-q 与 –v 相反,仅显示错误信息

-u 仅更新较新的文件

-n 假运行,不实际传输文件

-l, --links 软链接同步,指定的内容不一定有效

-L, --copy-links 将软链接转换为普通文件,实际内容放入文件中

-r 递归复制,针对目录

-p 复制时保持属性不变

-t 保存原有时间属性

-g 保存原有群组

-o 保存原有拥有人

-D 保存原有设备属性

-a 归档模式,相对于-rlptgoD,所以-a最常用

-z 在传输时压缩,节省带宽,加快传输速度

-P ,--progress显示传输进度

-e 使用协议通道,例如ssh,-e ssh

--delete 删除那些DST中SRC没有的文件

rsync命令介绍与使用案例_第1张图片

如上图所示:

        -a 是归档传输,-z 是压缩传输,-v 是显示传输详情

        另外源地址末尾不加'/'是传输整个目录到目标端,有'/'是指文件夹中的内容传输到目标端。

        rsync -av /src/foo /dest

        rsync -av /src/foo/ /dest/foo

        以上命令效果一样

rsync命令介绍与使用案例_第2张图片

如上图,软链接传输过来还是软链接文件,但内容不一定有效

rsync命令介绍与使用案例_第3张图片

        -P 显示传输进度

        远程shell传输模式,-e 可以指定ssh协议,并制定端口

四、使用守护进程模式

        1、首先选一台主机作为启动守护进程的主机,如A主机,在A主机上编辑配置文件;

        vim /etc/rsyncd.conf

# /etc/rsyncd: configuration file for rsync daemon mode

# See rsyncd.conf man page for more options.

# configuration example:

# uid = nobody
# gid = nobody
# use chroot = yes
# max connections = 4
# pid file = /var/run/rsyncd.pid
# exclude = lost+found/
# transfer logging = yes
# timeout = 900
# ignore nonreadable = yes
# dont compress   = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2

# [ftp]
#        path = /home/ftp
#        comment = ftp export area
uid=nobody
gid=nobody
max connections=4
use chroot = no
pid file=/var/run.rsyncd.pid
transfer logging=yes
#模块名
[app]
path=/home/rsync
comment=test
ignore errors
read only=yes
list=yes
# 认证授权
#auth users=app
#secrets file=/etc/rsyncd.secrets

        在A主机上启动守护进程:rsync --daemon

2、在B主机上传输文件,以下是从源端拉取到本地。两种方式,注意区别。

rsync命令介绍与使用案例_第4张图片

3、认证授权功能

        在配置文件中配置授权用户及密码文件路径。

        注:

                1、服务端的密码文件格式是账号:密码,比如:rsync:123456

                2、密码文件权限必须是600:chmod /etc/rsyncd.secrets

                3、使用什么用户启动守护进程,密码文件的属主也应该是该用户

        客户端指定密码文件

                rsync -azv [email protected]::app --password-file=/home/rsyncd.secrets

                1、客户端的密码文件权限必须为600,即:chmod 600 /home/rsyncd.secrets

                2、密码文件中直接输入密码,如:123456

你可能感兴趣的:(CentOS,linux,运维,服务器,centos)