Linux 之scp、rsync命令详解

本文详细介绍了SCP(Secure Copy)和RSYNC两种用于文件传输的工具。SCP用于服务器间的安全数据拷贝,而RSYNC则适用于备份和镜像,特别强调了其速度优势和智能更新特性。此外,还提供了实用的脚本示例,如xsync用于集群文件分发,xcall用于集群命令分发。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值