文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Linux文件分发脚本,只需一条命令将你的文件分发到各个服务器上

2024-12-02 15:40

关注

 

[[437674]]

 

遇到这种问题,我们通常的做法是使用scp或rsync命令把文件拷贝一个一个地拷贝到多台服务器上,这样做费事费力;大神的做法是使用ansible的playbook一下把事情干完,前提是你得会ansible;快捷的做法就是使用今天的脚本了。

效果演示

目前拥有4台机器,分别为client、node1、node2和node3,client与其它3台机器能够建立ssh链接。在client的/root/test目录下有a.txt和b.txt两个文件。

 

 

 

  1. [root@client test]# ls /root/test/ 
  2. a.txt  b.txt 
  3. [root@client test]#  

 

我把文件分发到node1、node2和node3的/root/test下,执行以下命令:

 

  1. # 在/root/test目录下执行, xrsync是我的脚本 
  2. [root@client test]# xrsync a.txt b.txt  

 

执行分发过程:

 

  1. [root@client test]# xrsync a.txt b.txt  
  2. ============ node1 ============ 
  3. sending incremental file list 
  4. a.txt 
  5.  
  6. sent 93 bytes  received 35 bytes  256.00 bytes/sec 
  7. total size is 2  speedup is 0.02 
  8. sending incremental file list 
  9. b.txt 
  10.  
  11. sent 93 bytes  received 35 bytes  85.33 bytes/sec 
  12. total size is 2  speedup is 0.02 
  13. ============ node2 ============ 
  14. sending incremental file list 
  15. a.txt 
  16.  
  17. sent 93 bytes  received 35 bytes  256.00 bytes/sec 
  18. total size is 2  speedup is 0.02 
  19. sending incremental file list 
  20. b.txt 
  21.  
  22. sent 93 bytes  received 35 bytes  256.00 bytes/sec 
  23. total size is 2  speedup is 0.02 
  24. ============ node3 ============ 
  25. sending incremental file list 
  26. a.txt 
  27.  
  28. sent 93 bytes  received 35 bytes  85.33 bytes/sec 
  29. total size is 2  speedup is 0.02 
  30. sending incremental file list 
  31. b.txt 
  32.  
  33. sent 93 bytes  received 35 bytes  256.00 bytes/sec 
  34. total size is 2  spee 

 

到node2上看一下,文件果然存在。同样地,node3和node4也同步过去了。

 

  1. # node2上查看 
  2. [root@node2 ~]# ls /root/test/ 
  3. a.txt  b.txt 
  4. [root@node2 ~]#  
  5.  
  6. # node3上查看 
  7. [root@node3 ~]# ls /root/test/ 
  8. a.txt  b.txt 
  9. [root@node3 ~]#  
  10.  
  11. # node4上查看 
  12. [root@node4 ~]# ls /root/test/ 
  13. a.txt  b.txt 
  14. [root@node4 ~]#  

 

脚本奉上

整个脚本的代码,只需要把其中的node1 node2 node3修改为自己环境下的主机名或ip地址即可。

 

  1. #!/bin/bash 
  2. # 判断参数是否足够 
  3. if [ $# -lt 1 ] 
  4. then 
  5.  echo Not Enounh Arguement! 
  6.  exit; 
  7. fi 
  8.  
  9. # 遍历所有的机器 
  10. for host in node1 node2 node3 
  11. do 
  12.  echo ============  $host ============ 
  13.  for file in $@ 
  14.  do 
  15.   # 判断文件是否存在 
  16.   if [ -e $file ] 
  17.   then 
  18.    # 获取父目录 
  19.    pdir=$(cd -P $(dirname $file); pwd) 
  20.  
  21.    # 获取当前目录的名称 
  22.    fname=$(basename $file) 
  23.    ssh $host "mkdir -p $pdir" 
  24.    rsync -av $pdir/$fname $host:$pdir 
  25.   else 
  26.    echo $file does not exists! 
  27.   fi 
  28.  done 
  29. done 

 

运行条件

为了更方便脚本的运行,建议使用如下优化。

修改/etc/hosts文件,加入IP地址与主机名的对应关系,这样方便我们使用主机名直接操作。比如我演示的机器配置。

 

  1. vim  /etc/hosts 
  2. # 加入配置,自己的机器对应修改 
  3. …… 
  4. 192.168.31.47 client 
  5. 192.168.31.48 node1 
  6. 192.168.31.50 node2 
  7. 192.168.31.51 node3 

 

客户机与目标机之间使用ssh密码验证登录,这样在传输文件时不需要二次验证。

 

  1. # 生成ssh私钥 
  2. ssh-keygen -f /root/.ssh/id_rsa -N ''  
  3. # 循环把公钥传递到服务器上,免密登录 
  4. for i in node1 node2 node3  
  5. do  
  6.   ssh-copy-id $i 
  7. done 
  8.  
  9. # 根据提示输入密码 

 

给脚本加可执行权限,并配置环境变量,使用全局可用。

 

  1. # 把文件存储为xrsync,加上x权限 
  2. [root@client shell]# chmod +x xrsync  
  3. [root@client shell]#  
  4.  
  5. # 配置环境变量 
  6. # 我把脚本放在/opt/shell下的,自己情况类比修改 
  7. [root@client shell]# vim /etc/profile.d/my_env.sh  
  8. export PATH=$PATH:/opt/shell 
  9.  
  10. # 配置生效,就可以在全局生效了 
  11. [root@client opt]# source /etc/profile 

 

来源:今日头条内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯