常用的Shell实用脚本
1.检测两台服务器指定目录下的文件的一致性
#!/bin/bash
#####################################
#检测两台服务器指定目录下的文件一致性
#####################################
#通过对比两台服务器上文件的md5值,达到检测一致性的目的
dir=/data/web
b_ip=192.168.88.10
#将指定目录下的文件全部遍历出来并作为md5sum命令的参数,进而得到所有文件的md5值,并写入到指定文件中
find $dir -type f|xargs md5sum > /tmp/md5_a.txt
ssh $b_ip "find $dir -type f|xargs md5sum > /tmp/md5_b.txt"
scp $b_ip:/tmp/md5_b.txt /tmp
#将文件名作为遍历对象进行一一比对
for f in `awk '{print 2}' /tmp/md5_a.txt`
do
#以a机器为标准,当b机器不存在遍历对象中的文件时直接输出不存在的结果
if grep -qw "$f" /tmp/md5_b.txt
then
md5_a=`grep -w "$f" /tmp/md5_a.txt|awk '{print 1}'`
md5_b=`grep -w "$f" /tmp/md5_b.txt|awk '{print 1}'`
#当文件存在时,如果md5值不一致则输出文件改变的结果
if [ $md5_a != $md5_b ]
then
echo "$f changed."
fi
else
echo "$f deleted."
fi
done
##diff -y a.txt b.txt
2.扫描主机端口状态
#!/bin/bash
HOST=$1
PORT="22 25 80 8080"
for PORT in $PORT; do
if echo &>/dev/null > /dev/tcp/$HOST/$PORT; then
echo "$PORT open"
else
echo "$PORT close"
fi
done
3.Expect实现SSH免交互执行命令
Expect是一个自动交互式应用程序的工具,如telnet,ftp,passwd等。
需先安装expect软件包。
方法1:EOF标准输出作为expect标准输入
#!/bin/bash
USER=root
PASS=123.com
IP=192.168.1.120
expect << EOF
set timeout 30
spawn ssh $USER@$IP
expect {
"(yes/no)" {send "yes\r"; exp_continue}
"password:" {send "$PASS\r"}
}
expect "$USER@*" {send "$1\r"}
expect "$USER@*" {send "exit\r"}
expect eof
EOF
4.监控服务进程,根据情况做相应处理
#!/bin/bash
check_service()
{
j=0
for i in `seq 1 5`
do
#重启Apache的命令
/usr/local/apache2/bin/apachectl restart 2> /var/log/httpderr.log
#判断服务是否重启成功
if [ $? -eq 0 ]
then
break
else
j=$[$j+1]
fi
#判断服务是否已尝试重启5次
if [ $j -eq 5 ]
then
exit
fi
done
}
#每隔10s检测一次
sleep 10
done
5.监控主机内存、磁盘、CUP使用情况
#! /bin/bash
printf "Memory\t\tDisk\t\tCPU\n"
end=$((SECONDS+30)) ##设置循环开始与结束时间“从当前时间开始至循环30秒后结束”
while [ $SECONDS -lt $end ]; do
MEMORY=$(free -m | awk 'NR==2{printf "%.2f%%\t\t", $3*100/$2 }')
DISK=$(df -h | awk '$NF=="/"{printf "%s\t\t", $5}')
CPU=$(top -bn1 | grep load | awk '{printf "%.2f%%\t\t\n", $(NF-2)}')
echo "$MEMORY$DISK$CPU"
sleep 5 ##每次循环暂停5秒
done
6.备份文件夹
#!/bin/bash
# 时间
DATE=$(date '+%Y-%m-%d_%H_%M_%S')
# 备份目录
BACKUPDIR="/home/engineer/Desktop/backups"
# 需要备份的目录
SORFILE="/home/engineer/mm"
# 目标文件名
DESFILE=mm-$(date '+%Y-%m-%d_%H_%M_%S').zip
[ ! -d $BACKUPDIR ] && mkdir -p $BACKUPDIR
cd $BACKUPDIR
echo "start backup $SORFILE ..."
sleep 3
#echo "$DESFILE"
tar -zcvf $DESFILE $SORFILE &>/dev/null
#zip -f .zip $DESFILE
#zip -r $DESFILE $SORFILE &>/dev/null
if [ "$?" == "0" ]
then
echo $(date +%Y-%m-%d)" zip sucess">>backup.log
else
echo $(date +%Y-%m-%d)" zip failed">>backup.log
exit 0
fi
# 删除3天前的备份
find $BACKUPDIR -type f -ctime +3 | xargs rm -rf
常用的Shell实用脚本的更多相关文章
- shell 实用脚本2
脚本功能 拷贝文件夹 及 子文件夹内文件 到 对应的 文件结构下 ,且拷贝前先进行备份 #!/bin/sh #create by lizr -- #脚本功能 #覆盖文件前先备份 cfsuffix=$ ...
- shell 实用脚本
功能 将当前目录下文件拷贝至另一目录下,且拷贝前先备份 #!/bin/sh #脚本功能 #覆盖文件前先备份 cfsuffix=$(date +%Y%m%d); #备份文件后缀 ]; then #输入参 ...
- 【转】常用的shell脚本
from:http://blog.sina.com.cn/s/blog_4152a9f501013r6c.html 常用的shell脚本 (2012-10-10 22:09:07) 转载▼ 标签: 杂 ...
- Linux Shell 高级编程技巧4----几个常用的shell脚本例子
4.几个常用的shell脚本例子 4.0.在写脚本(同样适用在编程的时候),最好写好完善的注释 4.1.kill_processes.sh(一个杀死进程的脚本) #!/bin/bash c ...
- [常用工具] shell脚本快速入门笔记
Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁.Shell 脚本(shell script),是一种为 shell 编写的脚本程序.业界所说的 shell 通常都是指 sh ...
- Linux下最常用的Shell命令的介绍
Shell基础: 你可以通过打开Linux的terminal(终端)来执行Shell命令.Shell的种类有很多种,例如CSH,Bourne Shell,Korn Shell.在现在的大多数Linux ...
- Lua 常用的shell命令
lua作为一种小巧的脚本语言,其函数等动作可以使用shell命令进行运行和调试,以下是几个常用的shell命令.基本格式是 lua [选项参数] [脚本参数] (1)%lua 程序名.lua ...
- 一篇关于Maven项目的jar包Shell启动脚本
使用Maven作为项目jar包依赖的管理,常常会遇到命令行启动,笔者也是哥菜鸟,在做微服务,以及服务器端开发的过程中,常常会遇到项目的启动需要使用main方法,笔者潜心的研究了很多博客,发现大多写的都 ...
- 大数据(4) - HDFS常用的shell操作
注意:这次使用的是第二部分安装的集群,不是高可用集群 为了方便,开发,必须写集群脚本,试想集群的机器是100台以上,而不是3台的情况.... 集群启动脚本 vim /home/admin/tools/ ...
- 4.Vim编辑器与Shell命令脚本
第4章 Vim编辑器与Shell命令脚本 章节简述: 本章首先讲解如何使用Vim编辑器来编写.修改文档,然后通过逐个配置主机名称.系统网卡以及Yum软件仓库参数文件等实验,帮助读者加深Vim编辑器中诸 ...
随机推荐
- Uncaught ReferenceError: Cannot access 'constantRouterMap' before initialization
这个问题可以在 main.js 中,调整 import store from '@/store 和 import router from @/router 的先后顺序进行解决 router 在 s ...
- 23年用vuex进行状态管理out了,都开始用pinia啦!
1 Vue2项目中,Vuex状态管理工具,几乎可以说是必不可少的了.而在Vu3中,尤大大推荐我们使用pinia(拍你啊)进行状态管理,咱得听话,用就完了. 使用之前我们来看一下,使用 pinia 给我 ...
- 【最新最新】mac pro 安装扩展imagick 最新总结
近期在mac上做相关开发,关于验证码图片如果没装imagick扩展会报 GD with FreeType or ImageMagick PHP extensions are required.等错误 ...
- Python实现XX短视频加密算法抓包分析及刷邀请
Python实现XX短视频加密算法抓包分析及刷邀请 出自:https://zhuanlan.zhihu.com/p/466929667?utm_id=0 Python彳余 一个会常常更新互联网,编程的 ...
- 回归分析 3.X 多元线性回归
多元线性回归模型 参数估计 模型表示 我们先将模型 \[y_{i}=\beta_{0}+\beta_{1} x_{i 1}+\cdots+\beta_{p} x_{i k}+\epsilon_{i}, ...
- Educational Codeforces Round 112 E、Boring Segments
原题网址 https://codeforces.com/contest/1555/problem/E 题目大意 有n个区间.每个区间是[1,m]的子区间.从a可以一步走到b的充要条件是存在区间同时覆盖 ...
- c++练习271题:水仙花数
*271题 原题传送门:http://oj.tfls.net/p/271 题解: #include<bits/stdc++.h>using namespace std; int cf(in ...
- 深入理解webpack的chunkId对线上缓存的思考(转载)
转载自https://juejin.cn/post/6844903924818771981#heading-6 作者:Kimm 想必经常使用基于webpack打包工具的框架的同学们,无论是使用Rea ...
- GitLab能通过ssh克隆无法通过http克隆,也无法进行流水线,提示port 80: Connection refused
问题记录:VM-Ubuntu20.04刚开始时使用NAT模式连接,后来改成桥接模式,改完之后原来使用docker启动的gitlab服务无法克隆,一直提示:fatal...没有远程库什么的,没解决后来删 ...
- .NET CORE-Auto整合至MVC中
在Program.cs中使用Autofac工厂去替代默认工厂: public static IHostBuilder CreateHostBuilder(string[] args) => Ho ...