一、rsync同步命令
scp可以实现服务器与服务器之间的数据拷贝【全量拷贝】
rsync可以实现服务器与服务器之间的数据拷贝【增量拷贝】具有速度快、避免复制相同内容和支持符号链接的优点。
rsync和scp区别:用rsync做文件的复制要比scp的速度快,rsync只对差异文件做更新,scp是把所有文件都复制。
本文使用的是rsync
安装rsync命令
代码语言:javascript复制sudo yum install -y rsync
二、复制需求确定
目前作者实例的机器有
代码语言:javascript复制192.168.0.191 hadoop01
192.168.0.192 hadoop02
192.168.0.193 hadoop03
需求:将hadoop01机器的软件,同步到hadoop02和hadoop03两台机器【提前配置免密登录】
三、脚本编写
脚本要实现的功能:
将当前机器的文件,同步到集群所有机器的相同路径下(可传递相对路径或绝对路径)
在hadoop01创建脚本:
代码语言:javascript复制[zp@hadoop01 ~]$ touch xsync
[zp@hadoop01 ~]$ vi xsync
在xsync中编辑以下脚本内容:
代码语言:javascript复制#!/bin/bash
#校验参数是否合法
#如果没有传递参数
if(($#==0))
then
echo 请输入要同步的文件~
exit;
fi
#拼接要同步的文件的绝对路径
#获取父路径,加入-P是防止软链接文件绝对路径读取错误
dirpath=$(cd `dirname $1`; pwd -P)
filename=`basename $1`
echo dirpath是$dirpath
echo filename是$filename
echo 要同步的文件路径是: $dirpath/$filename
#循环执行rsync同步文件到集群的每台机器
for i in hadoop02 hadoop03
do
echo ----------------$i------------------
rsync -rvlt $dirpath/$filename zp@$i:$dirpath
done
【需要注意的是倒数第二行,"zp@$i:dirpath",因为我在另外两台机器hadoop02、hadoop03用的账户名是zp,读者可以改成自己的用户名】
四、执行脚本
【将目录下的jdk复制到多台机器】
代码语言:javascript复制[zp@hadoop01 ~]$ bash xsync jdk1.8.0_141
执行脚本时候可传递相对路径jdk1.8.0_141 或 绝对路径/root/jdk1.8.0_141,脚本会自动判断
发现已经复制成功~!
本文来源itcats_cn,由javajgs_com转载发布,观点不代表Java架构师必看的立场,转载请标明来源出处