一、rsync基本使用
P1 rsync概述
rsync同步操作
• 命令用法
– rsync [选项...] 源目录 目标目录
• 同步与复制的差异
– 复制:完全拷贝源到目标
– 同步:增量拷贝,只传输变化过的数据
• rsync操作选项
– -n:测试同步过程,不做实际修改
– --delete:删除目标文件夹内多余的文档
– -a:归档模式,相当于-rlptgoD
– -v:显示详细操作信息
– -z:传输过程中启用压缩/解压
• 本地同步
– rsync [选项...] 本地目录1 本地目录2 //同步整个文件夹
– rsync [选项...] 本地目录1/ 本地目录2 //只同步目录下的数据
虚拟机svr7:环境准备
[root@svr7 ~]# mkdir /nsd20
[root@svr7 ~]# mkdir /todir
[root@svr7 ~]# cp /etc/passwd /nsd20/
[root@svr7 ~]# cp /etc/shadow /nsd20/
[root@svr7 ~]# cp /etc/redhat-release /nsd20/r.txt
[root@svr7 ~]# ls /nsd20/
同步nsd20目录里面的数据到todir目录
[root@svr7 ~]# rsync -av /nsd20 /todir/ #会直接同步nsd20整个目录
[root@svr7 ~]#rm -rf /todir/*
[root@svr7 ~]# rsync -av /nsd20/ /todir/ #只同步目录下面的数据
只同步新增的group文件
[root@svr7 ~]# cp /etc/group /nsd20/
[root@svr7 ~]# rsync -av /nsd20/ /todir/
更改文件内容进行同步
[root@svr7 ~]# echo haha > /nsd20/r.txt
[root@svr7 ~]# rsync -av /nsd20/ /todir/
[root@svr7 ~]# cat /todir/r
使 源和目标 目录的数据保持一致
[root@svr7 ~]# rsync -av --delete /nsd20/ /todir/
[root@svr7 ~]# ls /nsd20/
[root@svr7 ~]# ls /todir/
在todir目录里面创建1.txt和2.txt,测试同步删除
[root@svr7 ~]# touch /todir/1.txt
[root@svr7 ~]# touch /todir/2.txt
[root@svr7 ~]# rsync -av --delete /nsd20/ /todir/
P2 rsync+SSH同步
• 远程同步
– rsync [选项...] 本地目录/ user@host:远程目录 //将本地文件同步到远程主机
– rsync [选项...] user@host:远程目录 本地目录/ //将远程文件同步到本地目录
同步svr7本地的/todir目录到px207主机的/opt下
[root@svr7 ~]# rsync -av --delete /todir/ root@192.168.4.207:/opt/
[root@svr7 ~]# ls /todir/ #查看
[root@svr7 ~]# ssh 192.168.4.207
[root@pc207 ~]# ls /opt/ #查看
此时同步发现并不需要密码,是因为之前做过免密登录,若要使用密码同步,需要以下操作
删除pc207主机的公钥
[root@pc207 ~]# rm -rf /root/.ssh/authorized_keys
[root@svr7 ~]# rsync -av --delete /todir/ root@192.168.4.207:/opt/ #此时同步,需要密码
root@192.168.4.207's password:
二、inotify实时同步
P1 同步的实时性
需要先实现无密码的验证
[root@svr7 ~]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
/root/.ssh/id_rsa already exists.
Overwrite (y/n)? y #选择y,继续生成
[root@svr7 ~]# ls /root/.ssh/
[root@svr7 ~]# ssh-copy-id root@192.168.4.207
……
root@192.168.4.207's password: #输入密码
[root@svr7 ~]# ssh 192.168.4.207 #测试,成功免密登录
实验准备:将tools.tar.gz传到/root目录
步骤1:安装make与gcc,开发工具
[root@svr7 ~]# yum -y install make gcc
步骤2:tar解包,释放源代码至指定目录
[root@svr7 ~]# rm -rf /opt/*
[root@svr7 ~]# tar -xf tools.tar.gz -C /opt/
[root@svr7 ~]# cd /opt/tools/
[root@svr7 tools]# tar -xf inotify-tools-3.13.tar.gz
安装软件
步骤3: ./configure 配置,指定安装目录/功能模块等选项
[root@svr7 tools]# cd inotify-tools-3.13/
[root@svr7 inotify-tools-3.13]# ./configure
步骤4:make 编译,生成可执行的二进制程序文件
[root@svr7 inotify-tools-3.13]# make
步骤5: make install 安装,将编译好的文件复制到安装目录
[root@svr7 inotify-tools-3.13]# make install
[root@svr7 inotify-tools-3.13]# ls /usr/local/bin/inotifywait #确认监控程序的生成
P2 inotifywait监控
• 基本用法
– inotifywait [选项] 目标文件夹
• 常用命令选项
– -m:持续监控 (捕获一个事件后不退出)
– -r:递归监控、包括子目录及文件
– -q:减少屏幕输出信息
– -e:指定监视的 modify、move、create、delete、attrib 等事件类别,不写-e全部监控
[root@svr7 inotify-tools-3.13]# inotifywait -rq /todir/ #监控
另外开一个终端,测试
[root@svr7 ~]# touch /todir/3.txt
回到之前的终端查看
[root@svr7 inotify-tools-3.13]# inotifywait -rq /todir/ #捕捉完事件之后直接退出
/todir/ CREATE 3.txt
加上-m选项,测试
[root@svr7 inotify-tools-3.13]# inotifywait -rqm /todir/
另外开一个终端,测试
[root@svr7 ~]# touch /todir/4.txt
回到之前的终端查看
[root@svr7 inotify-tools-3.13]# inotifywait -rqm /todir/ #持续监控,不退出
/todir/ CREATE 4.txt
/todir/ OPEN 4.txt 打开
/todir/ ATTRIB 4.txt 修改或显示文件的属性
/todir/ CLOSE_WRITE,CLOSE 4.txt 关闭写入 关闭
删除3.txt 和 4.txt
[root@svr7 ~]# rm -rf /todir/3.txt
[root@svr7 ~]# rm -rf /todir/4.txt
另一终端查看
[root@svr7 inotify-tools-3.13]# inotifywait -rqm /todir/
……
/todir/ DELETE 3.txt
/todir/ DELETE 4.txt
三、同步脚本书写
P1 inotify与rsync的结合
解决重复操作,循环
for循环:适合写有次数的循环
while循环:适合写不定次数的循环(死循环)
while 条件或命令
do
循环执行的代码
done
[root@svr7 ~]# vim /root/rsync.sh
#!/bin/bash
while inotifywait -rq /todir #不能加m选项,while需要命令执行成功且退出才可进行下一个操作
do
rsync --delete -avz /todir/ root@192.168.4.207:/op
t
done
[root@svr7 /]# chmod +x /root/rsync.sh
[root@svr7 /]# /root/rsync.sh
另开一个终端连接svr7,测试
[root@svr7 ~]# touch /todir/5.txt
[root@svr7 ~]# touch /todir/6.txt
另开一个终端连接pc207,查看/opt目录
[root@pc207 ~]# ls /opt/
回到之前运行脚本的终端,查看,会实时监控状态,没有退出
优化脚本,让其没有输出,静默模式
[root@svr7 ~]# vim /root/rsync.sh
#!/bin/bash
while inotifywait -rqq /todir
do
rsync --delete -a /todir/ root@192.168.4.207:/opt
done
[root@svr7 ~]# /root/rsync.sh
另外终端测试
[root@svr7 ~]# touch /todir/7.txt
放入后台运行
[root@svr7 ~]# /root/rsync.sh &
P2 实现从本地到远程web目录推送
实现从本地到远程的web目录推送,同步/var/www/html/目录
svr7主机编写脚本
[root@svr7 ~]# umount /var/www/html/dvd/
[root@svr7 ~]# vim /root/rsync.sh
#!/bin/bash
while inotifywait -rqq /var/www/html
do
rsync --delete -a /var/www/html/ root@192.168.4.207:/var/www/html
done
[root@svr7 ~]# /root/rsync.sh & #放入后台运行
pc207安装httpd
[root@pc207 ~]# yum -y install httpd
[root@pc207 ~]# systemctl restart httpd
svr7主机编写内容,进行测试
[root@svr7 ~]# echo 123 > /var/www/html/index.html
[root@svr7 ~]# cat /var/www/html/index.html
123
pc207主机查看结果
[root@pc207 ~]# ls /var/www/html/
dvd index.html ks.cfg
[root@pc207 ~]# cat /var/www/html/index.html
123