大家好,又见面了,我是你们的朋友全栈君。
解决:如何写一个shell脚本(脚本名称:xsync,又称xsync命令):实现多个电脑或者虚拟机之间的文件同步?
- 一·xsync命令与rsync命令之间关系介绍:
-
-
- (1)xsync命令来源于一个xsync的脚本,这个脚本不是Linux系统自带的,是程序员自己写的。
- (2)xsync脚本的底层,实质是调用Linux系统自带的rsync命令,来实现多个电脑之间的快速文件同步。
- (3)rsync命令可以直接使用:(rsync命令本质是通过“用户 电脑IP地址”形式,向其他服务器发送数据,并在其他服务器上创建相同目录与文件)
-
- 二·xsync命令作用:
-
-
- (1)使用xsync命令同步一个文件,会只将这个文件,同步到其他服务器的相同路径下面(没有的目录与文件会自动创建)。
- (2)使用xsync命令同步一个目录,会将这个目录下面的所有文件以及子目录,同步到其他服务器相同路径下面(没有的目录与文件会自动创建)。
- (3)多次同步某一个文件或者目录,第一次全部同步,第二次以及之后就只会同步里面发生更改的部分,未更改的部分不会重复同步
-
- 三·问题描述:
-
-
- (1)Linux系统中不存在xsync命令,但存在相似命令sync,(即,可以使用rsync命令,但不能使用xsync命令)
- (2)需要快速实现将一个文件同步到其他电脑上去,不是一个个复制(即,服务器集群中的快速同步命令)
-
- 四·问题原因:
-
-
- (1)linux系统中缺少一个xsync脚本
- (2)xsync脚本需要放到Linux系统的“/bin”目录下,这样才可以在任何目录下边调用xsync命令
-
- 五·解决方法:
-
-
- (1)Linux系统开启ssh服务:
- (2)创建一个xsync脚本文件:
- (3)将下面的xsync脚本模板,拷贝到xsync文件中去
- (4)给xsync脚本添加可以执行的权限
- (5)将写好的xsync脚本文件,拷贝到“/bin”目录下边。
- (6)任意位置调用xsync命令,向多台服务器同步文件
- (7)实际测试:如下图所示
-
- 六·综上所述:上面的方法还有一个缺陷,那就是需要输入每台服务器的密码。若不想输入各台服务器密码。需要配置ssh私钥公钥,可以参考以下链接
一·xsync命令与rsync命令之间关系介绍:
(1)xsync命令来源于一个xsync的脚本,这个脚本不是Linux系统自带的,是程序员自己写的。
(2)xsync脚本的底层,实质是调用Linux系统自带的rsync命令,来实现多个电脑之间的快速文件同步。
(3)rsync命令可以直接使用:(rsync命令本质是通过“用户 电脑IP地址”形式,向其他服务器发送数据,并在其他服务器上创建相同目录与文件)
代码语言:javascript复制rsync命令的用法:
rsync -rvl 要拷贝的文件路径/名称 目的用户@主机IP地址:目的路径
例如:
rsync -rvl /root/shell/test.sh root@192.168.111.130:/root/shell/
二·xsync命令作用:
(1)使用xsync命令同步一个文件,会只将这个文件,同步到其他服务器的相同路径下面(没有的目录与文件会自动创建)。
(2)使用xsync命令同步一个目录,会将这个目录下面的所有文件以及子目录,同步到其他服务器相同路径下面(没有的目录与文件会自动创建)。
(3)多次同步某一个文件或者目录,第一次全部同步,第二次以及之后就只会同步里面发生更改的部分,未更改的部分不会重复同步
三·问题描述:
(1)Linux系统中不存在xsync命令,但存在相似命令sync,(即,可以使用rsync命令,但不能使用xsync命令)
(2)需要快速实现将一个文件同步到其他电脑上去,不是一个个复制(即,服务器集群中的快速同步命令)
四·问题原因:
(1)linux系统中缺少一个xsync脚本
(2)xsync脚本需要放到Linux系统的“/bin”目录下,这样才可以在任何目录下边调用xsync命令
五·解决方法:
(1)Linux系统开启ssh服务:
代码语言:javascript复制CentOS8开启SSH服务步骤:
1、首先安装SSH服务(centos8默认自带)
yum install openssh-server
2、启动SSH服务
systemctl start sshd
3、查看SSH服务状态
systemctl status sshd
4、查看端口(22端口)
netstat -antp | grep sshd
5、加入开机启动
chkconfig sshd on
(2)创建一个xsync脚本文件:
代码语言:javascript复制vim xsync
(3)将下面的xsync脚本模板,拷贝到xsync文件中去
代码语言:javascript复制#!/bin/bash
#1 获取输入参数个数,如果没有参数,直接退出
pcount=$#
if((pcount==0))
then
echo no args
exit
fi
#2 获取文件名称
p1=$1
fname=`basename $p1`
echo fname=$fname
#3 获取上级目录到绝对路径
pdir=`cd -P $(dirname $p1); pwd`
echo pdir=$pdir
#4 获取当前用户名称
user=`whoami`
#5 循环
for((host=129; host<=130;host ))
do
echo ------------------- @192.168.111.$host --------------
rsync -rvl $pdir/$fname $user@192.168.111.$host:$pdir/
done
注意:第五步循环rsync命令IP地址那一段,要结合自己的实际情况,去更改才行;rsync命令使用方法,参考上文所述
(4)给xsync脚本添加可以执行的权限
代码语言:javascript复制chmod 755 xsync
(5)将写好的xsync脚本文件,拷贝到“/bin”目录下边。
代码语言:javascript复制mv xsync /bin
(6)任意位置调用xsync命令,向多台服务器同步文件
代码语言:javascript复制xsync命令用法:
(1)xsync 路径/文件名
(2)xsync 路径/目录
注意:路径可以是绝对路径,也可以是相对路径
(7)实际测试:如下图所示
1.在一台电脑上执行这个xsync命令
2.另外两台电脑上面的相同路径下面,就会出现相同的文件
六·综上所述:上面的方法还有一个缺陷,那就是需要输入每台服务器的密码。若不想输入各台服务器密码。需要配置ssh私钥公钥,可以参考以下链接
https://blog.csdn.net/weixin_48033662/article/details/121542487?
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/143712.html原文链接:https://javaforall.cn