分享几个常用的运维 shell 脚本
今天咸鱼给大家分享几个不错的 Linux 运维脚本,这些脚本中大量使用了 Linux 的文本三剑客:
1. awk
2. grep
3. sed
建议大家这三个工具都要了解并最好能够较为熟练的使用
根据 PID 显示进程所有信息
根据用户输入的 PID,过滤出该 PID 所有的信息

#! /bin/bash
read -p "请输入要查询的PID: " P
n=`ps -aux| awk '$2~/^'${P}'$/{print $0}'|wc -l`
if [ $n -eq 0 ];then
echo "该PID不存在!!"
exit
fi
echo -e "\e[32m--------------------------------\e[0m"
echo "进程PID: ${P}"
echo "进程命令:$(ps -aux| awk '$2~/^'$P'$/{for (i=11;i<=NF;i++) printf("%s ",$i)}')"
echo "进程所属用户: $(ps -aux| awk '$2~/^'$P'$/{print $1}')"
echo "CPU占用率:$(ps -aux| awk '$2~/^'$P'$/{print $3}')%"
echo "内存占用率:$(ps -aux| awk '$2~/^'$P'$/{print $4}')%"
echo "进程开始运行的时间:$(ps -aux| awk '$2~/^'$P'$/{print $9}')"
echo "进程运行的时间:$(ps -aux| awk '$2~/^'$P'$/{print $10}')"
echo "进程状态:$(ps -aux| awk '$2~/^'$P'$/{print $8}')"
echo "进程虚拟内存:$(ps -aux| awk '$2~/^'$P'$/{print $5}')"
echo "进程共享内存:$(ps -aux| awk '$2~/^'$P'$/{print $6}')"
echo -e "\e[32m--------------------------------\e[0m"

根据进程名显示该进程所有信息
根据输入的程序的名字模糊过滤出所对应的 PID,并显示出详细信息,如果有多个PID,则全部显示

#! /bin/bash read -p "请输入要查询的进程名:" NAME N=`ps -aux | grep $NAME | grep -v grep | wc -l` ##统计进程总数 if [ $N -le 0 ];then
echo "该进程名没有运行!"
fi
i=1
while [ $N -gt 0 ]
do
echo -e "\e[32m***************************************************************\e[0m"
echo "进程PID: $(ps -aux | grep $NAME | grep -v grep | awk 'NR=='$i'{print $0}'| awk '{print $2}')"
echo "进程命令:$(ps -aux | grep $NAME | grep -v grep | awk 'NR=='$i'{print $0}'| awk '{for (j=11;j<=NF;j++) printf("%s ",$j)}')"
echo "进程所属用户: $(ps -aux | grep $NAME | grep -v grep | awk 'NR=='$i'{print $0}'| awk '{print $1}')"
echo "CPU占用率:$(ps -aux | grep $NAME | grep -v grep | awk 'NR=='$i'{print $0}'| awk '{print $3}')%"
echo "内存占用率:$(ps -aux | grep $NAME | grep -v grep | awk 'NR=='$i'{print $0}'| awk '{print $4}')%"
echo "进程开始运行的时间:$(ps -aux | grep $NAME | grep -v grep | awk 'NR=='$i'{print $0}'| awk '{print $9}')"
echo "进程运行的时间:$(ps -aux | grep $NAME | grep -v grep | awk 'NR=='$i'{print $0}'| awk '{print $10}')"
echo "进程状态:$(ps -aux | grep $NAME | grep -v grep | awk 'NR=='$i'{print $0}'| awk '{print $8}')"
echo "进程虚拟内存:$(ps -aux | grep $NAME | grep -v grep | awk 'NR=='$i'{print $0}'| awk '{print $5}')"
echo "进程共享内存:$(ps -aux | grep $NAME | grep -v grep | awk 'NR=='$i'{print $0}'| awk '{print $6}')"
echo -e "\e[32m***************************************************************\e[0m"
let N-- i++
done

根据用户名查看该用户的相关信息
#! /bin/bash
read -p "请输入要查询的用户名:" name
echo "------------------------------"
n=`cat /etc/passwd | awk -F: '$1~/^'${name}'$/{print}' | wc -l`
if [ $n -eq 0 ];then
echo -e "\e[31m该用户不存在!\e[0m"
echo "------------------------------"
else
echo "该用户的用户名:${name}"
echo "该用户的UID:$(cat /etc/passwd | awk -F: '$1~/^'${name}'$/{print}'|awk -F: '{print $3}')"
echo "该用户的组为:$(id ${name} | awk {'print $3'})"
echo "该用户的GID为:$(cat /etc/passwd | awk -F: '$1~/^'${name}'$/{print}'|awk -F: '{print $4}')"
echo "该用户的家目录为:$(cat /etc/passwd | awk -F: '$1~/^'${name}'$/{print}'|awk -F: '{print $6}')"
Login=$(cat /etc/passwd | awk -F: '$1~/^'${name}'$/{print}'|awk -F: '{print $7}')
if [ ${Login} == "/bin/bash" ];then
echo -e "\e[32m该用户有登录系统的权限\e[0m"
echo "------------------------------"
elif [ ${Login} == "/sbin/nologin" ];then
echo -e "\e[31m该用户没有登录系统的权限!\e[0m"
echo "------------------------------"
fi
fi
查看 tcp 的连接状态

#! /bin/bash #统计不同状态 tcp 连接(除了 LISTEN )
all_status_tcp=$(netstat -nt | awk 'NR>2 {print $6}' | sort | uniq -c) #打印各状态 tcp 连接以及连接数
all_tcp=$(netstat -na | awk '/^tcp/ {++S[$NF]};END {for(a in S) print a, S[a]}') #统计有哪些 IP 地址连接到了本地 80 端口(ipv4)
connect_80_ip=$(netstat -ant| grep -v 'tcp6' | awk '/:80/{split($5,ip,":");++S[ip[1]]}END{for (a in S) print S[a],a}' |sort -n) #输出前十个连接到了本地 80 端口的 IP 地址(ipv4)
top10_connect_80_ip=$(netstat -ant| grep -v 'tcp6' | awk '/:80/{split($5,ip,":");++S[ip[1]]}END{for (a in S) print S[a],a}' |sort -rn|head -n 10) echo -e "\e[31m不同状态(除了LISTEN) tcp 连接及连接数为:\e[0m\n${all_status_tcp}"
echo -e "\e[31m各个状态 tcp 连接以及连接数为:\e[0m\n${all_tcp}"
echo -e "\e[31m连接到本地80端口的 IP 地址及连接数为:\e[0m\n${connect_80_ip}"
echo -e "\e[31m前十个连接到本地80端口的 IP 地址及连接数为:\e[0m\n${top10_connect_80_ip}"
PS:下面例子里我检测的是 22 端口

显示系统性能

#!/bin/bash #物理内存使用量
mem_used=$(free -m | grep Mem | awk '{print$3}') #物理内存总量
mem_total=$(free -m | grep Mem | awk '{print$2}') #cpu核数
cpu_num=$(lscpu | grep 'CPU(s)' | awk 'NR==1 {print$2}') #平均负载
load_average=$(uptime | awk -F : '{print$5}') #用户态的CPU使用率
cpu_us=$(top -d 1 -n 1 | grep Cpu | awk -F',' '{print $1}' | awk '{print $(NF-1)}') #内核态的CPU使用率
cpu_sys=$(top -d 1 -n 1 | grep Cpu | awk -F',' '{print $2}' | awk '{print $(NF-1)}') #等待I/O的CPU使用率
cpu_wa=$(top -d 1 -n 1 | grep Cpu | awk -F',' '{print $5}' | awk '{print $(NF-1)}') #处理硬中断的CPU使用率
cpu_hi=$(top -d 1 -n 1 | grep Cpu | awk -F',' '{print $6}' | awk '{print $(NF-1)}') #处理软中断的CPU使用率
cpu_si=$(top -d 1 -n 1 | grep Cpu | awk -F',' '{print $7}'| awk '{print $(NF-1)}') echo -e "物理内存使用量(M)为:${mem_used}"
echo -e "物理内存总量(M)为:${mem_total}"
echo -e "cpu核数为:${cpu_num}"
echo -e "平均负载为:${load_average}"
echo -e "用户态的CPU使用率为:${cpu_us}"
echo -e "内核态的CPU使用率为:${cpu_sys}"
echo -e "等待I/O的CPU使用率为:${cpu_wa}"
echo -e "处理硬中断的CPU使用率为:${cpu_hi}"
echo -e "处理软中断的CPU使用率为:${cpu_si}"

文件不安全的权限检查

#查找系统中任何用户都有写权限的文件(目录),并存放到/tmp/anynone_write.txt
find / -type f -perm -2 -o -perm -20 -exec echo {} >> /tmp/anynone_write.txt \; #查找系统中所有含 's' 位权限的程序,并存放到/tmp/s_permission.txt
find / -type f -perm -4000 -o -perm -2000 -print -exec echo {} >> /tmp/s_permission.txt \; #查找系统中没有属主以及属组的文件,并存放到/tmp/none.txt
find / -nouser -o -nogroup -exec echo {} >> /tmp/none.txt \;
感谢阅读,喜欢作者就动动小手[一键三连],这是我写作最大的动力
分享几个常用的运维 shell 脚本的更多相关文章
- 运维shell脚本函数语法
在fun.sh 文件里,使用函数来封装脚本内容 usege() { echo "hello world" echo "脚本怎么使用函数......"}usege ...
- 关于总结一些CentOS7常用的运维命令
Centos7日常需要用的运维命令 1.删除0字节文件 find-type f -size 0 -exec rm -rf {} \ 2.查看进程 按内存从大到小排列 ps -e -o " ...
- 自动化运维Shell入门
运维shell 作用 项目部署 项目监控 什么是shell shell是一个程序,/bin/bash/,是一个命令解释器所有linux命令都由他来执行,打开终端就进入了 shell的交互式命令 运行方 ...
- CentOS7 系统服务器初始化配置、安全加固、内核升级优化常用软件安装的Shell脚本分享
转载自:https://www.bilibili.com/read/cv13875630?spm_id_from=333.999.0.0 描述: 适用于企业内部 CentOS7 系列操作服务器初始化. ...
- Ubuntu 系统服务器初始化配置、安全加固、内核优化和常用软件安装的Shell脚本分享
转载自:https://www.bilibili.com/read/cv13875402?spm_id_from=333.999.0.0 描述: 适用于企业内部 Ubuntu 操作服务器初始化.系统安 ...
- 运维shell全部语法进阶
Linux运维之shell脚本进阶篇 一.if语句的使用 1)语法规则 1 2 3 4 5 6 7 8 9 if [条件] then 指令 fi 或 if [条件];then ...
- 常用的主机监控Shell脚本
最近时不时有朋友问我关于服务器监控方面的问题,问常用的服务器监控除了用开源软件,比如:cacti,nagios监控外是否可以自己写shell脚本呢?根据自己的需求写出的shell脚本更能满足需求,更能 ...
- 干货分享:IBM StorwizeV7000部署与运维
http://storage.it168.com/a2014/1211/1689/000001689526_3.shtml
- 常用Linux运维命令
1.查看TCP连接状态 netstat -nat |awk '{print $6}'|sort|uniq -c|sort -rn netstat -n | awk '/^tcp/ {++S[$NF]} ...
- 几个常用ORACLE运维监控的SQL语句
1.消耗CPUSELECT a.CPU_TIME, --CPU时间 百万分之一(微秒) a.OPTIMIZER_MODE,--优化方式 a.EXEC ...
随机推荐
- 生命体征监测VSM
参考来源:ADI官网技术文章.知乎(hxl695822705.深圳加1健康科技 ) 缩写 全称 翻译 VSM Vital Signs Monitor 生命体征监测 ECG ElectroCardioG ...
- .net 温故知新【15】:Asp.Net Core WebAPI 配置
关于Asp.Net Core中的配置实际之前我已经整理过.net 中以json方式进行配置的介绍(.net 温故知新:[8].NET 中的配置从xml转向json),当时我们说Asp.Net Core ...
- 7-8次PTA和期末成绩总结
(1)前言:总结之前所涉及到的知识点.题量.难度等情况 课程成绩统计程序-3在第二次的基础上修改了计算总成绩的方式(修改类结构,将成绩类的继承关系改为组合关系,成绩信息由课程成绩类和分项成绩类组成,课 ...
- Miller_Rabin 学习笔记
费马小定理:对于任意一个质数满足:\(a^{p-1}\equiv1\pmod p\) 二次探测:对于任意一个奇质数满足:\(x^2\equiv1\pmod p\) 的解为 \(x=1\) 或 \(x= ...
- 一文读懂遗传算法(附python)
几天前,我着手解决一个实际问题--大型超市销售问题.在使用了几个简单模型做了一些特征工程之后,我在排行榜上名列第 219 名. 虽然结果不错,但是我还是想做得更好.于是,我开始研究可以提高分数的优化方 ...
- libgdx摄像头的移动
要知道,做一个游戏,摄像头是必不可少的.接下来,我将讲解libgdx里面摄像头的移动 2d摄像头OrthographicCamera也叫做正交相机 结果展示: 按上下左右是可以移动的 Orthogra ...
- Codeforces Round 911 (Div. 2) 总结
第一次在赛场上敲莫反,还好最后调出来了! A 题意:你在Minecraft里挖了一些一格的坑(同一列),问你用几桶水可以填满它(可以造无限水). 解法:找大于 \(2\) 的连续段,有的话就是两桶,没 ...
- Python笔记二之多线程
本文首发于公众号:Hunter后端 原文链接:Python笔记二之多线程 这一篇笔记介绍一下在 Python 中使用多线程. 注意:以下的操作都是在 Python 3.8 版本中试验,不同版本可能有不 ...
- 云MSP技本功|基于OGG 实现Oracle到Kafka增量数据实时同步
简介: 在大数据时代,存在大量基于数据的业务.数据需要在不同的系统之间流动.整合.通常,核心业务系统的数据存在OLTP数据库系统中,其它业务系统需要获取OLTP系统中的数据.传统的数仓通过批量数据同步 ...
- 首次引入大模型!Bert-vits2-Extra中文特化版40秒素材复刻巫师3叶奈法
Bert-vits2项目又更新了,更新了一个新的分支:中文特化,所谓中文特化,即针对中文音色的特殊优化版本,纯中文底模效果百尺竿头更进一步,同时首次引入了大模型,使用国产IDEA-CCNL/Erlan ...