热门标签 | 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就是要表示的正则表达式,用斜杠括起来。

 

 

 

 

 



推荐阅读
  • PHP图片截取方法及应用实例
    本文介绍了使用PHP动态切割JPEG图片的方法,并提供了应用实例,包括截取视频图、提取文章内容中的图片地址、裁切图片等问题。详细介绍了相关的PHP函数和参数的使用,以及图片切割的具体步骤。同时,还提供了一些注意事项和优化建议。通过本文的学习,读者可以掌握PHP图片截取的技巧,实现自己的需求。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 成功安装Sabayon Linux在thinkpad X60上的经验分享
    本文分享了作者在国庆期间在thinkpad X60上成功安装Sabayon Linux的经验。通过修改CHOST和执行emerge命令,作者顺利完成了安装过程。Sabayon Linux是一个基于Gentoo Linux的发行版,可以将电脑快速转变为一个功能强大的系统。除了作为一个live DVD使用外,Sabayon Linux还可以被安装在硬盘上,方便用户使用。 ... [详细]
  • C++中的三角函数计算及其应用
    本文介绍了C++中的三角函数的计算方法和应用,包括计算余弦、正弦、正切值以及反三角函数求对应的弧度制角度的示例代码。代码中使用了C++的数学库和命名空间,通过赋值和输出语句实现了三角函数的计算和结果显示。通过学习本文,读者可以了解到C++中三角函数的基本用法和应用场景。 ... [详细]
  • 本文讨论了在iOS平台中的Metal框架中,对于if语句中的判断条件的限制和处理方式。作者提到了在Metal shader中,判断条件不能写得太长太复杂,否则可能导致程序停留或没有响应。作者还分享了自己的经验,建议在CPU端进行处理,以避免出现问题。 ... [详细]
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
  • 海马s5近光灯能否直接更换为H7?
    本文主要介绍了海马s5车型的近光灯是否可以直接更换为H7灯泡,并提供了完整的教程下载地址。此外,还详细讲解了DSP功能函数中的数据拷贝、数据填充和浮点数转换为定点数的相关内容。 ... [详细]
  • RouterOS 5.16软路由安装图解教程
    本文介绍了如何安装RouterOS 5.16软路由系统,包括系统要求、安装步骤和登录方式。同时提供了详细的图解教程,方便读者进行操作。 ... [详细]
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社区 版权所有