企业常用脚本

作业讲解

作业

根据菜单,安装对应的架构
输入数字和 lnmp  nginx




[root@m01 scripts]# cat install.sh 
#!/bin/bash

cat <<EOF
+---------+
| 1.lnmp  |
+---------+
| 2.lnmt  |
+---------+
| 3.lamp  |
+---------+
| 4.lamt  |
+---------+
| 5.nginx |
+---------+
| 6.apache|
+---------+
| 7.tomcat|
+---------+
| 8.php   |
+---------+
| 9.MySQL |
+---------+
EOF

check_yum(){
	service=$1
	service_count=`rpm -qa|grep -w $service|wc -l`
	if [ $service_count -gt 0 ];then
		echo "$service 已安装"
		return 1
	fi
}

check_source(){
	service=$1
	path=$2
	if [ -e $path ];then
		echo "$service 已安装"
		return 1
	fi
}

install_yum_pkg(){
	service=$1
	check_yum $service
	if [ $? -ne 1 ];then
		echo "正在安装 $service ..."
		yum install -y $service &>/dev/null
		check_yum $service
		if [ $? -ne 1 ];then
			echo "$service 安装失败..."
		fi
	fi
}

install_source_pkg(){
	service1=$1
	path=$2
	install_path=$3
	check_source $service1 $path
	if [ $? -ne 1 ];then
		if [ ! -d $install_path ];then
			mkdir -p $install_path
		fi
		echo "正在安装 $service1 依赖包..."
		install_yum_pkg openssl-devel
		install_yum_pkg pcre-devel

                echo "正在解压 $serivce1 ..."
                tar xf nginx-1.22.0.tar.gz

                echo "正编译安装 $service1 ..."
                cd nginx-1.22.0 && \
		./configure --prefix=$install_path/nginx-1.22.0 --with-http_ssl_module &>/dev/null && \
		make &>/dev/null && \
		make install &>/dev/null

		echo "正在创建 $service1 软连接..."
		ln -s $install_path/nginx-1.22.0 $install_path/nginx

		echo "正在添加环境变量..."
		echo 'PATH="/$installl_path/nginx/sbin:$PATH"' > /etc/profile.d/nginx.sh
		install_source_pkg $service1 $path
		if [ $? -ne 1 ];then
			echo "$service1 安装失败..."
		fi
	fi
}

read -p '请输入编号或服务名:' num

if [ $num ==  '6' -o $num == 'apache' ];then
	install_yum_pkg httpd
elif [ $num ==  '9' -o $num == 'mysql' ];then
	install_yum_pkg mariadb
elif [ $num ==  '5' -o $num == 'nginx' ];then
	install_source_pkg nginx /app/nginx /app
fi

案例

案例一:

日志分析案例

写一个shell脚本,防止DDOS攻击,先分析日志,监控某一个IP并发连接数,若短时内PV达到100阈值,则调用防火墙命令,封掉该IP。

可以分析nginx日志或者查看当前网络连接数 ss -ant 或者 netstat -ant

这里使用一个生产的日志 netstat.log

#!/bin/bash
awk -F '[ :]+' '/^tcp/{print $6}' netstat.log|grep -E '^[1-9]'|sort|uniq -c|sort -nr|while read line_ip;do
        exception_ip_count=`echo $line_ip|awk '{print $1}'`
        exception_ip=`echo $line_ip|awk '{print $2}'`

        if [ $exception_ip_count -gt 5 ];then
                firewall-cmd --add-source=$exception_ip --zone=drop &>/dev/null
                echo "$exception_ip 访问异常,添加到防火墙..."
        fi
done

案例二:

在指定目录下,通过随机10个小写字母,然后生成一个文件名为:随机字母_zls.txt的文件

生成随机内容的方法

## 方法一:
[root@zabbix01 ~]# openssl rand -base64 10
UUBtKUvUkEfcEw==

## 方法二:
[root@zabbix01 ~]# echo $((RANDOM))|md5sum

## 方法三:
[root@zabbix01 ~]# date +%N|md5sum
3fd3a5c57def5f89481e1961fceb13e8

## 方法四:
tr -cd 'a-zA-Z0-9'</dev/urandom|head -c 10


#!/bin/bash
num=`openssl rand -base64 10`
touch ${num}_zls.txt           

案例三:

# 提示一:变量子串方法
 
# 提示二:sed awk方法
 
# 提示三:命令拼接
 
# 提示四:rename
rename zls.txt cls.TXT /root/*.txt


#!/bin/bash

for name in `ls -1 /abc`;do
        #mv /abc/${name%.*}.yml /abc/${name%.*}.j2
        mv /abc/$name /abc/${name//j2/yml}
done

案例四:

创建100个系统用户,生成随机密码

并将用户名和密码保存到文件中

用户名:密码

#!/bin/bash

read -p "请输入需要创建的用户名: " user_name
user_list=`echo ${user_name}{1..100}`

for name in $user_list;do
        id $name &>/dev/null
        if [ $? -ne 0 ];then
                useradd $name &>/dev/null
                pass=`echo $RANDOM|md5sum|cut -c 1-10`
                echo $pass |passwd --stdin $name &>/dev/null
                echo $name:$pass >> /tmp/user.log
        else
                echo "$user_list 已存在"
                break
        fi
done

案例五:

现在我们要模拟黑客,来扫描,指定网段内存活的主机

for n in `seq 255`;do
  ping 10.0.0.$n
done



## 优化后的
#!/bin/bash

. /etc/init.d/functions
#for n in `seq 254`;do
#  ping -c 1 10.0.0.$n
#done

for n in `seq 254`;do
{
  ping -c1 -W1 -i1 10.0.0.$n &>/dev/null
  if [ $? -eq 0 ];then
    action 10.0.0.$n /bin/true
    for ;do
    {
        xxx
    } &
    usleep 300
    done
  fi
} &
usleep 300
done

#### 扫描存活的主机后,在存活的主机上,扫描都开了哪些端口?
#!/bin/bash

. /etc/init.d/functions

for n in `seq 3 254`;do
  ping -c1 -W1 -i1 10.0.0.$n &>/dev/null
  if [ $? -eq 0 ];then
    action 10.0.0.$n /bin/true
    for port in `seq 65535`;do
        {
        res=`echo ''|telnet 10.0.0.$n $port 2>/dev/null|grep 'Connected'|wc -l`
        if [ $res -ne 0 ];then
                action "10.0.0.$n 主机端口: $port" /bin/true
        fi
        } &
        usleep 500
    done
  fi
done
posted @ 2022-07-26 15:00  Gabydawei  阅读(60)  评论(0编辑  收藏  举报