什么是inotify呢,Inotify 是一个 Linux特性,它监控文件系统操作,比如读取、写入和创建。Inotify 反应灵敏,用法非常简单,并且比 cron 任务的繁忙轮询高效得多。学习如何将 inotify 集成到您的应用程序中,并发现一组可用来进一步自动化系统治理的命令行工具。
首先要检查系统是否支持inotify,
如果ls跳出这三个文件,就代表系统是支持的 。
基本安装,这里是源码安装。
如果提示gcc报错,要先安装gcc二进制编码工具。
最后make && make install 编译安装就好了
最后可以echo $? 如果显示是0,就证明没有报错,就表示安装成功了。
为了应用方便,咋们可以做一个软链接。
ln -s /usr/local/inotify-tools-3.14/ /user/local/inotify-tools
这里就可以演示怎么用了。
基本功能会用了。那么我们就开始写脚本,实现自动同步。
先提一嘴,为了把rsync里同步的目录分开,防止误删除。所以我们做同步的时候要两个目录分开。不然误删除数据会很危险。
然后我们就可以写脚本实现自动监测同步了。上脚本,并把脚本加入到rc.local的文件下,也就是开机启动。因为inotify wait开启了就是固定到前台模式,我们可以设置到后台运行。
#!/bin/bash inotify=/usr/local/inotify-tools/bin/inotifywait $inotify -mrq --format '%w%f' -e create,close_write,delete /backup |while read file do cd /backup && rsync -avz ./backup --delete /backup/ admin@192.168.10.222::common2 --password-file=/root/passwd done
关于inotify的优化。
======================================================================================================================================
现在看看SSH连接,就是Linux用SSH协议连接另一台Linux服务器。
ssh的端口,其实我们都是可修改的,默认22的端口可能存在被攻击的风险。
默认我们可以用用户名和密码来连接。但是如果我们用了公钥和私钥的话,就不需要再每次输入密码那么 麻烦了。
默认这样就连过去了。第一次连接他会生成一个秘钥。秘钥在
把这个生成的秘钥删除,下次还会提示,要打一个yes.
现在试试生成公钥和私钥。
上面也有提示存放路径
通过命令把公钥拷贝到目标服务器。
现在我们不用透过密码就可以直接连过去了。其实很多人写的跳板机也是这个原理哈。
如果是很多台需要这样认证,实现批量管理,我们就可以写shell脚本就可以了。
现在我们可以免密登录到多台Linux服务器了,那么我们就可以利用scp协议来单个传输文件了。
我们可以写一个批量脚本。
#!/bin/sh . /etc/init.d/functions if [ $# -ne 1 ] then echo "USAGE:$0 {FILENAME|DIRNAME}" exit 1 fi for n in 220 221 222 do scp -P22 -r $1 oldgirl@192.168.10.$n:~ &>/dev/null if [ $? -eq 0 ] then action "fenfa $1 ok " /bin/true else action "fenfa $1 ok" /bin/false fi done
这里面执行的时候需要加参数,不然会报错。也就是你要传输的文件名。
最后执行的返回结果,非常漂亮。
另外一个脚本就是批量执行命令。
#!/bin/sh if [ $# -ne 1 ] then echo "USAGE:$0 COMMAND" exit 1 fi for n in 220 221 222 do echo "主机(ip):192.168.10.$n" ssh -p22 oldgirl@192.168.10.$n $1 done
返回结果。
基本上就可以提现了。
因为rsync服务好像普通用户很多都传不了,所以要sudo.
echo 'oldgirl ALL=(ALL) NOPASSWD:/usr/bin/rsync' >>/etc/sudoers 追加rsync到 sudo
visudo -c 检查语法是否正确
grep oldgirl /etc/sudoers 查看是否存在
ssh -t oldgirl@192.168.10.222 sudo rsync host /etc/
然后想说说,saltstack 。
但是我居然没有安装成功。估计自己还得琢磨琢磨,后面再更新。
--------------------------------------------------------------------------------------------------------------------------
这里说说怎么批量分发秘钥,用到一个工具叫做expect。他可以实现批量分发秘钥,而且不用每次都输入密码。如果是1000台机器的管理,就可以用到这样的工具,很有优势。
因为ssh-copy-id这个工具是每次都要输入密码的,太麻烦了。
首先是安装expect
yum install expect -y
已安装成功。
新建一个后缀为exp的脚本,比如expect1.exp
#! /usr/bin/expect spawn ssh -p22 root@192.168.10.222 /sbin/ifconfig ens33 set timeout 60 expect "*password:" send "iso9001 " expect eof exit
就是这么简单的脚本,然后expect expect1.exp执行以下,就可以了。
那么有时候会出现yes提示,怎么忽略这种提示呢?
#! /usr/bin/expect spawn ssh -p22 root@192.168.10.222 /sbin/ifconfig ens33 set timeout 60 expect { -timeout 5 "yes/no" { exp_send "yes/r";exp_continue } " *password:" { exp_send "iso9001 "} timeout {puts "expect was timeout by oldboy.";return} } expect eof exit
这段就可以忽略yes 的提示了。