很简单的运维脚本

#!/bin/sh
. /etc/rc.d/init.d/functions
export LANG=zh_CN.UTF-8

#------------------------------------------全局变量区------------------
#更改挂载目录
kyh="/home/koukou"
k=$kyh
#------------------------------------------全局变量区------------------

#一级菜单
menu1()
{
curPath=$(dirname $(readlink -f "$0"))


        clear
msgbox "pam" "  ┌----------------------------------------┐";echo
msgbox "pam" "  |****   ********【Centos7】********* ****|";echo
msgbox "pam" "  |****    ****【xxxx】****  ****|";echo
msgbox "pam" "  |****        【 $curPath 】             ****|";echo
msgbox "pam" "  └----------------------------------------┘";echo
        cat < $backup_dir/mysql_quanliang_$dd.sql
echo "create $backup_dir/$database_name-$dd.dupm" >> $backup_dir/log-q.txt
echo "Backup Succeed Date:" $(date +"%Y-%m-%d %H:%M:%S")
}


mysqldanku()
{
read -p "请输入备份文件保存路径:" backup_dir
read -p "请输入mysql root用户的密码:" password
read -p "请输入单库备份将要备份的数据库实例名:" database_name
mysqlbin=/home/DB/mysql/bin/mysqldump
#设置备份保存路径
#backup_dir=/data/mysql_backup
#数据库用户名密码
username=root
#password=Kyh18700115585
#单库备份将要备份的数据库
#database_name=atsdb
#备份工具
tool=mysqldump
#日期
dd=`date +%Y-%m-%d-%H-%M-%S`
#如果文件夹不存在则创建
if [ ! -d $backup_dir ];
then     
    mkdir -p $backup_dir;
fi
chown mysql $backup_dir
chmod 777 $backup_dir
#简单写法 mysqldump -u root -p123456 users > /root/mysqlbackup/users-$filename.sql
$tool -u$username -p$password $database_name > $backup_dir/$database_name-$dd.sql
#写创建备份日志
echo "create $backup_dir/$database_name-$dd.dupm" >> $backup_dir/log-d.txt
echo "Backup Succeed Date:" $(date +"%Y-%m-%d %H:%M:%S")
}

mysqlyingshe()
{
read -p "请输入mysql的bin目录路径:" mysqlbin
msgbox "pam" "============开始映射到/usr/bin=====================";echo
ln -s $mysqlbin/mysqldump /usr/bin
msgbox "pam" "============已映射/usr/bin=====================";echo
}

#------------------------------------------------------------------------------------------------------------






wodishen()
{
y=1.25
yy=46
while [[ yy -gt 0 ]]; do
xx=-120
x=-1.14
	while [[ 0 -gt xx ]]; do
		cc=$(echo `awk -v a=${x} -v b=${y} 'BEGIN{printf "%.125f\n",a*a+b*b-1}'`)
		bb=$(echo `awk -v a=${cc} -v b=${y} -v c=${x} 'BEGIN{printf "%.125f\n",a*a*a-c*c*b*b*b}'`)
		ff=$(echo `awk -v a=${bb}  'BEGIN{printf "%.0f\n",a*10000000}'`)
		if [[ ff -le 0 ]]; then
			printf "\e[1;41m \e[0m"
		else
		    printf " "
		fi
	x=$(echo `awk -v a=${x} -v b=0.02 'BEGIN{printf "%.125f\n",a+b}'`)
	xx=$(echo `awk -v a=${xx} -v b=1 'BEGIN{printf "%.0f\n",a+b}'`)
	done
printf "\n"
y=$(echo `awk -v a=${y} -v b=0.05 'BEGIN{printf "%.10f\n",a-b}'`)
yy=$(echo `awk -v a=${yy} -v b=1 'BEGIN{printf "%.0f\n",a-b}'`)
done
}

systeninformation()
{
echo "##########################################################################"
echo "#                                                                        #"
echo "#                         health check script                            #"
echo "#                                                                        #"
echo "#警告:本脚本只是一个检查的操作,未对服务器做任何修改,管理员可以根据此报告 #"
echo "#进行相应的安全整改                                                      #"
echo "##########################################################################"
echo " "
#read -p "=====================Are You Ready,Please press enter=================="
echo " "
echo "##########################################################################"
echo "#                                                                        #"
echo "#                               主机安全检测                             #"
echo "#                                                                        #"
echo "##########################################################################"
echo " "
echo ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>系统基本信息<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<"
hostname=$(uname -n)
system=$(cat /etc/os-release | grep "^NAME" | awk -F\" '{print $2}')
version=$(cat /etc/redhat-release | awk '{print $4$5}')
kernel=$(uname -r)
platform=$(uname -p)
address=$(ip addr | grep inet | grep -v "inet6" | grep -v "127.0.0.1" | awk '{ print $2; }' | tr '\n' '\t' )
cpumodel=$(cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq)
cpu=$(cat /proc/cpuinfo | grep 'processor' | sort | uniq | wc -l)
machinemodel=$(dmidecode | grep "Product Name" | sed 's/^[ \t]*//g' | tr '\n' '\t' )
date=$(date)

echo "主机名:           $hostname"
echo "系统名称:         $system"
echo "系统版本:         $version"
echo "内核版本:         $kernel"
echo "系统类型:         $platform"
echo "本机IP地址:       $address"
echo "CPU型号:          $cpumodel"
echo "CPU核数:          $cpu"
echo "机器型号:         $machinemodel"
echo "系统时间:         $date"
echo " "
echo ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>资源使用情况<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<"
summemory=$(free -h |grep "Mem:" | awk '{print $2}')
freememory=$(free -h |grep "Mem:" | awk '{print $4}')
usagememory=$(free -h |grep "Mem:" | awk '{print $3}')
uptime=$(uptime | awk '{print $2" "$3" "$4" "$5}' | sed 's/,$//g')
loadavg=$(uptime | awk '{print $9" "$10" "$11" "$12" "$13}')

echo "总内存大小:           $summemory"
echo "已使用内存大小:       $usagememory"
echo "可使用内存大小:       $freememory"
echo "系统运行时间:         $uptime"
echo "系统负载:             $loadavg"
echo "=============================dividing line================================"
echo "内存状态:"
vmstat 2 5
echo "=============================dividing line================================"
echo "僵尸进程:"
ps -ef | grep zombie | grep -v grep
if [ $? == 1 ];then
    echo ">>>无僵尸进程"
else
    echo ">>>有僵尸进程------[需调整]"
fi
echo "=============================dividing line================================"
echo "耗CPU最多的进程:"
ps auxf |sort -nr -k 3 |head -5
echo "=============================dividing line================================"
echo "耗内存最多的进程:"
ps auxf |sort -nr -k 4 |head -5
echo "=============================dividing line================================"
echo  "环境变量:"
env
echo "=============================dividing line================================"
echo  "路由表:"
route -n
echo "=============================dividing line================================"
echo  "监听端口:"
netstat -tunlp
echo "=============================dividing line================================"
echo  "当前建立的连接:"
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
echo "=============================dividing line================================"
echo "开机启动的服务:"
systemctl list-unit-files | grep enabled
echo " "
echo ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>系统用户情况<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<"
echo  "活动用户:"
w | tail -n +2
echo "=============================dividing line================================"
echo  "系统所有用户:"
cut -d: -f1,2,3,4 /etc/passwd
echo "=============================dividing line================================"
echo  "系统所有组:"
cut -d: -f1,2,3 /etc/group
echo "=============================dividing line================================"
echo  "当前用户的计划任务:"
crontab -l
echo " "
echo ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>身份鉴别安全<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<"
grep -i "^password.*requisite.*pam_cracklib.so" /etc/pam.d/system-auth  > /dev/null
if [ $? == 0 ];then
    echo ">>>密码复杂度:已设置"
else
    grep -i "pam_pwquality\.so" /etc/pam.d/system-auth > /dev/null
    if [ $? == 0 ];then
	echo ">>>密码复杂度:已设置"
    else
	echo ">>>密码复杂度:未设置,请加固密码--------[需调整]"
    fi
fi
echo "=============================dividing line================================"
awk -F":" '{if($2!~/^!|^*/){print ">>>("$1")" " 是一个未被锁定的账户,请管理员检查是否是可疑账户--------[需调整]"}}' /etc/shadow
echo "=============================dividing line================================"
more /etc/login.defs | grep -E "PASS_MAX_DAYS" | grep -v "#" |awk -F' '  '{if($2!=90){print ">>>密码过期天数是"$2"天,请管理员改成90天------[需调整]"}}'
echo "=============================dividing line================================"
grep -i "^auth.*required.*pam_tally2.so.*$" /etc/pam.d/sshd  > /dev/null
if [ $? == 0 ];then
  echo ">>>登入失败处理:已开启"
else
  echo ">>>登入失败处理:未开启,请加固登入失败锁定功能----------[需调整]"
fi
echo " "
echo ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>访问控制安全<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<"
echo "系统中存在以下非系统默认用户:"
more /etc/passwd |awk -F ":" '{if($3>500){print ">>>/etc/passwd里面的"$1 "的UID为"$3",该账户非系统默认账户,请管理员确认是否为可疑账户--------[需调整]"}}'
echo "=============================dividing line================================"
echo "系统特权用户:"
awk -F: '$3==0 {print $1}' /etc/passwd
echo "=============================dividing line================================"
echo "系统中空口令账户:"
awk -F: '($2=="!!") {print $1"该账户为空口令账户,请管理员确认是否为新增账户,如果为新建账户,请配置密码-------[需调整]"}' /etc/shadow
echo " "
echo ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>安全审计<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<"
echo "正常情况下登录到本机30天内的所有用户的历史记录:"
last | head -n 30
echo "=============================dividing line================================"
echo "查看syslog日志审计服务是否开启:"
if service rsyslog status | egrep " active \(running";then
  echo ">>>经分析,syslog服务已开启"
else
  echo ">>>经分析,syslog服务未开启,建议通过service rsyslog start开启日志审计功能---------[需调整]"
fi
echo "=============================dividing line================================"
echo "查看syslog日志是否开启外发:"
if more /etc/rsyslog.conf | egrep "@...\.|@..\.|@.\.|\*.\* @...\.|\*\.\* @..\.|\*\.\* @.\.";then
  echo ">>>经分析,客户端syslog日志已开启外发--------[需调整]"
else
  echo ">>>经分析,客户端syslog日志未开启外发---------[无需调整]"
fi
echo "=============================dividing line================================"
echo "审计的要素和审计日志:"
more /etc/rsyslog.conf  | grep -v "^[$|#]" | grep -v "^$"
echo "=============================dividing line================================"
echo "系统中关键文件修改时间:"
ls -ltr /bin/ls /bin/login /etc/passwd  /bin/ps /etc/shadow|awk '{print ">>>文件名:"$9"  ""最后修改时间:"$6" "$7" "$8}'
echo "
###############################################################################################
#   ls文件:是存储ls命令的功能函数,被删除以后,就无法执行ls命令                                 #
#   login文件:login是控制用户登录的文件,一旦被篡改或删除,系统将无法切换用户或登陆用户         #
#   /etc/passwd是一个文件,主要是保存用户信息                                                  #
#   /bin/ps 进程查看命令功能支持文件,文件损坏或被更改后,无法正常使用ps命令                    #
#   /etc/shadow是/etc/passwd的影子文件,密码存放在该文件当中,并且只有root用户可读              #
###############################################################################################"
echo "=============================dividing line================================"
echo "检查重要日志文件是否存在:"
log_secure=/var/log/secure
log_messages=/var/log/messages
log_cron=/var/log/cron
log_boot=/var/log/boot.log
log_dmesg=/var/log/dmesg
if [ -e "$log_secure" ]; then
  echo  ">>>/var/log/secure日志文件存在"
else
  echo  ">>>/var/log/secure日志文件不存在------[需调整]"
fi
if [ -e "$log_messages" ]; then
  echo  ">>>/var/log/messages日志文件存在"
else
  echo  ">>>/var/log/messages日志文件不存在------[需调整]"
fi
if [ -e "$log_cron" ]; then
  echo  ">>>/var/log/cron日志文件存在"
else
  echo  ">>>/var/log/cron日志文件不存在--------[需调整]"
fi
if [ -e "$log_boot" ]; then
  echo  ">>>/var/log/boot.log日志文件存在"
else
  echo  ">>>/var/log/boot.log日志文件不存在--------[需调整]"
fi
if [ -e "$log_dmesg" ]; then
  echo  ">>>/var/log/dmesg日志文件存在"
else
  echo  ">>>/var/log/dmesg日志文件不存在--------[需调整]"
fi
echo " "
echo ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>剩余信息保护<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<"
echo "分区情况:"
echo "如果磁盘空间利用率过高,请及时调整---------[需调整]"
df -h
echo "=============================dividing line================================"
echo "可用块设备信息:"
lsblk
echo "=============================dividing line================================"
echo "文件系统信息:"
more /etc/fstab  | grep -v "^#" | grep -v "^$"
echo " "
echo ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>入侵防范安全<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<"
echo "系统入侵行为:"
more /var/log/secure |grep refused
if [ $? == 0 ];then
    echo "有入侵行为,请分析处理--------[需调整]"
else
    echo ">>>无入侵行为"
fi
echo "=============================dividing line================================"
echo "用户错误登入列表:"
lastb | head > /dev/null
if [ $? == 1 ];then
    echo ">>>无用户错误登入列表"
else
    echo ">>>用户错误登入--------[需调整]"
    lastb | head 
fi
echo "=============================dividing line================================"
echo "ssh暴力登入信息:"
more /var/log/secure | grep  "Failed" > /dev/null
if [ $? == 1 ];then
    echo ">>>无ssh暴力登入信息"
else
    more /var/log/secure|awk '/Failed/{print $(NF-3)}'|sort|uniq -c|awk '{print ">>>登入失败的IP和尝试次数: "$2"="$1"次---------[需调整]";}'
fi
echo " "
echo ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>恶意代码防范<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<"
echo "检查是否安装病毒软件:"
crontab -l | grep clamscan.sh > /dev/null
if [ $? == 0 ];then
  echo ">>>已安装ClamAV杀毒软件"
  crontab -l | grep freshclam.sh > /dev/null
  if [ $? == 0 ];then
    echo ">>>已部署定时更新病毒库"
  fi
else
  echo ">>>未安装ClamAV杀毒软件,请部署杀毒软件加固主机防护--------[无需调整]"
fi
echo " "
echo ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>资源控制安全<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<"
echo "查看是否开启了xinetd服务:"
if ps -elf |grep xinet |grep -v "grep xinet";then
  echo ">>>xinetd服务正在运行,请检查是否可以把xinetd服务关闭--------[无需调整]"
else
  echo ">>>xinetd服务未开启-------[无需调整]"
fi
echo "=============================dividing line================================"
echo  "查看是否开启了ssh服务:"
if service sshd status | grep -E "listening on|active \(running\)"; then
  echo ">>>SSH服务已开启"
else
  echo ">>>SSH服务未开启--------[需调整]"
fi
echo "=============================dividing line================================"
echo "查看是否开启了Telnet-Server服务:"
if more /etc/xinetd.d/telnetd 2>&1|grep -E "disable=no"; then
  echo ">>>Telnet-Server服务已开启"
else
  echo ">>>Telnet-Server服务未开启--------[无需调整]"
fi
echo "=============================dividing line================================"
ps axu | grep iptables | grep -v grep || ps axu | grep firewalld | grep -v grep 
if [ $? == 0 ];then
  echo ">>>防火墙已启用"
iptables -nvL --line-numbers
else
  echo ">>>防火墙未启用--------[需调整]"
fi
echo "=============================dividing line================================"
echo  "查看系统SSH远程访问设置策略(host.deny拒绝列表):"
if more /etc/hosts.deny | grep -E "sshd"; then
  echo ">>>远程访问策略已设置--------[需调整]"
else
  echo ">>>远程访问策略未设置--------[无需调整]"
fi
echo "=============================dividing line================================"
echo "查看系统SSH远程访问设置策略(hosts.allow允许列表):"
if more /etc/hosts.allow | grep -E "sshd"; then
  echo ">>>远程访问策略已设置--------[需调整]"
else
  echo ">>>远程访问策略未设置--------[无需调整]"
fi
echo "=============================dividing line================================"
echo "当hosts.allow和host.deny相冲突时,以hosts.allow设置为准"
echo "=============================dividing line================================"
grep -i "TMOUT" /etc/profile /etc/bashrc
if [ $? == 0 ];then
    echo ">>>已设置登入超时限制"
else
    echo ">>>未设置登入超时限制,请设置,设置方法:在/etc/profile或者/etc/bashrc里面添加参数TMOUT=600 --------[需调整]"
fi
echo ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>end<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<"
}

jichu()
{

# 获取系统cpu、内存、磁盘信息脚本
# 查看逻辑CPU的个数
CpuCount=`cat /proc/cpuinfo| grep "processor"| wc -l`
 
# 总内存大小GB
MemTotal=`awk '($1 == "MemTotal:"){printf "%.2f\n",$2/1024/1024}' /proc/meminfo`
 
# 磁盘大小GB,排除tmpfs类型
DiskTotal=`df -k | grep -v "tmpfs" | egrep -A 1 "mapper|sd" | awk 'NF>1{print $(NF-4)}' | awk -v used=0 '{used+=$1}END{printf "%.2f\n",used/1048576}'`
 
DiskUsed=`df -k | grep -v "tmpfs" | egrep -A 1 "mapper|sd" | awk 'NF>1{print $(NF-3)}' | awk -v used=0 '{used+=$1}END{printf "%.2f\n",used/1048576}'`
 
DiskAvail=`df -k | grep -v "tmpfs" | egrep -A 1 "mapper|sd" | awk 'NF>1{print $(NF-2)}' | awk -v used=0 '{used+=$1}END{printf "%.2f\n",used/1048576}'`
 
# 主机名
HostName=`hostname`
 
mkdir -p $k/lingshi/
cat > $k/lingshi/test.txt << EOF
{"CpuCount": "$CpuCount", "MemTotal": "$MemTotal", "DiskTotal": "$DiskTotal", "DiskUsed": "$DiskUsed", "DiskAvail": "$DiskAvail", "HostName": "$HostName"}
EOF
cat $k/lingshi/test.txt
rm -rf $k/lingshi/test.txt
}

xiaobai()
{
ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}'|tr -d "addr:"
}

pythoninstall()
{
# 更新yum
yum -y update
# 一些必要的安装
yum -y install epel-release openssl-devel bzip2-devel libffi-devel xz-devel wget net-tools
# 创建python安装目录和临时文件夹
mkdir /usr/local/python3.9.10 /tempfolder
# 进入临时文件夹
cd /tempfolder
# 下载指定版本的Python包
wget http://npm.taobao.org/mirrors/python/3.9.10/Python-3.9.10.tgz
# 解压下载的Python包
tar xvf Python-3.9.10.tgz

# 进入解压后的Python文件夹
cd Python-3.9.10
# 配置编辑安装Python
./configure --with-ssl --prefix=/usr/local/python3.9.10 && make && make install
# 创建python和pip的软连接到/usr/bin/目录下
ln -s /usr/local/python3.9.10/bin/python3.9 /usr/bin/python3
ln -s /usr/local/python3.9.10/bin/pip3.9 /usr/bin/pip3
# 验证版本号是否正确
python3 -V
pip3 -V


 
配置pip下载镜像源:

# 创建文件夹
mkdir /root/.pip
# 创建编辑配置文件
cd /root/.pip/pip.conf

# 在pip.conf中写入以下3行内容:
aommand1='[global]'
sed -i "1 a $aommand1" pip.conf
aommand2='trusted-host = mirrors.aliyun.com'
sed -i "2 a $aommand2" pip.conf
aommand3='index-url = https://mirrors.aliyun.com/pypi/simple'
sed -i "3 a $aommand3" pip.conf


# 更新pip
pip3 install --upgrade pip
# 删除临时文件夹
rm -rf tempfolder



# 删除默认的
rm -rf /usr/bin/python
# 设置新的软连接
ln -s /usr/bin/python3 /usr/bin/python
}


#------------------------------------------------firewall相关------------------------------------------------------------------------
duankoufangxin()
{
read -p "请输入要放行的端口:" ip_s
echo "正在放行..."
firewall-cmd --zone=public --add-port=$ip_s/tcp --permanent
firewall-cmd --reload
echo "提示:端口: $ip_s 已放行"
msgbox "pam" "========================提示:端口: $ip_s 已放行========================";echo
firewall-cmd --zone=public --list-port
}

duankoujiance()
{
read -p "请输入要移除放行的端口:" ip_s
echo "正在移除放行..."
firewall-cmd --zone=public --remove-port=$ip_s/tcp --permanent
firewall-cmd --reload
echo "提示:端口: $ip_s 已放行"
msgbox "pam" "========================提示:端口: $ip_s 已移除放行========================";echo
firewall-cmd --zone=public --list-port
}

duankouchaxun()
{
msgbox "pam" "========================当前防火墙已开放列表为:========================";echo
firewall-cmd --zone=public --list-port
}

firewalldzhuangtai()
{
sudo systemctl status firewalld
msgbox "pam" "========================active (running)即为正常运行========================";echo
}
firewalldqidong()
{
sudo systemctl start firewalld
msgbox "pam" "========================firewalld已开启========================";echo
}
firewalldguanbi()
{
sudo systemctl stop firewalld
msgbox "pam" "========================firewalld已关闭========================";echo
}

gaojiefangxing()
{
read -p "请输入指定端口:" ip_saa
read -p "请输入指定ip:" ip_sab
echo "正在放行规则..."
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="$ip_sab" port protocol="tcp" port="$ip_saa" accept"
firewall-cmd --reload
echo "提示:端口: $ip_sab 已放行"
}

gaojieyichu()
{
read -p "请输入指定端口:" ip_sac
read -p "请输入指定ip:" ip_sad
echo "正在移除规则..."
firewall-cmd --permanent --remove-rich-rule="rule family="ipv4" source address="$ip_sad" port protocol="tcp" port="$ip_sac" accept"
firewall-cmd --reload
echo "提示:规则: $ip_sad 已移除"
}

gaojiechakan()
{
msgbox "pam" "========================已有规则如下========================";echo
firewall-cmd --zone=public --list-rich-rules
}

#------------------------------------------------firewall相关------------------------------------------------------------------------


#1.修改字符集
localeset()
{
    echo "========================修改字符集========================="
    cat > /etc/locale.conf </etc/security/limits.conf
    ulimit -SHn 65535
    echo "#cat /etc/security/limits.conf"
    cat /etc/security/limits.conf
    echo "#ulimit -Sn ; ulimit -Hn"
    ulimit -Sn ; ulimit -Hn
    action "完成修改文件描述符" /bin/true
    echo "==========================================================="
    sleep 2
}

#6.安装常用工具及修改yum源
yumset()
{
    echo "=================安装常用工具及修改yum源==================="
    yum install wget -y &> /dev/null
    if [ $? -eq 0 ];then
        cd /etc/yum.repos.d/
        \cp CentOS-Base.repo CentOS-Base.repo.$(date +%F)
        ping -c 1 mirrors.aliyun.com &> /dev/null
        if [ $? -eq 0 ];then
            wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo &> /dev/null
            yum clean all &> /dev/null
            yum makecache &> /dev/null
        else
            echo "无法连接网络"
                exit $?
        fi
    else
        echo "wget安装失败"
        exit $?
    fi
    yum -y install lsof lrzsz vim lrzsz tree nmap nc sysstat &> /dev/null
    action "完成安装常用工具及修改yum源" /bin/true
    echo "==========================================================="
    sleep 2
}

#7. 优化系统内核
kernelset()
{
    echo "======================优化系统内核========================="
    chk_nf=`cat /etc/sysctl.conf | grep conntrack |wc -l`
    if [ $chk_nf -eq 0 ];then
        cat >>/etc/sysctl.conf< /dev/null
    if [ $? -eq 0 ];then
        /usr/sbin/ntpdate time.windows.com
        echo "*/5 * * * * /usr/sbin/ntpdate ntp1.aliyun.com &>/dev/null" >> /var/spool/cron/root
    else
        echo "ntpdate安装失败"
        exit $?
    fi
    action "完成设置时间同步" /bin/true
    echo "==========================================================="
    sleep 2
}

#11. history优化
historyset()
{
    echo "========================history优化========================"
    chk_his=`cat /etc/profile | grep HISTTIMEFORMAT |wc -l`
    if [ $chk_his -eq 0 ];then
        cat >> /etc/profile <<'EOF'
#设置history格式
export HISTTIMEFORMAT="[%Y-%m-%d %H:%M:%S] [`whoami`] [`who am i|awk '{print $NF}'|sed -r 's#[()]##g'`]: "
#记录shell执行的每一条命令
export PROMPT_COMMAND='\
if [ -z "$OLD_PWD" ];then
    export OLD_PWD=$PWD;
fi;
if [ ! -z "$LAST_CMD" ] && [ "$(history 1)" != "$LAST_CMD" ]; then
    logger -t `whoami`_shell_dir "[$OLD_PWD]$(history 1)";
fi;
export LAST_CMD="$(history 1)";
export OLD_PWD=$PWD;'
EOF
        source /etc/profile
    else
        echo "优化项已存在。"
    fi
    action "完成history优化" /bin/true
    echo "==========================================================="
    sleep 2
}


##jdk安装
installjdk()
{
ipath="/usr/local"
installpath=$(cd `dirname $0`; pwd)
jdkpath=""
msgbox "pam" "========================jdk安装========================";echo
msgbox "pam" "========================判断是否已经部署jdk========================";echo
j=`whereis java`
java=$(echo ${j} | grep "jdk")
if [[ "$java" != "" ]]
then
    msgbox "alert" "jdk已经安装了!!!";echo
else
    msgbox "pam" "未检测jdk安装,继续进行安装";echo
    msgbox "pam" "解压jdk中";echo
tar -zxvf $k/jdk-*-linux-x64.tar.gz >/dev/null 2>&1
cd jdk* && jdkname=`pwd | awk -F '/' '{print $NF}'`
    msgbox "alert" "获取jdk版本: ${jdkname}";echo
    msgbox "alert" "。。******。。";echo
cd ${installpath}
    msgbox "alert" "获取当前目录:${installpath}";echo

if [ -d "${ipath}/${jdkname}" ];then
    msgbox "alert" "检测到${ipath}${jdkname}目录已存在!!!!";echo
    msgbox "alert" "停止并退出jdk安装";echo
jdkpath=${ipath}/${jdkname}

#测试
#jdkpath=${ipath}/${jdkname}
#echo ${jdkpath}

break
else
    msgbox "pam" "未检测到${ipath}${jdkname}目录";echo
    msgbox "pam" "开始进行转移${jdkname}文件到${ipath}安装目录";echo
mv ${jdkname} ${ipath}
    msgbox "pam" "jdk安装完毕!!!!";echo
    msgbox "pam" "jdk安装目录:【  ${ipath}/${jdkname}   】";echo
jdkpath=${ipath}/${jdkname}

#测试
#传递jdk安装路径参数
#jdkpath=${ipath}/${jdkname}
#echo ${jdkpath}

    action "完成jdk程序安装" /bin/true
fi




    msgbox "pam" "开始进行java环境变量安装检测!!!";echo
 
    chk_nf=`cat /etc/profile | grep JAVA_HOME |wc -l`
    if [ $chk_nf -eq 0 ];then
    msgbox "pam" "JAVA_HOME路径【${jdkpath}】注入中......";echo
    sleep 1
    echo "#设置JAVA_HOME变量" >> /etc/profile
    echo "export JAVA_HOME=${jdkpath}" >> /etc/profile
    echo 'export JRE_HOME=${JAVA_HOME}/jre'>> /etc/profile
    echo 'export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib' >> /etc/profile
    echo 'export PATH=${JAVA_HOME}/bin:$PATH' >> /etc/profile

    msgbox "pam" "JAVA_HOME路径【${jdkpath}】注入完毕......";echo
    else
    msgbox "alert" "jdk环境变量已存在,停止设置!!";echo
fi

fi
     action "完成java环境变量配置" /bin/true
     action "完成JAVA安装" /bin/true
    
    msgbox "pam" "============手工运行【 source /etc/profile】生效环境变量=====================";echo

    sleep 2

}


ftpinstall()
{
#ftp用户名
zz="ftp"
z=$zz
useradd $z
passwd $z
mkdir $k
mkdir $k/ftp
chown $z $k/ftp
chmod 777 -R $k/ftp
setenforce 0
yum install vsftpd -y
yum install ftp -y
cd /etc/vsftpd
cp vsftpd.conf vsftpd.conf.bak
cd /etc/vsftpd
sed -i "s/anonymous_enable=YES/anonymous_enable=NO/g" /etc/vsftpd/vsftpd.conf
sed -i "s/#chroot_local_user=YES/chroot_local_user=YES/g" /etc/vsftpd/vsftpd.conf
echo "local_root=$k/ftp" >> /etc/vsftpd/vsftpd.conf
echo "pasv_enable=YES" >> /etc/vsftpd/vsftpd.conf
echo "pasv_min_port=30000" >> /etc/vsftpd/vsftpd.conf
echo "pasv_max_port=30100" >> /etc/vsftpd/vsftpd.conf
echo "reverse_lookup_enable=NO" >> /etc/vsftpd/vsftpd.conf
echo "allow_writeable_chroot=YES" >> /etc/vsftpd/vsftpd.conf
str1='auth       required	pam_shells.so'
str2="#auth       required	pam_shells.so"
command=s@$str1@$str2@
sed -i "$command" /etc/pam.d/vsftpd
str12='auth       required	pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed'
str22="#auth       required	pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed"
command=s@$str12@$str22@
sed -i "$command" /etc/pam.d/vsftpd
firewall-cmd --zone=public --add-port=30000-30100/tcp --permanent
firewall-cmd --zone=public --add-port=21/tcp --permanent
firewall-cmd --reload
systemctl start vsftpd
systemctl status vsftpd.service
}


function bash_os() {
    # "系统基础信息"

    #内核信息
    kernel=$(uname -r)
    #操作系统版本
    release=$(cat /etc/redhat-release)
    #主机名称
    hostname=$HOSTNAME
    #当前时间及运行时间
    dateload=$(uptime | awk -F "," '{print $1}')
    # 当前登录用户数
    users=$(uptime | awk -F "," '{print $2}')

    echo -e "\n\033[32m##############   系统基础信息 #######\033[0m\n"
    echo -e "\033[32m------------------------------------\033[0m"
    echo -e "|内核信息:\033[31m        $kernel           \033[0m"
    echo -e "\033[32m------------------------------------\033[0m"
    echo -e "|操作系统版本:\033[31m   $release        \033[0m"
    echo -e "\033[32m------------------------------------\033[0m"
    echo -e "|当前时间及运行时间:\033[31m   $dateload        \033[0m"
    echo -e "\033[32m------------------------------------\033[0m"
    echo -e "|当前登录用户数:\033[31m   $users        \033[0m"
    echo -e "\033[32m------------------------------------\033[0m"
}


#####展示函数====================================
function msgbox()
{
	case $1 in
		text ) color="\e[34;1m"
		;;
		alert ) color="\e[31;1m"
		;;
		result ) color="\e[33;1m"
		;;
		jump ) color="\e[35;1m"
		;;
		pam ) color="\e[32;1m"
		;;
		normal ) color="\e[37;1m"
	esac
	echo -e "${color}${2}\e[0m\c"
}


function memory() {

    # 内存相关数据统计`free -m`
    #总内存容量
    mem_total=$(free -m | awk '/Mem/{printf "%.2fG", $2/1024}')
    # 用户程序占用内存量
    mem_user=$(free -m | awk '/Mem/{printf "%.2fG", $3/1024}')
    #  多进程共享占用内存量
    mem_shared=$(free -m | awk '/Mem/{printf "%.2fG", $5/1024}')
    #缓存占用内存量
    mem_buff_cache=$(free -m | awk '/Mem/{printf "%.fMB",  $(NF-1)}')
    #空闲内存容量
    mem_free=$(free -m | awk '/Mem/{printf "%.2fG", $4/1024 }')
    # 剩余可用内存容量
    mem_available=$(free -m | awk 'NR==2{printf "%.2fG",$NF/1024}')
    # 可用内存使用占比
    mem_percentage=$(free -m | awk '/Mem/{printf "%.2f", $NF/$2*100}')
    #总的交换分区容量
    swap_total=$(free -m | awk '/Swap/{printf "%.2fG", $2/1024}')
    #用户使用的交换分区容量
    swap_user=$(free -m | awk '/Swap/{printf "%.2fG",$3/1024}')
    #剩余交换分区容量
    swap_free=$(free -m | awk '/Swap/{printf "%.2fG",$4/1024}')
    #可用交换分区占比
    swap_percentage=$(free -m | awk '/Swap/{printf "%.2f",$4/$2*100}')
    #占用内存资源最多的10个进程列表
    top_proc_mem=$(ps --no-headers -eo rss,args | sort -k1 -n -r | head -10)

    echo -e "\n\033[32m################## 内存 ############\033[0m\n"
    echo -e "\033[32m------------------------------------\033[0m"
    echo -e "|总内存容量:\033[31m        $mem_total           \033[0m"
    echo -e "\033[32m------------------------------------\033[0m"
    echo -e "|用户程序内存量:\033[31m   $mem_user        \033[0m"
    echo -e "\033[32m------------------------------------\033[0m"
    echo -e "|多进程共享内存量:\033[31m $mem_shared     \033[0m"
    echo -e "\033[32m------------------------------------\033[0m"
    echo -e "|缓存占用内存量:\033[31m   $mem_buff_cache    \033[0m"
    echo -e "\033[32m------------------------------------\033[0m"
    echo -e "|空闲内存容量:\033[31m     $mem_free           \033[0m"
    echo -e "\033[32m------------------------------------\033[0m"
    echo -e "|剩余可用内存容量:\033[31m  $mem_available    \033[0m"
    echo -e "\033[32m------------------------------------\033[0m"
    echo -e "|可用内存百分比:\033[31m   $mem_percentage%   \033[0m"
    echo -e "\033[32m------------------------------------\033[0m"
    echo -e "\033[32m############## 交换分区 #############\033[0m\n"
    echo -e "\033[32m------------------------------------\033[0m"
    echo -e "总的交换分区容量:\033[31m    $swap_total    \033[0m"
    echo -e "\033[32m------------------------------------\033[0m"
    echo -e "|用户使用的交换分区容量:\033[31m   $swap_user   \033[0m"
    echo -e "\033[32m------------------------------------\033[0m"
    echo -e "|剩余交换分区容量:\033[31m  ${swap_free}"
    echo -e "\033[32m------------------------------------\033[0m"
    if [ $(free -m | awk '/Swap/{print $2}') -ne 0 ]; then

        echo -e "|可用交换分区占比:\033[31m  $swap_percentage%    \033[0m"
        echo -e "\033[32m------------------------------------\033[0m"
    fi
    echo -e "|占用内存资源最多的10个进程列表:"
    echo -e "\033[31m$top_proc_mem%    \033[0m"
    echo -e "\033[32m------------------------------------\033[0m"
}


function cpukk() {
    #CPU型号
    cpu_info=$(LANG=C lscpu | awk -F: '/Model name/ {print $2}')
    #CPU内核数量
    cpu_core=$(awk '/processor/{core++} END{print core}' /proc/cpuinfo)
    #CPU最近1/5/15分钟的平均负载
    load1515=$(uptime | sed 's/,/ /g' | awk '{for(i=NF-2;i<=NF;i++)print $i }' | xargs)
    #发生中断数量
    irq=$(vmstat 1 1 | awk 'NR==3{print $11}')
    #上下文切换数量
    cs=$(vmstat 1 1 | awk 'NR==3{print $12}')
    #占用CPU资源最多的10个进程列表
    top_proc_cpu=$(ps --no-headers -eo %cpu,args | sort -k1 -n -r | head -10)

    echo -e "\n\033[32m################## CPU 相关 ############\033[0m\n"
    echo -e "\033[32m------------------------------------\033[0m"
    echo -e "|CPU型号:\033[31m$cpu_info           \033[0m"
    echo -e "\033[32m------------------------------------\033[0m"
    echo -e "|CPU内核数量:\033[31m$cpu_core        \033[0m"
    echo -e "\033[32m------------------------------------\033[0m"
    echo -e "|CPU最近1/5/15分钟的平均负载:\033[31m$load1515        \033[0m"
    echo -e "\033[32m------------------------------------\033[0m"
    echo -e "|CPU中断数量:\033[31m$irq        \033[0m"
    echo -e "\033[32m------------------------------------\033[0m"
    echo -e "|上下文切换数量:\033[31m$cs        \033[0m"
    echo -e "\033[32m------------------------------------\033[0m"
    echo -e "|占用CPU资源最多的10个进程列表:"
    echo -e "\033[31m$top_proc_cpu           \033[0m"
    echo -e "\033[32m------------------------------------\033[0m"

}

function disk_io() {
    #分区挂载信息
    disk=$(df -h)
    # 磁盘总数
    disk_total=$(vmstat -D | awk 'NR==1{print $1}')
    # 分区总数
    disk_sub=$(vmstat -D | awk 'NR==2{print $1}')
    #磁盘分区信息
    lsblk_=$(lsblk -n)
    #写入磁盘的总块数
    bo=$(vmstat 1 1 | awk 'NR==3{print $10}')
    #从磁盘读出的块数
    bi=$(vmstat 1 1 | awk 'NR==3{print $9}')
    #每秒写磁盘块的速率
    wa=$(vmstat 1 1 | awk 'NR==3{print $16}')

    echo -e "\n\033[32m################## 磁盘IO 相关 ############\033[0m\n"
    echo -e "\033[32m------------------------------------\033[0m"
    echo -e "|磁盘总数:\033[31m$disk_total           \033[0m"
    echo -e "\033[32m------------------------------------\033[0m"
    echo -e "|分区总数:\033[31m$disk_sub        \033[0m"
    echo -e "\033[32m------------------------------------\033[0m"
    echo -e "|磁盘分区信息:"
    echo -e "\033[31m$lsblk_           \033[0m"
    echo -e "\033[32m------------------------------------\033[0m"
    echo -e "|写入磁盘的总块数:\033[31m$bo       \033[0m"
    echo -e "\033[32m------------------------------------\033[0m"
    echo -e "|从磁盘读出的块数:\033[31m$bi       \033[0m"
    echo -e "\033[32m------------------------------------\033[0m"
    echo -e "|每秒写磁盘块的速率:\033[31m$wa       \033[0m"
    echo -e "\033[32m------------------------------------\033[0m"
    echo -e "|分区挂载信息:"
    echo -e "\033[31m$disk           \033[0m"
    echo -e "\033[32m------------------------------------\033[0m"

}

function procs() {
    #进程数量
    procs=$(ps aux | wc -l)
    #用户的最大进程数
    ulimit_=$(ulimit -u)
    #内核设置的最大进程数
    pid_max=$(sysctl kernel.pid_max | awk '{print $3}')

    echo -e "\n\033[32m################## 进程 相关 ############\033[0m\n"
    echo -e "\033[32m------------------------------------\033[0m"
    echo -e "|进程数量:\033[31m$procs       \033[0m"
    echo -e "\033[32m------------------------------------\033[0m"
    echo -e "|用户的最大进程数:\033[31m$ulimit_       \033[0m"
    echo -e "\033[32m------------------------------------\033[0m"
    echo -e "|内核设置的最大进程数:\033[31m$pid_max       \033[0m"
    echo -e "\033[32m------------------------------------\033[0m"

}


function network() {
    #获取网卡流量信息,接收|发送的数据流量,单位为字节(bytes)
    net_monitor=$(cat /proc/net/dev | tail -n +3 | awk 'BEGIN{ print "网卡名称 入站数据流量(bytes) 出站数据流量(bytes)"} {print $1,$2,$10}' | column -t)
    #获取暴露端口信息
    ip_port=$(ss -ntulpa)

     #本地IP地址列表
    localip=$(ip a s | awk '/inet /{print $2}' )


    echo -e "\n\033[32m################## 网络 相关 ############\033[0m\n"
    echo -e "|本地IP地址列表:"
    echo -e "\033[31m$localip    \033[0m"
    echo -e "\033[32m------------------------------------\033[0m"
    echo -e "|获取网卡流量信息:"
    echo -e "\033[31m$net_monitor           \033[0m"
    echo -e "\033[32m------------------------------------\033[0m"
    echo -e "|获取暴露端口信息:"
    echo -e "\033[31m$ip_port           \033[0m"
    echo -e "\033[32m------------------------------------\033[0m"

}

#---------------------------------------------------------------------------------------------------
beifen()
{
dd=`date +%Y-%m-%d-%H-%M-%S`
#备份文件
read -p "请输入需要备份的文件夹路径:" kk
#备份目标路径
read -p "请输入备份输出的文件夹路径:" zz

source_folder=${kk}/
backup_folder=${zz}/backupdate
source_folder_name=`echo $kk |awk -F "/" '{print $3}'`-$dd.tar.gz
echo "source_folder:$source_folder"
echo "backup_folder: $backup_folder"
echo "source_folder_name: $source_folder_name"
#新建立文件夹
mkdir -p ${zz}
mkdir -p ${zz}/backupdate
#压缩命令
tar -zcvPf $backup_folder/$source_folder_name  $source_folder
cd $backup_folder
tar -zxvf $source_folder_name
echo "$source_folder_name文件备份成功"
msgbox "pam" "============备份结束 路径为:${zz}/backupdate=====================";echo
}

rizhiqingli()
{
#//保留多少天之前
read -p "请输入日志保留天数:" mtime
read -p "请输入需要清理日志的文件夹路径:" kkrizhi
if [  -n "$1" ];then
mtime=$1
fi
echo "开始干  $mtime days 之前的日志 starting........."
#/
find ${kkrizhi}/ -mtime +$mtime -name "*.log" -print
find ${kkrizhi}/ -mtime +$mtime -name "*.log" -exec rm -rf {} \;
#
echo "已干完"
}

xlsqingli()
{
#//保留多少天之前
read -p "请输入xls保留天数:" mtime
read -p "请输入需要清理xls的文件夹路径:" kkrizhi
if [  -n "$1" ];then
mtime=$1
fi
echo "开始干  $mtime days 之前的日志 starting........."
#/
find ${kkrizhi}/ -mtime +$mtime -name "*.xls" -print
find ${kkrizhi}/ -mtime +$mtime -name "*.xls" -exec rm -rf {} \;
#
echo "已干完"
}

zipqingli()
{
#//保留多少天之前
read -p "请输入zip保留天数:" mtime
read -p "请输入需要清理zip的文件夹路径:" kkrizhi
if [  -n "$1" ];then
mtime=$1
fi
echo "开始干  $mtime days 之前的日志 starting........."
#/
find ${kkrizhi}/ -mtime +$mtime -name "*.zip" -print
find ${kkrizhi}/ -mtime +$mtime -name "*.zip" -exec rm -rf {} \;
#
echo "已干完"
}

#---------------------------------------------------------------------------------------------------

#--------------------------------------------------------------------------------------------------
#控制函数========================================
main()
{
    menu1
    case $num1 in
        1)
            #localeset
            selinuxset
            #firewalldset
            chkset
            limitset
            yumset
            kernelset
            sshset
            restartset
            ntpdateset
            historyset
            ;;
#--------------------------------------------------------------------------------------------------
        2)
            menu2
            case $num2 in
                        1)
                            localeset
                            ;;
                        2)
                            selinuxset
                            ;;
                        3)
                            firewalldset
                            ;;
                        4)
                            chkset
                            ;;
                        5)
                            limitset
                            ;;
                        6)     
                        yumset
                            ;;
                        7)
                            kernelset
                            ;;
                        8)
                            sshset
                            ;;
                        9)
                            restartset
                            ;;
                        10)
                            ntpdateset
                            ;;
                11)
                     historyset
                     ;;
                12)
                     main
                     ;;
                13)
                     exit
                     ;;
                *)
                     echo '只能选 [1-13],不玩了退了.'
                     ;;
            esac
            ;;
#--------------------------------------------------------------------------------------------------
        3)menu3
           case $num3 in
           1)
           ftpinstall
                      ;;
           2)
           pythoninstall
                      ;;
           3)
                      installjdk
                                            ;;
                      *)
                     echo '只能选 [1-3],不玩了退了.'
                                    ;;
            esac
            ;;
#--------------------------------------------------------------------------------------------------
        4)
          wodishen
                    ;;
#--------------------------------------------------------------------------------------------------
         5)menu5
           case $num5 in
           1)
           systeninformation
                   ;;
           2)
           bash_os
                   ;;
           3)
           memory
                   ;;
           4)
           cpukk
                                       ;;
           5)
           disk_io
                   ;;
           6)
           procs
                   ;;
           7)
           network
                   ;;
                   *)
                  echo '只能选 [1-7],不玩了退了.'
                                    ;;
            esac
            ;;
#--------------------------------------------------------------------------------------------------
        6)menu6
           case $num6 in
           1)
           duankoufangxin
                      ;;
           2)
           duankoujiance
                      ;;
           3)
           duankouchaxun
                      ;;
           4)
           firewalldzhuangtai
                      ;;
           5)
           firewalldqidong
                      ;;
           6)
           firewalldguanbi
                      ;;
           7)
           gaojiefangxing
                      ;;
           8)
           gaojieyichu
                      ;;
           9)
           gaojiechakan
                      ;;
                      *)
                     echo '只能选 [1-6],不玩了退了.'
                                    ;;
            esac
            ;;
#--------------------------------------------------------------------------------------------------
        7)menu7
           case $num7 in
           0)
           mysqlyingshe
                                            ;;
           1)
           mysqlyingshe
                      ;;
           2)
           mysqldanku
                      ;;
           3)
           mysqlquanliang
                      ;;
                      *)
                     echo '只能选 [1-3],不玩了退了.'
                                    ;;
            esac
            ;;
#--------------------------------------------------------------------------------------------------
        8)menu8
           case $num8 in
           1)
           rizhiqingli
                      ;;
           2)
           beifen
                      ;;
           3)
           xlsqingli
                      ;;
           4)
           zipqingli
                      ;;
                      *)
                     echo '只能选 [1-3],不玩了退了.'
                                    ;;
            esac
            ;;

#--------------------------------------------------------------------------------------------------
          *)
            msgbox "alert" "####别乱按,想搞事情???只能选【1-6】选项!!!!!";echo
            sleep 3
            main
            ;;

    esac
}
#--------------------------------------------------------------------------------------------------
main $*

你可能感兴趣的:(运维)