oneShellScript
下载脚本
curl -O https://wangjian.run/files/script/shell_script/one_shell_script.sh
#常用命令
yum -y install vim telnet net-tools lrzsz wget zip unzip nc telnet dos2unix fontconfig urw-fonts yum-utils wget bash-completion lsof
grafana
下载脚本
curl -O https://wangjian.run/files/software/grafana/grafana_auto_install.sh
下载安装包
curl -O https://wangjian.run/files/software/grafana/grafana-enterprise_13.0.1_24542347077_linux_amd64.rpm
prometheus
下载脚本
curl -O https://wangjian.run/files/software/prometheus/prometheus_auto_install.sh
下载安装包
curl -O https://wangjian.run/files/software/prometheus/prometheus-3.11.3.linux-amd64.tar.gz
判断IP是否能ping通
版本1
#!/bin/bash
. /etc/init.d/functions
check_ip(){
ip=192.168.15.$1
ping -c1 -i1 -w1 $ip &>/dev/null
if [[ $? -eq 0 ]];then
action "$ip is true" /bin/true
else
action "$ip is false" /bin/false
fi
}
main(){
for n in {128..129}
do
check_ip $n
usleep 100
done
}
main
docker
一键在线安装最新版本的docker
yum -y install wget && wget https://wangjian.run/ShellScript/docker-install.sh --no-check-certificate && bash docker-install.sh
tomcat
一键安装tomcat
yum -y install wget && wget https://wangjian.run/ShellScript/tomjb.sh --no-check-certificate && bash tomjb.sh
nginx
#nginx重启脚本
vim nginx-restart.sh
ngmul=/opt/nginx-1.24.0/sbin/
id=$(pgrep nginx)
kill -9 $id > /dev/null
#启动nginx
cd $ngmul && ./nginx
#查看进程
ps -ef|grep nginx
镜像定时更新
速查表定时更新
#!/bin/bash
#速查表定时获取最新版本脚本
#查找容器
rongqiid=$(docker ps | awk 'NR!=1{print }' | awk '{print $1}')
#停止容器
docker stop "$rongqiid"
#查看所有容器
rongqiids=$(docker ps -qa)
docker rm "$rongqiids"
#查找镜像删除
JiangXiangId=$(docker images | awk 'NR!=1{print }' | awk '{print $3}')
docker rmi -f "$JiangXiangId"
#下载镜像并启动容器
docker pull wcjiang/reference
docker run --name reference --rm -d -p 9667:3000 wcjiang/reference:latest
60s 镜像定时更新
#!/bin/bash
# 出错即停、未定义变量报错、管道失败检测
set -euo pipefail
# 停止所有运行中的容器(忽略无容器的报错)
docker stop $(docker ps -q) 2>/dev/null || true
# 删除所有容器(包括已停止的)
docker rm $(docker ps -aq) 2>/dev/null || true
# 删除所有镜像(强制)
docker rmi -f $(docker images -q) 2>/dev/null || true
# 下载镜像并以指定配置启动新容器
docker run -d --restart always --name 60s -p 4399:4399 vikiboss/60s:latest
echo "容器 60s 已重新部署。"
其他脚本
vim mysql-install-centos7.9.sh
#!/bin/bash
echo -e "\e[32m##########mysql安装环境开始检测##########\e[0m"
#软件安装环境检查
mariadb=$(rpm -qa|grep -c mariadb)
mysql=$(rpm -qa|grep -c mysql) #写法2 grep mysql | wc -l
if [[ $mariadb != 0 ]];then
echo -e "\e[31m##########mysql安装环境监测不通过##########\e[0m"
echo "本系统有安装mariadb数据库,请先卸载,卸载方法如下实例所示:"
echo "可以使用rpm -qa|grep mariadb 查询"
echo "然后使用rpm -e mariadb-libs-5.5.68-1.el7.x86_64 --nodeps进行卸载"
exit 1
fi
if [[ $mysql != 0 ]];then
echo -e "\e[31m##########mysql安装环境监测不通过##########\e[0m"
echo "本系统有安装mysql数据库,请先卸载相关的安装"
exit 1
fi
#<<COMMENT
#用户和组检查
yonghuzu=$(more /etc/group | grep -c mysql) #shell规范中不建议用cat,cat是一个工具来欺骗"猫"的文件.将AINGLE文件作为程序的输入被认为是《禁止酷刑和其他残忍、不人道或有辱人格的待遇或处罚公约》
yonghu=$(more /etc/passwd |grep -c mysql)
if [[ $yonghuzu == 0 ]];then
groupadd mysql
echo -e "\e[32m##########本系统没有mysql组,脚本已自动完成mysql组创建##########\e[0m"
else
echo -e "\e[32m##########本系统有mysql组,无需脚本创建用户组##########\e[0m"
fi
if [[ $yonghu == 0 ]];then
useradd -g mysql mysql
echo -e "\e[32m##########本系统没有mysql用户,脚本已自动完成mysql用户创建,并添加到mysql组##########\e[0m"
else
echo -e "\e[32m##########本系统有mysql用户,无需脚本创建用户##########\e[0m"
fi
if [[ $mariadb == 0 && $mysql == 0 ]];then
echo -e "\e[32m##########恭喜你mysql安装环境监测通过,开始安装mysql##########\e[0m"
fi
#COMMENT
判断软件是否安装
Packs=("curl" "tar" "gzip" "netstat" "ss" "docker" ); for pack in "${Packs[@]}"; do command -v "$pack" >/dev/null 2>&1 || echo -e "\033[31mError: $pack 命令不存在\033[0m"; done
统计IP出现的次数
tail -n 1000 wangjian.run.log | awk '{print $1}' |sort | uniq -c | sort -nr | head -n 10
查看日志
sed -n '/09\/Jan\/2025:09:21:00/,/09\/Jan\/2025:09:21:59/'p wangjian.run.log
sed -n '/2019-07-30 20:00:00/,/2019-07-30 21:30:00/'p gateway.log
多列输出所在行
[root@wjcentos7 ~]# more wjip.txt
300 192.168.1.3
100 192.168.1.4
150 192.168.1.5
2 192.168.1.6
5 192.168.1.7
50 192.168.1.8
#!/bin/bash
file="wjip.txt"
#在这个脚本中,while read line循环会不断从文件(通过< "$file"重定向输入)中读取一行数据,将其存储到变量line中
#然后通过echo $line输出这一行数据,直到文件中的所有行都被读取完
if [ -f "$file" ];then
#count ip_address代表txt文件中的两个字段
while read count ip_address;do
#echo $ip_address
if [ $count -gt 200 ];then
firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="'$ip_address'" port port="22" protocol="tcp" reject' --permanent
firewall-cmd --reload
echo "$ip_address:禁用成功"
fi
done < "$file"
else
echo "文件不存在"
fi
自动禁用启用IP
统计出现大于200的IP地址
tail -n 1000 wangjian.run.log | awk '{print $1}' |sort | uniq -c | awk '$1 > 200' | sort -nr | awk '{print $2}'| tr -d ' '
禁用脚本
[root@wjcentos7 ~]# more DisableIp.sh
#!/bin/bash
file="wjip.txt"
#在这个脚本中,while read line循环会不断从文件(通过< "$file"重定向输入)中读取一行数据,将其存储到变量line中
#然后通过echo $line输出这一行数据,直到文件中的所有行都被读取完
if [ -f "$file" ];then
while read ip_address;do
firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="'$ip_address'" port port="22" protocol="tcp" reject' --permanent
firewall-cmd --reload
echo "$ip_address:禁用成功"
done < "$file"
else
echo "文件不存在"
fi
启用脚本
[root@wjcentos7 ~]# more EnableIp.sh
#!/bin/bash
file="wjip.txt"
#在这个脚本中,while read line循环会不断从文件(通过< "$file"重定向输入)中读取一行数据,将其存储到变量line中
#然后通过echo $line输出这一行数据,直到文件中的所有行都被读取完
if [ -f "$file" ];then
while read ip_address;do
firewall-cmd --zone=public --remove-rich-rule='rule family="ipv4" source address="'$ip_address'" port port="22" protocol="tcp" reject' --permanent
firewall-cmd --reload
echo "$ip_address:已取消禁用"
done < "$file"
else
echo "文件不存在"
fi
判断服务器是否可以联网
#判断是否可以联网,如果不能联网,就退出操作
if ping -c 1 baidu.com &>/dev/null ; then
echo -e "\e[32m连接互联网正常\e[0m"
else
echo -e "\e[5;31m连接互联网失败\e[0m"
exit
fi
判断当前用户是否是root用户
#判断当前用户是否是root用户,如果不是就退出操作
yonghuid=`id | awk '{print $1}' | awk -F "=" '{print $2}' | awk -F "(" '{print $1}'`
dangqianyonghu=`id | awk '{print $1}' | awk -F "(" '{print $2}' | awk -F ")" '{print $1}'`
if [[ 0 != $yonghuid ]];then
echo "你的当前的用户是【$dangqianyonghu】不是【root】用户,请切换用户后在操作"
break
else
echo "++++++++当前是root用户,开始执行操作++++++++"
fi
查询IP访问情况
#查看nginx访问IP数
grep -oE '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' /var/log/nginx/access.log |sort |uniq -c
#httpd
#查询IP的访问访问数量,提取前10个访问次数最多的IP
grep -oE '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' /etc/httpd/logs/ssl_access_log |sort |uniq -c | sort -rn | head -10
</code></pre>
查看系统账号情况
<pre class="wp-block-zibllblock-enlighter"><code class="gl" data-enlighter-language="shell" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">#/bin/bash#查询系统多少个账号zhanghao=`more /etc/passwd | wc -l`shellid=`more /etc/passwd | grep "/bin/bash" | wc -l`bunengid=`more /etc/passwd | grep -v "/bin/bash" | wc -l`wumima=`more /etc/passwd | grep "/bin/bash" | awk -F ":" '{print $1}'`mimabiao=`more /etc/shadow | awk -F ":" '{print $1}'`#echo $wumimac=`more /etc/shadow | grep "$wumima" | awk -F ":" '{print $2}' | grep "!!" | wc -l`echo "系统共有$zhanghao个账号;"echo "用于登录的账号有$shellid个;"echo "不能用于登录的账号有$bunengid个;"if [ $c = 0 ];then echo "可以登录但是没有设置密码的账号有$c个,此处没有账号安全风险;"else echo "可以登录但是没有设置密码的账号有$c个,此处存在安全风险;"fi</code></pre>
执行结果
[root@localhost ~]# sh id.sh 系统共有23个账号;用于登录的账号有3个;不能用于登录的账号有20个;可以登录但是没有设置密码的账号有1个,此处存在安全风险;</code></pre>
随机点名
该脚本,需要提前准备一个user.txt的文件
#文件中一行一个姓名
while :
do
line=`cat user.txt | wc -l`
num=$[RANDOM%line+1]
sed -n "${num}p" user.txt
sleep 0.2
clear
done
</code></pre>
主机是否存活
Network=$1
for Host in $(seq 120 130)
do
ping -c 1 $Network.$Host > /dev/null && result=0 || result=1
if [ "$result" == 0 ];then
echo -e "\033[32;1m$Network.$Host is up \033[0m"
echo "$Network.$Host" >> /tmp/up.txt
else
echo -e "\033[;31m$Network.$Host is down \033[0m"
echo "$Network.$Host" >> /tmp/down.txt
fi
done</code></pre>
执行结果
[root@localhost ~]# sh 1.sh 192.168.67
192.168.67.120 is down
192.168.67.121 is down
192.168.67.122 is down
192.168.67.123 is down
192.168.67.124 is down
192.168.67.125 is down
192.168.67.126 is down
192.168.67.127 is down
192.168.67.128 is down</code></pre>
每10秒循环判断用户是否登录系统
USERS="wj"
while true
do
echo "The Time is `date +%F-%T`"
sleep 10
NUM=`who|grep "$USERS"|wc -l`
if [[ $NUM -ge 1 ]];then
echo "The $USERS is login in system."
fi
done</code></pre>
速查表定时任务
[root@hcss-ecs-7aee ~]# more SuChaBiao.sh
#!/bin/bash
#速查表定时获取最新版本脚本
#查找容器
rongqiid=$(docker ps | awk 'NR!=1{print }' | awk '{print $1}')
#停止容器
docker stop "$rongqiid"
#查看所有容器
rongqiids=$(docker ps -qa)
docker rm "$rongqiids"
#查找镜像删除
JiangXiangId=$(docker images | awk 'NR!=1{print }' | awk '{print $3}')
docker rmi -f "$JiangXiangId"
#下载镜像并启动容器
docker pull wcjiang/reference
docker run --name reference --rm -d -p 9667:3000 wcjiang/reference:latest
服务器运行情况
#!/bin/bash
# 获取 CPU、内存、磁盘使用率
# 1. 获取 CPU 使用率(基于 /proc/stat 两次采样)
get_cpu_usage() {
# 第一次采样
cpu1=$(grep '^cpu ' /proc/stat)
sleep 0.5
# 第二次采样
cpu2=$(grep '^cpu ' /proc/stat)
# 将时间字段转为数组
c1=($cpu1)
c2=($cpu2)
# 计算总时间差(user + nice + system + idle + iowait + irq + softirq + steal)
total_diff=$(( (c2[1]+c2[2]+c2[3]+c2[4]+c2[5]+c2[6]+c2[7]) - (c1[1]+c1[2]+c1[3]+c1[4]+c1[5]+c1[6]+c1[7]) ))
# 空闲时间差(idle)
idle_diff=$(( c2[4] - c1[4] ))
# 使用率 = (总时间 - 空闲) / 总时间 * 100
usage=$(( 100 * (total_diff - idle_diff) / total_diff ))
echo "$usage"
}
cpu_usage=$(get_cpu_usage)
# 2. 获取内存使用率(基于 available 计算实际可用内存)
mem_total=$(free -m | awk '/Mem/ {print $2}')
mem_avail=$(free -m | awk '/Mem/ {print $7}')
mem_usage=$(( 100 - (mem_avail * 100 / mem_total) ))
# 3. 获取磁盘使用率(根分区 /)
disk_usage=$(df -h / | awk 'NR==2 {print $5}' | tr -d '%')
# 输出结果
echo "CPU Usage: ${cpu_usage}%"
echo "Memory Usage: ${mem_usage}%"
echo "Disk Usage: ${disk_usage}%"
swap
新增 swap 空间
fallocate -l 2G /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
echo '/swapfile swap swap defaults 0 0' >> /etc/fstab
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
