【Linux初学】rsync命令配置及实现文件同步(七)

一、要远程同步上传的文件至文件服务器,可以使用命令scp命令:

~~~~~~~~~~~~~start~~~~~~~~~~~~~~~~~~~
#!/bin/bash

if [ $# -ne 4 ] then   
echo "[ERROR] usage : ./send_dir ip password source_dir dst_dir"   
exit 1
fi

ip=$1
port="22"
passwd=$2
local_dir=$3
remote_dir=$4

/bin/rpm -qa|/bin/grep -q expect
if [ $? -ne 0 ];then   
    echo "please install expect"   
    exit
fi

expect -c "
spawn scp -r -P $port $local_dir root@$ip:$remote_dir
  expect {
    \"*assword\" {set timeout 300; send \"$passwd\r\";}
    \"yes/no\" {send \"yes\r\"; exp_continue;}
  }
  expect eof"
~~~~~~~~~~~~~end~~~~~~~~~~~~~~~~~~~

但scp命令只能全部覆盖已有文件。考虑使用rsync来代替scp,不覆盖全部目录。

二、rsync认证方式:

rsync有两种常用的认证方式,一种是rsync-daemon方式,另外一种是ssh方式。在平时使用过程,我们使用最多的是rsync-daemon方式。注意:在使用rsync时,服务器和客户端都必须安装rsync程序。

1、rsync-daemon认证

rsync在rsync-daemon认证方式下,默认监听TCP的873端口。

rsync-daemon认证方式是rsync的主要认证方式,这个也是我们经常使用的认证方式。并且也只有在此种模式下,rsync才可以把密码写入到一个文件中。

注意:rsync-daemon认证方式,需要服务器和客户端都安装rsync服务,并且只需要rsync服务器端启动rsync,同时配置rsync配置文件。客户端启动不启动rsync服务,都不影响同步的正常进行。

2、ssh认证

rsync在ssh认证方式下,可通过系统用户进行认证,即在rsync上通过ssh隧道进行传输,类似于scp工具。此时同步操作不在局限于rsync中定义的同步文件夹。

注意:ssh认证方式,不需要服务器和客户端配置rsync配置文件,只需要双方都安装rsync服务,并且也不需要双方启动rsync。

若rsync服务端SSH为标准端口,此时rsync使用方式如下:

# rsync -avz /root/test root@192.168.199.248:/root/

可以试一下,需要输入密码就可以同步。

三、安装Rsync:

安装rsync,我们可以分为两种方式:源码方式安装和RPM方式安装。

注意:rsync软件无论是服务器端还是客户端都是同一个软件包。

1、源码方式安装(步骤较多):

源码方式安装rsync,我们需要到其官网下载对应的安装包。rsync官网:rsync.samba.org。或者wget http://rsync.samba.org/ftp/rsync/rsync-3.1.1.tar.gz。

安装包下载完毕后,我们开始解压并安装。如下:
# tar -xf rsync-3.1.1.tar.gz
# ./configure
# make &&make install

还有更多配置信息,请参见 https://yq.aliyun.com/articles/43197。本文主要介绍第二种方式。

2、RPM方式安装(简单方便)

RPM方式安装rsync比较简单,直接使用yum进行安装即可。

#yum -y install rsync

查看rsync安装的位置:#rpm -ql rsync-3.0.6-12.el6.x86_64

可以看到RPM方式安装的rsync是把rsync安装到/usr/bin目录下的,并且还生成一个/etc/xinetd.d/rsync文件。查看安装时产生的帮助文档:more /usr/share/doc/rsync-3.0.6/README。在centos下rsync默认以xinetd方式运行rsync服务(开机启动)。所以RPM方式安装的话rsync,我们只需启动xinet服务即可。但是在启动xinetd服务之前,我们还需要配置文件/etc/xinetd.d/rsync,如下:

#vi /etc/xinetd.d/rsync

service rsync
{
disable = no
flags = IPv6
socket_type = stream
wait = no
user = root
server = /usr/bin/rsync
server_args = –daemon –config=/etc/rsyncd.conf
log_on_failure += USERID
}

配置完毕后,我们还需要安装xinetd软件包,否则无法启动xinetd服务。如下:

#yum -y install xinetd

#/etc/init.d/xinetd start

#chkconfig xinetd on

#netstat -tunlp |grep 873

四、配置rsync

rsync安装完毕后,我们就需要配置rsync。而对于rsync服务器来说,最重要和最复杂的就是它的配置了。rsync的配置分为服务器端和客户端:

1、服务端:

rsync服务器端需要两个配置文件:rsyncd.conf、rsyncd.password。

其中rsyncd.conf默认存放在/etc/目录下,同时它也是rsync服务器的主配置文件。该文件配置了rsync服务器的控制认证、访问、日志记录等等。而rsyncd.password主要用于存储rsync用户名和密码。

但是在rsync安装完毕后后是不会生成以上这两个配置文件的,需要我们手工进行创建。

rsyncd.conf配置文件内容如下:

#cat /etc/rsyncd.conf

uid = root

gid = root

user chroot = no

max connections = 200

timeout = 600

pid file = /var/run/rsyncd.pid

lock file = /var/run/rsyncd.lock

log file = /var/run/rsyncd.log

[backup]

path = /backup/

ignore errors

read only = no

list = no

hosts allow = 192.168.199.0/255.255.255.0

auth users = test

secrets file = /etc/rsyncd.password

[www]

path = /www/

ignore errors

read only = no

list = no

hosts allow = 192.168.199.0/255.255.255.0

auth users = apache

secrets file = /etc/rsyncd.password

创建密码文件:

#echo “test:test”>>/etc/rsyncd.password

#echo “apache:apache”>>/etc/rsyncd.password

#cat /etc/rsyncd.password

注意:该密码文件中的用户和密码可以进行自定义,同时该用户不一定要在服务器中的系统用户存在。

密码文件创建完毕后,要把其权限要设置为600,否则会在以后同步时提示验证出错。如下:

#chmod 600 /etc/rsyncd.password

一个rsync配置文件中可以包含多个认证模块,同时一个密码文件中也可以存放多个用户和其对应的密码。其中每一个认证模块可以对应不同的客户端。

以上两个文件创建完毕后,我们来创建其对应的目录并授权,如下:

#mkdir /{backup,www}

#chown root:root –R /backup/

#chown root:root –R /www/

2、客户端:

在客户端安装完毕rsync服务后,是不需要启动rsync服务的。我们只需要在客户端创建连接rsync服务器时,验证码用户所需要的密码文件即可。

该密码文件中的密码要与rsync服务器上的密码文件中的密码对应,并且也要与rsync服务器rsyncd.conf配置文件中的认证模块中的用户匹配。

当然该密码文件不创建也是可以的,不创建的话。我们在执行rsync操作时,就需要输入rsync的对应用户的密码。如下:

#echo “apache”>>/etc/rsyncd.password

#chmod 600 /etc/rsyncd.password

五、rsync的启动与关闭:

如果是RPM方式安装的rsync,如下:

#/etc/init.d/xinetd start

如果是通过yum方式进行安装的,我们可以通过关闭xinetd服务来达到关闭rsync服务的目的。如下:

#/etc/init.d/xinetd stop

六、rsync同步实例:

现在rsync服务器是192.168.199.247,rsync客户端为192.168.199.248。

首先在rsync服务器192.168.199.247的www模块下/www/目录下新建一个文件ilanni247,内容如下:

#vi /www/ilanni247

this is server 247 www.

然后在rsync客户端192.168.199.248的/root下新建一个www目录,并在此目录下创建一个文件ilanni248,内容如下:

mkdir www

vi /www/ilanni248

this is client 248 www.

下面就要把rsync客户端192.168.199.248文件推送到rsync服务器192.168.199.247上,我们需要使用到rsync帮助命令中的第三种命令,如下:

rsync [OPTION]… SRC [SRC]… [USER@]HOST::DEST

#rsync -avz /root/www/* apache@192.168.199.247::www

执行成功后显示:
sending incremental file list
ilanni248

sent 89 bytes  received 27 bytes  232.00 bytes/sec
total size is 23  speedup is 0.20

#rsync -avz /root/www/* apache@192.168.199.247::www –password-file=/etc/rsyncd.password

执行成功后也可以显示:
sending incremental file list
ilanni248

sent 89 bytes  received 27 bytes  232.00 bytes/sec
total size is 23  speedup is 0.20

终于可以同步成功了,但是没有跳过同名的文件,补加参数:

#rsync -avzut /root/www/* apache@192.168.199.247::www –password-file=/etc/rsyncd.password

OK!现在就加入到shell脚本中,准备用java去调用喽!

附录:

1、rsync几个重要参数

我们先在此大致介绍下经常使用的几个参数:-v,-a,-z

-v, --verbose 详细模式输出

-q, --quiet 精简输出模式

-c, --checksum 打开校验开关,强制对文件传输进行校验

-a, --archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD

-r, --recursive 对子目录以递归模式处理

-R, --relative 使用相对路径信息

-u, --update 仅仅进行更新,也就是跳过所有已经存在于DST,并且文件时间晚于要备份的文件。(不覆盖更新的文件)

-t, --times 保持文件时间信息

-z, --compress对备份的文件在传输时进行压缩处理。

--delete:删除那些DST中存在而在SRC中没有的文件。

2、rsync六种工作模式

1)rsync [OPTION]… SRC [SRC]… DEST

2)rsync [OPTION]… SRC [SRC]… [USER@]HOST:DEST

3)rsync [OPTION]… SRC [SRC]… [USER@]HOST::DEST

4)rsync [OPTION]… SRC [SRC]… rsync://[USER@]HOST[:PORT]/DEST

5)rsync [OPTION]… [USER@]HOST:SRC [DEST]

6)rsync [OPTION]… [USER@]HOST::SRC [DEST]

7)rsync [OPTION]… rsync://[USER@]HOST[:PORT]/SRC [DEST]

转载于:https://my.oschina.net/xiaohai945/blog/698528

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值