Linux基础(day76)

20.31 expect脚本同步文件

expect脚本同步文件

  • 在一台机器上把文件同步到多台机器上
  • 自动同步文件
#!/usr/bin/expect
set passwd "123456"
spawn rsync -av root@192.168.133.132:/tmp/12.txt /tmp/
expect {
"yes/no" { send "yes\r"}
"password:" { send "$passwd\r" }
}
expect eof  
  • expect eof :只有spawn执行的命令结果才会被expect捕捉到,因为spawn会启动一个进程,只有这个进程的相关信息才会被捕捉到,主要包括:标准输入的提示信息,eof和timeout。

20.32 expect脚本指定host和要同步的文件

expect脚本指定host和要同步的文件

  • set timeout 定义超时时间(单位为 秒) -1 为永远不超时
  • 指定host和要同步的文件
#!/usr/bin/expect
set passwd "123123a"
set host [lindex $argv 0]
set file [lindex $argv 1]
spawn rsync -av $file root@$host:$file
expect {
"yes/no" { send "yes\r"}
"password:" { send "$passwd\r" }
}
expect eof
  • 变量定义的文件地址,使用时,必须写绝对路径

20.33 构建文件分发系统

构建文件分发系统

  • 需求背景
    • 对于大公司而言,肯定时不时会有网站或者配置文件更新,而且使用的机器肯定也是好多台,少则几台,多则几十甚至上百台。所以,自动同步文件是至关重要的。
  • 实现思路
    • 首先要有一台模板机器,把要分发的文件准备好,然后只要使用expect脚本批量把需要同步的文件分发到目标机器即可。
  • 核心命令
    • rsync -av --files-from=list.txt / root@host:/
    • 使用rsync 的 --files参数,可以实现调用文件里面的列表,进行多个文件远程传输,进而实现文件分发
    • 文件分发系统的实现

1、rsync.expect 内容

#!/usr/bin/expect
set passwd "123123a"
set host [lindex $argv 0]
set file [lindex $argv 1]
spawn rsync -av --files-from=$file / root@$host:/   //这个地方定义了原目录和目标目录以跟目录开始
expect {
"yes/no" { send "yes\r"}
"password:" { send "$passwd\r" }
}
expect eof
  • 同步的路径,需要保证对方机器也有这个相同的路径,如果没有路径,需要使用 -R 创建路径
  1. 因为实现分发系统,肯定是因为需要分发的机器数量过大,所以,定义好了 文件 的 list 列表文件以后, 还需要配置 ip 的列表文件
  • 创建需要同步文件的列表文件
  • 创建需要同步IP地址的列表文件
  1. rsync.sh 内容

#!/bin/bash for ip in cat ip.list do echo $ip ./rsync.expect $ip list.txt done

  • 这个sh 的目的,就是遍历一下 ip列表文件中的 ip地址
  • 最重要的,expect脚本 必须加入执行权限
  • 文件不存在,会报错
  • 分发系统还有一个重要的关键是,确保同步的机器的密码一致,否则将不能实现同步;所以这就存在一个弊端,一旦脚本暴露,将会让别人知道如何登陆你机器;当然也有对应的解决办法,那就是使用密钥认证,这样的话,自然在命令行业省去“输入密码< password:" { send "$passwd\r" } >''”和“定义密码< set passwd "123123a" >”的命令了

20.34 批量远程执行命令

批量远程执行命令

  • exe.expect 内容
#!/usr/bin/expect
set host [lindex $argv 0]
set passwd "123456"
set cm [lindex $argv 1]
spawn ssh root@$host
expect {
"yes/no" { send "yes\r"}
"password:" { send "$passwd\r" }
}
expect "]*"
send "$cm\r"
expect "]*"
send "exit\r"
  • exe.sh 内容
#!/bin/bash
for ip in `cat ip.list`
do
    echo $ip
    ./exe.expect $ip "w;free -m;ls /tmp"
done

扩展:

shell多线程

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏行者常至

(Java)请求方式之GET、POST 浅析

·不同的请求方式不仅仅在数据传输时会有所不同,在表单提交及服务器端处理时也会采用不同的方式。而区分不同种类的请求方式也会使得浏览器采用不同的缓存方式处理后续请求...

1352
来自专栏北京马哥教育

LVM详解

petmaster出品 必是精品 一、概述 LVM全称为Logical Volume Manager,即逻辑卷管理器。LVM可以弹性的调整文件系统的容...

3029
来自专栏美团技术团队

【美团技术团队博客】Linux资源管理之cgroups简介

引子 cgroups 是Linux内核提供的一种可以限制单个进程或者多个进程所使用资源的机制,可以对 cpu,内存等资源实现精细化的控制,目前越来越火的轻量级...

4476
来自专栏技术博文

关于inodes占用100%的问题及解决方法

系统:Centos;一般的Linux系统也可以用这种方法。 情况描述:今天session文件写入时,写入不了,而且连接到服务器上开启服务都开不了,起始以为磁盘空...

3579
来自专栏Laoqi's Linux运维专列

Php-fpm相关配置

3565
来自专栏云计算教程系列

如何在CentOS 7上安装和配置scponly

scponly是匿名FTP的安全替代品。它使管理员能够设置具有受限远程文件访问权限且无法访问交互式shell的安全用户帐户。

1410
来自专栏拭心的安卓进阶之路

git 对比两个分支差异

比如我们有 2 个分支:master, dev,现在想查看这两个 branch 的区别,有以下几种方式: 1.查看 dev 有,而 master 中没有的: g...

4568
来自专栏蓝天

Shell关于Wget命令的使用技巧

wget 是一个命令行的下载工具。对于我们这些 Linux 用户来说,几乎每天都在使用它。下面为大家介绍几个有用的 wget 小技巧,可以让你更加高效而灵活的使...

762
来自专栏Java帮帮-微信公众号-技术文章全总结

Java中数据库连接池原理机制详解【面试+提高】

Java中数据库连接池原理机制详解 【面试+提高】 连接池的基本工作原理 1、基本概念及原理 由上面的分析可以看出,问题的根源就在于对数据库连接资源的低...

6368
来自专栏wym

Eclipse 安装 详细流程

程序--运行,在运行框中输入cmd,打开Dos页面,然后输入java -version命令,如果显示如下界面,则代表配置成功:

1701

扫码关注云+社区

领取腾讯云代金券