• 作者:老汪软件
  • 发表时间:2024-01-03 05:00
  • 浏览量:

一、scp( copy) 安全拷贝 1.定义

`scp`( Copy)是一个用于在不同计算机之间安全地复制文件和目录的命令行工具。它使用 SSH 协议进行连接和文件传输,提供了加密和身份验证机制,确保数据传输的安全性。

2.基本语法

scp [options] source destination

其中,`` 是要复制的源文件或目录的路径,`` 是目标文件或目录的路径。

`scp` 命令的常用选项包括:

- `-r`:递归复制目录及其内容。

- `-p`:保留源文件的权限。

- `-v`:显示详细的输出,可以查看复制过程中的进度和详细信息。

- `-i`:指定用于身份验证的私钥文件。

- `-P`:指定远程 SSH 服务器的端口号。

3.实例

① 将本地文件复制到远程服务器:

scp /path/to/local/file user@remote-server:/path/to/destination

上述命令将本地的 `/path/to/local/file` 文件复制到远程服务器的 `/path/to/` 目录中。

② 将远程文件复制到本地:

scp user@remote-server:/path/to/remote/file /path/to/destination

上述命令将远程服务器上的 `/path/to//file` 文件复制到本地的 `/path/to/` 目录中。

③ 递归复制目录及其内容:

scp -r /path/to/local/directory user@remote-server:/path/to/destination

上述命令将本地的 `/path/to/local/` 目录及其内容递归地复制到远程服务器的 `/path/to/` 目录中。

④ 从远程服务器复制文件到本地,并指定端口号:

scp -P 2222 user@remote-server:/path/to/remote/file /path/to/destination

上述命令将远程服务器上的 `/path/to//file` 文件复制到本地的 `/path/to/` 目录中,并指定远程服务器的端口号为 2222。

注:`scp` 命令需要在本地计算机和远程服务器之间建立 SSH 连接,并且需要提供适当的身份验证凭据(如用户名和密码或私钥文件)。

二、rsync远程同步工具 1.定义

`rsync` 是一个功能强大的文件复制和同步工具,可以在本地和远程之间进行文件同步。与 `scp` 不同,`rsync` 可以根据文件的差异进行增量复制,只传输发生变化的部分,从而提高效率和节省带宽。

2.基本语法

rsync [options] source destination

其中,`` 是要复制的源文件或目录的路径,`` 是目标文件或目录的路径。`` 和 `` 可以是本地路径,也可以是远程路径(使用 `rsync` 的远程协议)。

`rsync` 命令的常用选项包括:

- `-a`:以归档模式进行复制,保留文件的所有属性(权限、所有者等)。

- `-r`:递归复制目录及其内容。

- `-v`:显示详细的输出,可以查看复制过程中的进度和详细信息。

- `-z`:在传输过程中启用压缩,减少数据传输量。

- `-P`:显示进度信息,同时保留部分复制的文件。

- `-e`:指定远程 shell 的命令。

- `--`:在目标上删除源中不存在的文件。

3.实例

① 本地文件复制:

rsync /path/to/local/file /path/to/destination

上述命令将本地的 `/path/to/local/file` 文件复制到本地的 `/path/to/` 目录中。

② 本地目录复制:

rsync -a /path/to/local/directory /path/to/destination

上述命令将本地的 `/path/to/local/` 目录及其内容复制到本地的 `/path/to/` 目录中。

③ 从远程服务器复制文件到本地:

rsync -avz user@remote-server:/path/to/remote/file /path/to/destination

上述命令将远程服务器上的 `/path/to//file` 文件复制到本地的 `/path/to/` 目录中,并使用压缩进行传输。

④ 从本地复制文件到远程服务器:

rsync -avz /path/to/local/file user@remote-server:/path/to/destination

上述命令将本地的 `/path/to/local/file` 文件复制到远程服务器的 `/path/to/` 目录中,并使用压缩进行传输。

⑤远程同步两个目录:

rsync -avz user@remote-server:/path/to/source /path/to/destination

上述命令将远程服务器上的 `/path/to/` 目录及其内容与本地的 `/path/to/` 目录进行同步,并使用压缩进行传输。

注:`rsync` 命令需要在本地计算机和远程服务器之间建立连接,并且需要提供适当的身份验证凭据(如用户名和密码或私钥文件)。另外,确保在使用 `rsync` 命令时,您具有足够的权限来访问源文件和目标位置。

三、xsync集群分发脚本 1.需求

循环复制文件到所有节点的相同目录下

2.需求分析

(a)rsync命令原始拷贝:

rsync  -rvl     /opt/module      root@hadoop01:/opt/

(b)期望脚本:

xsync要同步的文件名称

(c)说明:在/home//bin这个目录下存放的脚本,用户可以在系统任何地方直接执行。

3.脚本实现

在/home/这个目录下创建bin目录,并在bin目录下xsync创建文件。

要找到您当前登录用户的目录,可以使用以下命令:

echo $HOME

该命令会打印出您当前登录用户的主目录路径。在Linux系统中,每个用户都有一个主目录,通常位于 `/home` 目录下,以用户名命名。

另外,您还可以使用以下命令来查看当前所在的目录:

pwd

该命令会显示当前工作目录的路径,即您当前所在的目录。

命令如下:

[@ ~]$ mkdir bin

[@ ~]$ cd bin

[@ bin]$ touch xsync

在文件中编写如下代码:

#!/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=02; host<04; host++)); do
        echo ------------------- hadoop$host --------------
        rsync -av $pdir/$fname $user@hadoop$host:$pdir
done

注:如果你的主机名和我一样是01,02,03,把代码文件路径中的adoop改成(由于脚本中的循环计数变量host在输出时被解释为整数而不是字符串,所以会被解析为和)。

接着修改脚本 xsync 具有执行权限:

chmod 777 xsync

调用脚本形式:

xsync 文件夹名称

如图所示,可正确运行!

集群分发脚本xysnc

集群分发脚本xysnc