shell脚本centos系统信息输出-系统调优-常用操作

一、脚本内容以及执行效果

在这里插入图片描述

二、系统信息输出截图(内容较多分为两页截图)

第一页
在这里插入图片描述
第二页
在这里插入图片描述

三、脚本内容

#!/bin/bash
#2021-08-31在centos7完成测试
#脚本名称centos7-十三香,十三香是“调优”的意思
#Aiden著
ex () {
echo "
+-----------------------------------------------------------------+
| 项  |  内容                                                     |
-------------------------------------------------------------------
|  0  |  系统信息输出                                             |
|  1  |  关闭防火墙selinux+关闭开机自启                           |
|  2  |  配置网易yum源                                            |
|  3  |  使用Yum安装ntp并同步至阿里时间服务器                     |
|  4  |  使用Yum安装telnet/lsof/vim/unzip/lrzsz/wget/curl/tcpdump |
|  5  |  配置ulimit(最大连接数调优到307200)                     |
|  6  |  配置limits解除最大进程数和最大文件打开数限制             |
|  7  |  内核sysctl.conf的常用参数优化释义(只显示不进行优化)    |
|  8  |  服务器字符集调整到utf-8                                  |
|  9  |  优化缩短TCP断开连接自动回收时间为20s                     |
| k8s |  关闭swap并将桥接的IPv4流量传递到iptables的链(k8s适用)  |
| ssh |  配置ssh优化,加快连接速度(适配centos7)                   |
| ali |  配置阿里Yum源                                            |
| cad |  关闭ctrl+alt+del重启机器                                 |
| doc |  配置docker-ce镜像仓库(前提须装有yum和docker)             |
|-----------------------------------------------------------------|
|                                                                 |
+-----------------------------------------------------------------+

"
}
ex
while read -p "请输入执行项(q退出,p重新打印执行项):" num
do
case $num in
0) #系统信息输出
function ling () {
#此脚本测试系统Centos6.x/centos7.x

##系统信息
        version=`cat /etc/redhat-release` #版本
        kernel=`uname -r` #内核

##cpu
        nuclear=`grep vendor_id /proc/cpuinfo|wc -l` #核数

##内存\Swap
        mem=`free -m|grep Mem|awk '{print $2"M"}'` #内存总大小
        user_mem=`free -m|grep Mem|awk '{print $3"M"}'` #已用内存大小
        swap=`free -m |grep Swap|awk '{print $2"M"}'` #swap总大小
        user_swap=`free -m |grep Swap|awk '{print $3"M"}'` #已用swap大小
##负载
        loadavg=`uptime |awk -F: '{print $5}'` #系统负载

##网络
        network=`[[ $(curl -o /dev/null --connect-timeout 3 -s -w "%{http_code}" www.baidu.com) -eq 200 ]] && echo yes || echo no` #是否能上网
        ip_addr=`ip addr | egrep -o '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | egrep -v  "^127" | head -n 1` #ip地址
##磁盘
        disk_zong=`df -Th | grep '/dev/' | awk '{print $3}' | head -n 1` #总大小
        disk_user=`df -Th | grep '/dev/' | awk '{print $4}' | head -n 1` #已用大小
        disk_lsbl=`lsblk` #硬盘分区分布
##其他
        system_time=`awk '{a=$1/86400;b=($1%86400)/3600;c=($1%3600)/60;d=$1%60} {printf("%ddays, %d:%d:%d\n",a,b,c,d)}' /proc/uptime` #开机时长
        sys_begin=`date -d "$(awk -F. '{print $1}' /proc/uptime) second ago" +"%Y-%m-%d %H:%M:%S"` #开机时间
##日志
        system_log=`du -sh /var/log/ |awk '{print $1}'` #系统日志大小
#进程
        tasks=`top -n1 |grep Tasks |awk '{print $2,$4,6}'` #总 运行 休眠

system(){
echo "
                 ooo                    |版本: $version   
                0o0oo_                  |内核: $kernel   
              088888880                 
              88“ . ”88                 |核数: $nuclear""
              {[ -_- ]}                 |负载:$loadavg
               0\ = /0                
            ___/+---+\___               |内存: $mem
          .’ qaq     qaq ’.             |已用: $user_mem
         / ----- <> ------ \            |swap:  $swap 
        /_ _ _ _ _ _ _ _ _ _\           |已用:  $user_swap
       !#####################!         
       &&&&&&&&&&&&&&&&&&&&&&&          |上网: $network
       \ “-” “-” “-” “-” “-” /          |地址:  $ip_addr
      __—————————————————————__    
     /%%%%%%%%%%%%%%%%%%%%%%%%%\        |磁盘:  $disk_zong
    @--1--1--1--1--1--1--1--1--1@       |已用:  $disk_user
    ?~~~~~~~~~~~~~~~~~~~~~~~~~~~~?      |日志: 系统日志为$system_log
    \____________________________/
       ==-------<>---------=            |开机: $sys_begin
                                        |至今: $system_time
          佛祖保佑,永不死机

硬盘分区
----------------------------------------------------------------------
$disk_lsbl                                 
----------------------------------------------------------------------

磁盘详情
----------------------------------------------------------------------
`df -Th`
----------------------------------------------------------------------
"
}
system
##端口扫描
echo "端口扫描
----------------------------------------------------------------------"
portarray=(`sudo netstat -tnlp|egrep -i "$1"|awk {'print $4'}|awk -F':' '{if ($NF~/^[0-9]*$/) print $NF}'|sort|uniq`)
length=${#portarray[@]}
printf "{\n"
printf '\t'port":"
for ((i=0;i<$length;i++))
do
        printf '\n\t\t{'
        printf "\"{#TCP_PORT}\":\"${portarray[$i]}\"}"
        if [ $i -lt $[$length-1] ];then
                printf ','
        fi
done
printf "\n\t\n"
printf "}\n"
echo "----------------------------------------------------------------------
"

##开机启动项
echo "开机启动项
----------------------------------------------------------------------"
chkconfig --list 2>/dev/null
echo "----------------------------------------------------------------------"
}

ling
  continue
;;
1) #关闭防火墙和linux+禁止开机自启
function yi () {
        centos=`rpm -q centos-release|cut -d- -f3`
        if [ $centos -eq 6 ];then
            service iptables stop #关闭iptables
            chkconfig iptables off #禁止iptables开机自启
            service iptables status #输出防火墙状态
            sed -i "s/^SELINUX\=enforcing/SELINUX\=disabled/g" /etc/selinux/config #永久关闭selinux
            setenforce 0 #临时关闭selinux
            echo -e "\033[32m SELINUX状态为`getenforce getenforce` \033[0m"
        elif [ $centos -eq 7 ];then
            systemctl stop firewalld #关闭firewalld
            systemctl disable firewalld #禁止firewalld开机自启
            echo -e "\033[32m 已执行关闭,防火墙selinux状态如下 \033[0m"
            systemctl status firewalld |grep "Active" #查看防火墙状态
            sed -i "s/^SELINUX\=enforcing/SELINUX\=disabled/g" /etc/selinux/config #永久关闭selinux
            setenforce 0 #临时关闭selinux
        elif [ $centos -eq 8 ];then
            systemctl stop firewalld #关闭firewalld
            systemctl disable firewalld #禁止firewalld开机自启
            echo -e "\033[32m 已执行关闭,防火墙selinux状态如下 \033[0m"
            systemctl status firewalld |grep "Active"#查看防火墙状态
            sed -i "s/^SELINUX\=enforcing/SELINUX\=disabled/g" /etc/selinux/config #永久关闭selinux
            setenforce 0 #临时关闭selinux
        else
            echo "系统识别错误,不等于centos6/7/8"
        fi
}
yi
;;
2) #配置网易yum源
function er () {
        if [ ! -d "/etc/yum.repos.d/backup/" ];then
            mkdir -p /etc/yum.repos.d/backup
        else
            echo "文件夹已经存在,将yum文件移动至该文件夹..."
        fi
        mv /etc/yum.repos.d/* /etc/yum.repos.d/backup/
        wget -O /etc/yum.repos.d/CentOS-Base-163.repo http://mirrors.163.com/.help/CentOS7-Base-163.repo
        yum clean all
        yum makecache
}
er
;;
3) #使用Yum安装ntp并进行时间同步至阿里时钟服务器,同时设置计划任务
function san () {
        yum -y install ntp
        ntpdate ntp1.aliyun.com #同步时间至阿里时间服务器
        curr_user=`echo $USER`;
        curr_path=$(pwd);
        echo "0 2 * * * ntpdate ntp1.aliyun.com" >> "/var/spool/cron/$curr_user"
        crontab -l
}
san
;;
4) #使用Yum安装telnet/lsof/vim/unzip/lrzsz/wget/curl/tcpdump
function si () {
        yum -y install telnet lsof vim unzip lrzsz wget curl tcpdump
        echo -e "\033[32m 已为您列出本次安装的软件包列表: \033[0m"
        yum list telnet lsof vim unzip lrzsz wget curl tcpdump 1 2>/dev/null|tail -8|awk '{print $1}'|grep -v "Loading"
}
si
;;
5) #配置ulimit(最大连接数调优到307200)
function wu () {
        echo -e "ulimit -HSn 307200" >>/etc/profile
        echo -e "\033[32m ulimit调优内容如下: \033[0m" 
        grep 307200 /etc/profile
        echo -e "\033[32m 需要手动执行"source /etc/profile"使其生效  \033[0m"
}
wu
;;
6) #配置limits解除最大进程数和最大文件打开数限制
function liu () {
        echo -e "* soft nproc 65535\n* hard nproc 65535\n* soft nofile 65535\n* hard nofile 6553\n* - sigpending 6553" >>/etc/security/limits.conf
        echo -e "\033[32m 调优配置如下  \033[0m"
        tail -5 /etc/security/limits.conf
}
liu
;;
7) #sysctl.conf参数解释
qi () {
echo "
#设置系统对最大跟踪的TCP连接数的限制
net.ipv4.netfilter.ip_conntrack_max = 204800

#表示系统同时保持TIME_WAIT套接字的最大数量
net.ipv4.tcp_max_tw_buckets = 10000

#关闭tcp_sack,0关闭,1开启
net.ipv4.tcp_sack = 1

#关闭tcp_window_scaling,0关闭,1开启
net.ipv4.tcp_window_scaling = 1

#tcp读buff-rmem,tcp写buff-wmem。第一个值是缓冲区最小值,中间值是缓冲区的默认值,最后一个是缓冲区的最大值
net.ipv4.tcp_rmem = 4096        87380   4194304
net.ipv4.tcp_wmem = 4096        16384   4194304

#定义了处于SYN_RECV的TCP最大连接数,当处于SYN_RECV状态的TCP连接数超过tcp_max_syn_backlog后,会丢弃后续的SYN报文。
net.ipv4.tcp_max_syn_backlog = 65536

#表示当每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许发送到队列的数据包的最大数目,一般默认值为128(可能不同的linux系统该数值也不同)。nginx服务器中定义的NGX_LISTEN_BACKLOG默认为511.
net.core.netdev_max_backlog =  262144

#该参数用于调节系统同时发起的TCP连接数,一般默认值为128.在客户端存在高并发请求的情况下,该默认值较小,肯那个导致连接超时或重传问题
net.core.somaxconn = 262144

#发送套接字缓冲区大小的默认值(以字节为单位)
net.core.wmem_default = 8388608

#接收套接字缓冲区大小的默认值(以字节为单位)。
net.core.rmem_default = 8388608
#接收套接字缓冲区大小的最大值(以字节为单位)。
net.core.rmem_max = 16777216
#发送套接字缓冲区大小的最大值(以字节为单位)。
net.core.wmem_max = 16777216

#不再检查时间戳      
net.ipv4.tcp_timestamps = 0

#该参数用于设置内核放弃TCP 链接之前向客户端发送SYN+ACK 包的数量。为了简历对端的链接服务,服务器和客户端需要进行三次握手,第二次握手期间,内核需要发送SYN 并附带一个回应前一个SYN 的ACK ,这个参数主要影响这个过程,一般赋值为1,即内核放弃链接之前发送一次SYN+ACK 包  
net.ipv4.tcp_synack_retries = 2
#表示应用程序进行connect()系统调用时,在对方不返回SYN + ACK的情况下(也就是超时的情况下),第一次发送之后,内核最多重试几次发送SYN包;并且决定了等待时间
net.ipv4.tcp_syn_retries = 2

#1表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_len = 1
net.ipv4.tcp_tw_reuse = 1

#TCP最大缓冲区,单位KB           
net.ipv4.tcp_mem = 94500000 915000000 927000000

#用于设定系统中最对允许存在多少TCP套接字不被关联到任何一个用户文件句柄上。如果超过这个数字,没有与用户文件句柄关联的TCP套接字将立刻被复位,同时发出警告信息,这个限制知识为了防止简单的DoS(Denial of Service,拒绝服务)攻击,一般在系统内存比较充足的情况下,可以增大这个参数的赋值
net.ipv4.tcp_max_orphans = 3276800

#表示如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间。
#net.ipv4.tcp_fin_timeout = 30

#tcp keep-alive是TCP的一种检测TCP连接状况的保鲜机制。tcp keep-alive保鲜定时器,支持三个系统内核配置参数:
net.ipv4.tcp_keepalive_intvl = 15
net.ipv4.tcp_keepalive_probes = 5
net.ipv4.tcp_keepalive_time = 1800
#keepalive是TCP保鲜定时器,当网络两端建立了TCP连接之后,闲置(双方没有任何数据流发送往来)了tcp_keepalive_time后,服务器就会尝试向客户端发送侦测包,来判断TCP连接状况(有可能客户端崩溃、强制关闭了应用、主机不可达等等)。如果没有收到对方的回答(ack包),则会在 tcp_keepalive_intvl后再次尝试发送侦测包,直到收到对方的ack,如果一直没有收到对方的ack,一共会尝试 tcp_keepalive_probes次,每次的间隔时间在这里分别是15s, 30s, 45s, 60s, 75s。如果尝试tcp_keepalive_probes,依然没有收到对方的ack包,则会丢弃该TCP连接。TCP连接默认闲置时间是2小时,一般设置为30分钟足够了。

#服务器某个端口可以连接的最大tcp数量是由四元组成的也就是(src_ip,src_port,dst_ip,dst_port)(本地ip,本地端口,客户端ip,客户端端口)。理论上在src_ip,src_port固定的情况下,一个客户端Ip理论上最多有65535个连接数。ip_local_port_range这个参数控制的就是dst_port的范围。
net.ipv4.ip_local_port_range = 1024    65000
"
}
qi
;;
8) #字符集UTF-8
function ba () {
        utf=`echo $LANG|grep "UTF-8"|wc -l`
        utf8=`localectl list-locales|grep "zh_CN.utf8"|wc -l`
        if [ $utf -eq 1 ];then
            echo -e "\033[32m 您的服务器字符集为`echo $LANG`,无需调整 \033[0m"
        else
                if [ $utf8 -eq 1 ];then
                    localectl set-locale LANG=zh_CN.utf8
                    echo "\033[32m 字符集已调整为UTF-8,需手动重启生效 \033[0m"
                else 
                    yum install -y kde-l10n-Chinese
                    localectl set-locale LANG=zh_CN.utf8
                    echo "\033[32m 字符集已调整为UTF-8,需手动重启生效 \033[0m"
                fi
        fi
}
ba
;;
9) #优化Linux中TCP断开等待时间
function jiu () {
        tcpwait=`cat /proc/sys/net/ipv4/tcp_fin_timeout`
        echo -e "\033[32m 您目前的TCP断开等待时间为:${tcpwait} \033[0m"
        if [ $tcpwait -eq 20 ];then
            echo -e "\033[32m 天呐,好棒,您已经优化到了很好的值! \033[0m"
        else 
            echo "20" >/proc/sys/net/ipv4/tcp_fin_timeout
            echo -e "\033[32m 已为您调整TCP断开等待时间参数值为${tcpwait} .\033[0m"
        fi
}
jiu
;;
k8s) #将桥接的IPv4流量传递到iptables的链,关闭swap 
function k8s () {
cat >> /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1 
net.bridge.bridge-nf-call-iptables = 1 
EOF
        sysctl --system 1>/dev/null # 生效 
        echo -e "\033[32m 已为您配置将桥接的IPv4流量传递到iptables的链,详情如下: \033[0m"
        grep "net.bridge.bridge-nf-call-ip" /etc/sysctl.d/k8s.conf

        swapoff -a  # 临时
        sed -ri 's/.*swap.*/#&/' /etc/fstab    # 永久
        echo -e "\033[32m 已配置临时关闭+永久关闭=不用重启永久关闭 \033[0m"
        #临时+永久=不用重启永久关闭
}
k8s
;;
ssh) #优化ssh配置
function sshc () {
        sshconfig=`grep "UseDNS no" /etc/ssh/sshd_config |wc -l`
        sshgss=`grep "GSSAPIAuthentication no" /etc/ssh/sshd_config |wc -l`
        if [ $sshconfig -eq 1 ];then
            echo -e "\033[32m 您SSH其中的UseDNS参数配置对了主人!牛啊牛啊 \033[0m"
        else
            sed -i 's/UseDNS yes/UseDNS no/g' /etc/ssh/sshd_config 1>/dev/null
            echo -e "\033[32m 改完了老板:`grep UseDNS /etc/ssh/sshd_config` \033[0m"
        fi

        if [ $sshgss -eq 1 ];then
            echo -e "\033[32m 您SSH其中的GSSAPIAuthentication参数配置对了主人!牛啊牛啊 \033[0m"
        else 
            sed -i 's/GSSAPIAuthentication yes/GSSAPIAuthentication no/g' /etc/ssh/sshd_config 1>/dev/null
            echo -e "\033[32m 改完了老板:`grep GSSAPIAuthentication /etc/ssh/sshd_config` \033[0m"
        read -p "是否现在重启sshd生效(0现在重启,1不重启):" numm
                if [ $numm -eq 0 ];then
                    systemctl restart sshd
                elif [ $numm -eq 1 ];then
                    echo -e "\033[32m 听主人的先不重启 \033[0m"
                else
                    echo -e "\033[32m 主人,只能输0和1 \033[0m"
                fi

        fi
}
sshc
;;
ali) #配置阿里yum源
function ali () {
        if [ ! -d "/etc/yum.repos.d/backup/" ];then
            mkdir -p /etc/yum.repos.d/backup
        else
            echo "文件夹已经存在,将yum文件移动至该文件夹..."
        fi
        mv /etc/yum.repos.d/* /etc/yum.repos.d/backup/
        wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
        yum clean all
        yum makecache
}
ali
;;
cad) #关闭ctrl+alt+delete重启linux机器
function cad () {
        if [ ! -d "/usr/lib/systemd/system/ctrl-alt-del.target" ];then
            echo -e "\033[32m 主人安全性很强,俺检查到您已经关掉了 \033[0m"
        else
            rm -rf /usr/lib/systemd/system/ctrl-alt-del.target
        echo -e "\033[32m 已经关闭 \033[0m"
        fi
        init q #重新加载init配置
}
cad
;;
doc) #配置docker-ce镜像仓库
function doc () {
        yum -y install yum-utils
        yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
        echo -e "\033[32m 主人,docker-ce镜像仓库配置完成了哦 \033[0m"
}
doc
;;
q) #返回值0
        exit 0
;;
p) #重新打印执行项
ex
;;
*) #错误警告
        echo -e "\033[31m Error,输错了主人 \033[0m"
        continue
esac
done
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

为互联网铺一条公路

你的支持,我的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值