目录
目录
1)用rsync做文件的复制要比scp的速度快,rsync只对差异文件做更新。
一、配置免密
想要实现上述的命令,首先必须要配置免密,这里我想要实现三台虚拟机互相传输文件,所以这里要实现互相免密
(一)修改hosts文件
vi /etc/hosts
输入3台虚拟机的ip地址在hosts文件里面
用scp拷贝到test02、test03虚拟机
scp /etc/hosts root@test02:/etc/hosts
scp /etc/hosts root@test03:/etc/hosts
在test02、test03进行验证
cat /etc/hosts
(二)设置免密
(1)test01的免密
- 用ssh-keygen-t rsa生成密钥
ssh-keygen -t rsa
拷贝密钥到test02
ssh-copy-id root@test02
拷贝密钥到test03
ssh-copy-id root@test03
拷贝密钥到test01
ssh-copy-id root@test01
-
测试免密
ssh test02
ssh test03
ssh test01
切换成功!
- 退出登录
exit
(2)test02的免密
生成密钥
ssh-keygen -t rsa
拷贝密钥到test03
ssh-copy-id root@test03
拷贝到test01
ssh-copy-id root@test01
拷贝到test02
ssh-copy-id root@test02
-
测试免密
(2)test03的免密
生成密钥
ssh-keygen -t rsa
拷贝密钥到test01
ssh-copy-id root@test01
拷贝密钥到test02
ssh-copy-id root@test02
拷贝密钥到test03
ssh-copy-id root@test03
-
测试免密
ssh test01
ssh test02
ssh test03
这里显示无论从哪一台虚拟机(test01、test02、test03)都可以进入 证明我们的免密是成功了的!
二、拷贝文件命令
(一)scp(secure copy)安全拷贝 命令
1.scp定义:
scp可以实现服务器与服务器之间的数据拷贝(from server1 to server2)
2.基本语法:
scp -r $pdir/$fname $user@hadoop$host:$pdir/$fname
命令 递归 要拷贝的文件路径/名称 目的用户@主机:目的路径/名称
3.案例实操:
a.在hadoop01上,将hadoop01中/opt/module目录下的软件拷贝到hadoop02上:
scp -r modules/ root@hadoop02:/opt/modules/
b.在hadoop01上,将hadoop01中/etc/hosts文件拷贝到test01上:
scp /etc/hosts root@test01:/etc/hosts
这个命令的问题就是如果很多文件,存在传输很慢的情况(而且不能暂停)
(二)rsync远程同步工具 命令
1.rsync定义:
rsync主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号链接的优点。
rsync和scp的区别
-
1)用rsync做文件的复制要比scp的速度快,rsync只对差异文件做更新。
-
2)scp是把所有文件都复制过去
2.基本语法:
rsync -av $pdir/$fname $user@hadoop$host:$pdir/$fname
命令 选项参数 要拷贝的文件路径/名称 目的用户@主机:目的路径/名称
3.选项参数说明:
选项 | 功能 |
---|---|
-a | 归档拷贝 |
-v | 显示复制过程 |
4.案列实操:
- 把test02机器上的/opt/softwares目录同步到test03服务器的root用户下的/opt/softwares
- 用下方的底栏 选择全部命令 输入安装命令
# 需要系统安装有rsync:
yum install -y rsync
rsync -av /opt/softwares/ root@test03:/opt/softwares
- 去test03中看softwares这个目录 成功~!!!
(三)xsync集群分发脚本命令
1.需求:
- 循环复制文件到所有节点的相同目录下
2.需求分析:
a)rsync命令原始拷贝:
rsync -av /opt/modules root@hadoop02:/opt/
b)期望脚本:
xsync 要同步的文件名称
c)说明:在/home/local/bin这个目录下存放的脚本,local用户可以在系统任何地方直接执行。
3.脚本实现
(1)在bin文件目录下创建xsync.sh脚本文件(让系统识别到,才能使用)(.sh是一个标识)
cd /bin
vi xsync.sh
(2)编写脚本文件
- 用于三台虚拟机ip地址相差不大的
#文件加入以下内容:
#!/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=7; host<=9;host++))
do
echo ------------------- @192.168.58.$host --------------
rsync -rvl $pdir/$fname $user@192.168.58.$host:$pdir/
done
- 这个用于相差很大的虚拟机ip地址(就用名称好了)
#!/bin/bash
#1 获取输入参数个数,如果没有参数,直接退出
pcount=$#
if [ $pcount -lt 1 ]
then
echo Not Enough Arguement!
exit;
fi
#2. 遍历集群所有机器
# 也可以采用:
# for host in hadoop{01..03};
for host in hadoop01 hadoop02 hadoop03
do
echo ==================== $host ====================
#3. 遍历所有目录,挨个发送
for file in $@
do
#4 判断文件是否存在
if [ -e $file ]
then
#5. 获取父目录
pdir=$(cd -P $(dirname $file); pwd)
echo pdir=$pdir
#6. 获取当前文件的名称
fname=$(basename $file)
echo fname=$fname
#7. 通过ssh执行命令:在$host主机上递归创建文件夹(如果存在该文件夹)
ssh $host "mkdir -p $pdir"
#8. 远程同步文件至$host主机的$USER用户的$pdir文件夹下
rsync -av $pdir/$fname $USER@$host:$pdir
else
echo $file does not exists!
fi
done
done
(3)保存退出
- 检查三台虚拟机是否下载rsync(统一输入rsync查看是否有版本号)
4.测试脚本
(1)在根目录下 (home),创建shell文件测试
(2)尝试一键传送
xsync shell
这里是什么问题呢?
5.区分/bin /usr/bin
小编把文件放于/bin文件目录下的,这里的文件有什么特征呢?
(1)从命令功能角度:
- /bin下存放一些普通的基本命令,如ls,chmod等,这些命令在Linux系统里的配置文件脚本里经常用到
(2)从用户权限的角度:
- /bin下的命令管理员和一般的用户都可以使用
(3)分别的作用:
-
/bin是系统的一些指令。主要放置一些系统的必备执行档,例如 cat、cp、chmod df、dmesg、gzip、kill、ls、mkdir、more、mount、rm、su、tar等。
-
/usr/bin 是你在后期安装的一些软件的运行脚本。主要放置一些应用的软体工具的必备执行档,例如 c++、g++、gcc、chdrv、diff、dig、du、eject、elm、free、gnome*、 gzip、htpasswd、kfm、ktop、last、less、locale、m4、make、man、mcopy、ncftp、 newaliases、nslookup passwd、quota、smb*、wget等
-
usr/local/bin:跟/usr/nbin差不多,放用户自己的可执行文件,但是可以在任何目录下执行
这里我们是xsync软件的脚本,应该放在/usr/local/bin下面才可以!
更改脚本文件的位置
mv xsync.sh /usr/local/bin
给脚本可执行权限
chmod 755 xsync.sh
在输入命令
xsync shell
尝试不要后缀名
mv xsync.sh xsync
再次输入命令 xsync shell
xsync shell
分别去test02 test03看看有没有shell目录
目录
1)用rsync做文件的复制要比scp的速度快,rsync只对差异文件做更新。
这样就轻轻松松的传输成功咯!!!~~