scp(secure copy)安全拷贝
1、scp定义:
scp可以实现服务器与服务器之间的数据拷贝。(from server1 to server2)
2、基本语法
命令 递归 要拷贝的文件路径/名称 目的用户@主机:目的路径/名称
scp -r $pdir/$fname $user@$host:$pdir/$fname
3、操作示例
# 将本地目录内容拷贝到远程机器上
sudo scp -r /opt/module/ root@192.168.56.60:/opt
# 将远程机器上目录内容拷贝到本地目录
sudo scp -r hadoop@192.168.56.63:/opt/software/1.txt /opt
# 将远程机器上目录内容拷贝到另一个远程机器上
scp -r hadoop@192.168.56.63:/opt/software/1.txt root@192.168.56.51:/opt
rsync 远程同步工具
rsync主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号链接的优点。
rsync和scp区别: 用rsync做文件的复制要比scp的速度快,rsync只对差异文件做更新。scp是把所有文件都复制过去。
1、基本语法
命令 递归 要拷贝的文件路径/名称 目的用户@主机:目的路径/名称
rsync -rvl $pdir/$fname $user@$host:$pdir/$fname
- -r 递归
- -v 显示复制过程
- -l 拷贝符号连接
rsync -rvl /opt/software/ root@192.168.56.60:/opt/softwar
xsync集群分发文件脚本
需求:循环复制文件到所有节点的相同目录下。
将脚本存放到 /usr/local/bin
目录下,可以在系统任何地方直接执行。
cd /usr/local/bin
sudo touch xsync
# 修改脚本具有执行权限
sudo chmod 777 xsync
脚本:(主机名需要视具体情况来设置)
#!/bin/bash
#xsync /home/user/bin
#获取输入参数的个数.没有参数直接退出
pcount=$#
if((pcount==0));then
echo no args;
exit;
fi
#获取文件名称
p1=$1
fname=`basename $p1`
echo fname=$fname
#获取上级目录到绝对路径
pdir=`cd -P $(dirname $p1); pwd`
echo pdir=$pdir
#获取当前用户名称
user=`whoami`
#循环远程机器分发文件,这里要修改远程机器的数量
for((host=2;host<4;host++));do
#echo $pdir/$fname $user@node$host:$pdir
#node是主机名前缀
echo ----------------testnote0$host------------------
rsync -rvl $pdir/$fname $user@node$host:$pdir
done
执行脚本:
按照上面的脚本,会将目录文件分发到主机名为node2、node3
机器上。
注意需要配置主机名对应IP的hosts
。
ubuntu@node1:~$ xsync etc
xcall集群分发命令脚本
需求:在所有主机上同时执行相同的命令。
将脚本存放到 /usr/local/bin
目录下,可以在系统任何地方直接执行。
cd /usr/local/bin
sudo touch xcall
# 修改脚本具有执行权限
sudo chmod 777 xcall
脚本:(主机名需要视具体情况来设置)
#!/bin/bash
pcount=$#
if((pcount==0));then
echo no args;
exit;
fi
#获取输入参数
cmd=$@
echo ${cmd}
#获取当前用户名称
user=`whoami`
#循环机器分发命令,从当前主机开始执行
for((host=1;host<=2;host++));do
#node是主机名前缀
echo ---------$user@cnode$host------
ssh $user@cnode$host $cmd
done
执行脚本:
按照上面的脚本,会将命令分发到主机名为node1、node2
机器上。
注意需要配置主机名对应IP的hosts
。
ubuntu@node1:~$ xcall ls
注意分发命令的时候默认从/bin
和/usr/bin
目录下找命令,如果需要分发额外的命令,就需要指定命令的全路径名。
比如:xcall /opt/jdk1.8.0_191/bin/java -version