• Linux运维脚本


    #!/bin/bash
    echo "      ___           ___         ___
         /  /\         /  /\       /__/\
        /  /:/_       /  /::\      \  \:\
       /  /:/ /\     /  /:/\:\      \  \:\
      /  /:/ /::\   /  /:/~/:/  _____\__\:\
     /__/:/ /:/\:\ /__/:/ /:/  /__/::::::::\
     \  \:\/:/~/:/ \  \:\/:/   \  \:\~~\~~\/
      \  \::/ /:/   \  \::/     \  \:\  
       \__\/ /:/     \  \:\      \  \:\
         /__/:/       \  \:\      \  \:\
         \__\/         \__\/       \__\/
    "
    echo "SPN 日常巡查脚本输出"
    # 清理屏幕
    clear
    
    function bash_os() {
        # "系统基础信息"
    
        #内核信息
        kernel=$(uname -r)
        #操作系统版本
        release=$(cat /etc/redhat-release)
        #主机名称
        hostname=$HOSTNAME
        #当前时间及运行时间
        dateload=$(uptime | awk -F "," '{print $1}')
        # 当前登录用户数
        users=$(uptime | awk -F "," '{print $3}')
    
        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 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 cpu() {
        #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"
    
    }
    
    case $1 in
    all)
        bash_os
        memory
        cpu
        disk_io
        procs
        network
        ;;
    bash_os)
        bash_os
        ;;
    memory)
        memory
        ;;
    cpu)
        cpu
        ;;
    disk_io)
        disk_io
        ;;
    procs)
        procs
        ;;
    network)
        network
        ;;
    *)
        echo "Usage: bash_os|memory|cup|disk_io|procs|network|all"
        ;;
    esac

    命令分析:

    1、uname  -r  显示内核信息      `` 与$() 命令的等价的   建议使用$()

     2、cat  /etc/redhat-release 显示系统版本信息

    3、hostname  显示主机名

    4、uptime

     #当前服务器时间:    22:25:22

    #当前服务器运行时长   4天
    #当前用户数          3 users
    #当前的负载均衡      load average  0.00, 0.01, 0.05,分别取1min,5min,15min的均值

    另:系统平均负载是指在特定时间间隔内运行队列中的平均进程数。

    如果每个CPU内核的当前活动进程数不大于3的话,那么系统的性能是良好的。如果每个CPU内核的任务数大于5,那么这台机器的性能有严重问题。如果你的linux主机是1个双核CPU的话,当Load Average 为6的时候说明机器已经被充分使用了。

    5、awk命令

    -F参数:指定分隔符,可指定一个或多个

    print 后面做字符串的拼接

    awk '{pattern + action}' {filenames}

     awk '$2 >80 {print}' zh.txt 匹配成绩大于80的学生信息并输出

    awk '/^X/ {print} '  zh.txt 匹配学生姓名以X开头的信息

    awk '/^(张|李/ {print}' 匹配学生姓名以张或李开头的学生信息。

     尽管操作可能会很复杂,但语法总是这样,其中 pattern 表示 AWK 在数据中查找的内容,而 action 是在找到匹配内容时所执行的一系列命令。花括号({})不需要在程序中始终出现,但它们用于根据特定的模式对一系列指令进行分组。 pattern就是要表示的正则表达式,用斜杠括起来。

  • 相关阅读:
    android 4.0 中出错 java.lang.UnsupportedOperationException
    怎么确定你的CPU是否支持64位虚拟化
    宽度百分比单位的转换公式
    Test SRM Level Three: LargestCircle, Brute Force
    802.11(wifi)的MAC层功能
    zookeeper集群的python代码测试
    mysqldump 命令的使用
    xp硬盘安装Fedora14 过程记录及心得体会(fedora14 live版本680M 和fedora14 DVD版本3.2G的选择)
    ContentProvider的使用
    基于 Java 2 运行时安全模型的线程协作--转
  • 原文地址:https://www.cnblogs.com/zouhong/p/15953066.html
Copyright © 2020-2023  润新知