热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Linux运维脚本

#!binbashecho_________\\__\:_::\\\:\:\:\:\\\:

#!/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就是要表示的正则表达式,用斜杠括起来。

 

 

 

 

 



推荐阅读
  • 从无到有,构建个人专属的操作系统解决方案
    操作系统(OS)被誉为程序员的三大浪漫之一,常被比喻为计算机的灵魂、大脑、内核和基石,其重要性不言而喻。本文将详细介绍如何从零开始构建个人专属的操作系统解决方案,涵盖从需求分析到系统设计、开发与测试的全过程,帮助读者深入理解操作系统的本质与实现方法。 ... [详细]
  • 在《Linux高性能服务器编程》一书中,第3.2节深入探讨了TCP报头的结构与功能。TCP报头是每个TCP数据段中不可或缺的部分,它不仅包含了源端口和目的端口的信息,还负责管理TCP连接的状态和控制。本节内容详尽地解析了TCP报头的各项字段及其作用,为读者提供了深入理解TCP协议的基础。 ... [详细]
  • 数字图书馆近期展出了一批精选的Linux经典著作,这些书籍虽然部分较为陈旧,但依然具有重要的参考价值。如需转载相关内容,请务必注明来源:小文论坛(http://www.xiaowenbbs.com)。 ... [详细]
  • 本文探讨了将PEBuilder转换为DIBooter.sh的方法,重点介绍了如何将DI工具集成到启动层,实现离线镜像引导安装。通过使用DD命令替代传统的grub-install工具,实现了GRUB的离线安装。此外,还详细解析了bootice工具的工作原理及其在该过程中的应用,确保系统在无网络环境下也能顺利引导和安装。 ... [详细]
  • Linux学习精华:程序管理、终端种类与命令帮助获取方法综述 ... [详细]
  • 在Linux环境中,通过编写Shell脚本来实现自定义命令的创建与激活,能够极大地简化服务器上多个子系统的管理操作。例如,通过简单的命令如“tt”,即可快速查看各个应用程序的名称及其运行状态,从而提高系统维护的效率和便捷性。 ... [详细]
  • zabbix 自定义监控
    配置自定义监控,我们需要配置监控项的key,和监控项返回的value添加自定义监控key的格式,在配置文件中添加UserParameter ... [详细]
  • 10分钟带你搞定 Linux awk命令
    欢迎加入JackTian技术交流群!CSDN海量资源免费下载!简介awk是一个强大的文本分析工具,相对于grep的查找,se ... [详细]
  • awk if 包含_千面 awk | Linux 中国
    awk命令不仅提供了简单的输入字符串筛选功能,还包含提取数据列、打印简单文本、筛选内容——甚至做一些数学计算。--SandraHenry-stockerawk命令不仅 ... [详细]
  • nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • 在使用 Cacti 进行监控时,发现已运行的转码机未产生流量,导致 Cacti 监控界面显示该转码机处于宕机状态。进一步检查 Cacti 日志,发现数据库中存在 SQL 查询失败的问题,错误代码为 145。此问题可能是由于数据库表损坏或索引失效所致,建议对相关表进行修复操作以恢复监控功能。 ... [详细]
  • 本文介绍了如何利用Shell脚本高效地部署MHA(MySQL High Availability)高可用集群。通过详细的脚本编写和配置示例,展示了自动化部署过程中的关键步骤和注意事项。该方法不仅简化了集群的部署流程,还提高了系统的稳定性和可用性。 ... [详细]
  • MySQL 8.0 MGR 自动化部署与配置:DBA 和开源工具的高效解决方案
    MySQL 8.0 MGR 自动化部署与配置:DBA 和开源工具的高效解决方案 ... [详细]
  • 如何利用正则表达式(regexp)实现高效的模式匹配?本文探讨了正则表达式在编程中的应用,并分析了一个示例程序中存在的问题。通过具体的代码示例,指出该程序在定义和使用正则表达式时的不当之处,旨在帮助读者更好地理解和应用正则表达式技术。 ... [详细]
  • HBase在金融大数据迁移中的应用与挑战
    随着最后一台设备的下线,标志着超过10PB的HBase数据迁移项目顺利完成。目前,新的集群已在新机房稳定运行超过两个月,监控数据显示,新集群的查询响应时间显著降低,系统稳定性大幅提升。此外,数据消费的波动也变得更加平滑,整体性能得到了显著优化。 ... [详细]
author-avatar
峰吹云飞_974
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有