Shell脚本练习——系统应用相关
显示系统信息
[root@wenzi data]#cat systemInfo.sh
#/bin/bash
RED="\E[1;31m"
GREEN="\E[1;32m"
END="\E[0m"
echo -e "$GREEN----------------------Host systeminfo--------------------$END"
echo -e "HOSTNAME: $RED`hostname`$END"
echo -e "IPADDR: $RED`ifconfig ens160 | grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}' | head -n 1`$END"
echo -e "OSVERSION: $RED`cat /etc/redhat-release`$END"
echo -e "KERNEL: $RED`uname -r`$END"
echo -e "CPU: $RED`lscpu | grep 'Model name'| tr -s ' ' | cut -d : -f 2`$END"
echo -e "MEMORY: $RED`free -h | grep 'Mem' | tr -s ' ' : | cut -d ':' -f 2`$END"
echo -e "DISK: $RED`lsblk | grep '^nv' | tr -s ' ' | cut -d " " -f 4`$END"
echo -e "$GREEN---------------------------------------------------------$END"
说明:
grep -E 开启拓展正则表达式,-o 仅显示匹配到的数据
([0-9]{1,3}\.){3}[0-9]{1,3}中[0-9]{1,3}表示1到3位数字,{3}表示重复3次,所以整体就是匹配IP地址
tr -s 对指定的字符串去重复
cut 使用对象是一行信息,-d 指定分割字符,-f 依据-d的分割字符将一段信息分为数段,用-f取出第几段
^nv 指以nv开头
批量创建用户并设置随机密码
[root@wenzi data]#cat batchCreateUser.sh
#!/bin/bash
userNum=$1for ((i=1;i<=${userNum};i+=1))
douseradd wenzi$ipwd=`cat /dev/urandom | tr -d -c '[:alnum:]' | head -c 12`echo $pwd | passwd --stdin wenzi$i &> /dev/nullecho wenzi$i:$pwd >> /data/user.logecho "wenzi$i is created"
done
[root@wenzi data]#bash batchCreateUser.sh 5
wenzi1 is created
wenzi2 is created
wenzi3 is created
wenzi4 is created
wenzi5 is created
[root@wenzi data]#cat /data/user.log
wenzi1:aBfx6xKXXWXd
wenzi2:zeiXcSdeECga
wenzi3:XXWhxovUy9o1
wenzi4:mk6wF4gqQxbP
wenzi5:YvcHWo6UYQcP#删除生成的用户
[root@wenzi data]#for i in {1..5};do userdel -r wenzi$i;done
说明:
/dev/urandom是随机数生成器
[:alnum:] 代表英文大小写字符及数字,即 0-9,A-Z,a-z
tr的-d选项:删除信息中指定内容;-c选项:使用指定字符串的补集替换该字符串;所以tr删除的是非'[:alnum:]'的内容
执行远程主机的脚本
#主机192.168.29.142
[root@wenzi ~]#yum -y install httpd
[root@wenzi ~]#vim /var/www/html/hello.sh
#!/bin/bash
echo "hello world"
[root@wenzi ~]#systemctl start httpd#主机192.168.29.141
[root@wenzi data]#curl http://192.168.29.142/hello.sh | bash% Total % Received % Xferd Average Speed Time Time Time CurrentDload Upload Total Spent Left Speed
100 31 100 31 0 0 31000 0 --:--:-- --:--:-- --:--:-- 31000
hello world
[root@wenzi data]#curl -s http://192.168.29.142/hello.sh | bash
hello world
rm命令的安全实现
[root@wenzi data]#vim rm.sh
#!/bin/bash
warning_color="echo -e \E[1;31m"
end="\E[0m"
dir=/tmp/`date +%F%T`
mkdir $dir
mv $* $dir
${warning_color}Move $* to $dir $end
[root@wenzi data]#chmod 777 /data/rm.sh
[root@wenzi data]#alias rm='/data/rm.sh'
[root@wenzi data]#touch {1..3}.txt
[root@wenzi data]#ll
total 4
-rw-r--r-- 1 root root 0 Jul 22 10:43 1.txt
-rw-r--r-- 1 root root 0 Jul 22 10:43 2.txt
-rw-r--r-- 1 root root 0 Jul 22 10:43 3.txt
-rw-r--r-- 1 root root 138 Jul 22 10:42 rm.sh
[root@wenzi data]#rm *.txt
Move 1.txt 2.txt 3.txt to /tmp/2023-07-2210:45:20
说明:
$*:位置变量,代表除了$0(脚本本身名字)以外,所有的参数,如上即 “opt1 opt2 opt3 opt4“,每个变量之间用空格分割,共用一个双引号
检查软件包是否安装
[root@wenzi wenzi]# cat test.sh
#!/bin/bash
pkg=$1
rpm -q $1 > /dev/null
if [ $? -eq 0 ];thenecho "$1 is already installed."
elseecho "$1 is not installed!"
fi[root@wenzi wenzi]# ./test.sh httpd
httpd is already installed.
[root@wenzi wenzi]# ./test.sh nginx
nginx is not installed!
检查服务状态
[root@wenzi wenzi]# cat test.sh
#!/bin/bash
if pgrep $1 > /dev/null;thenecho "$1 is running"
elseecho "$1 is not running"
fi[root@wenzi wenzi]# ./test.sh httpd
httpd is running
[root@wenzi wenzi]# ./test.sh nginx
nginx is not running
监控CPU利用率
使用vmstat命令分析
具体含义见 vmstat_笔落_惊风雨的博客-CSDN博客
[root@wenzi wenzi]# cat test.sh
#!/bin/bash
dateTime=`date +'%F %T'`
ip=`ifconfig ens160 | awk 'NR==2{print $2}'`
mail="example@mail.com"
if ! which vmstat &> /dev/null;thenecho "vmstat command not found,Please install procps package"exit 1
fi
cpuUS=`vmstat | awk 'NR==3{print $13}'`
cpuSY=`vmstat | awk 'NR==3{print $14}'`
cpuID=`vmstat | awk 'NR==3{print $15}'`
cpuWA=`vmstat | awk 'NR==3{print $16}'`
allUSE=$[$cpuUS+$cpuSY]
#当CPU利用率超过50%时发送邮件
if [ $allUSE -gt 50 ];thenecho -e "Date: $dateTimeHost: $ipProblem: CPU utilization $allUSE" mail -s "CPU Monitor" $mail
fi
说明:
查询vmstat来自哪个软件包
[root@wenzi wenzi]# rpm -qf `which vmstat`
procps-ng-3.3.15-6.el8.x86_64
awk的内置变量NR表示awk处理的是第几行数据
使用管道符发送邮件 echo "邮件内容" | mail -s "邮件标题" 接收方
监控内存利用率
[root@wenzi wenzi]# free -mtotal used free shared buff/cache available
Mem: 791 181 274 5 335 477
Swap: 2047 0 2047
[root@wenzi wenzi]# cat test.sh
#!/bin/bash
total=`free -m | awk '/Mem/ {print $2}'`
used=`free -m | awk '/Mem/ {print $2-$4-$6}'`
#获取相除的值
memUtilization=$(printf "%4.2f" `echo "scale=2;$used/$total" | bc`)
#获取没有百分号的百分比
memUti=$(printf "%2.0f" `echo "$memUtilization*100" | bc`)
if [ $memUti -gt 0 ];thenecho "Memory utilization is $memUti%"
fi
说明:
内存利用率计算见 free_笔落_惊风雨的博客-CSDN博客
awk '/Mem/ {print $2}' 表示直接定位到Mem所在行,然后取第二个字符。 /Mem/ 是awk的模式匹配之一,表示匹配包含Mem的行,格式 /正则表达式/ 表示使用通配符的拓展集。
printf语法:printf ‘打印格式’ 实际内容。printf "%4.2f" 表示长度为4个字符的具有小数点的字段,其中小数位占2个字符宽度,小数点占1个字符宽度。
echo "scale=2;$used/$total" | bc 表示计算$used除以$total,保留两位小数后的值。bc计算时若值小于1,显示时会省去个位的0。
为了保留个位的0,所以使用printf再次处理。
printf 和 bc 结合使用,写法 $(printf "%4.2f" `echo "scale=2;$used/$total" | bc`)
监控磁盘利用率
[root@wenzi wenzi]# cat test.sh
#!/bin/bash
diskList=`df -h | grep "^/dev/" | sort`
diskListLineNums=`echo $diskList | wc -l`
for i in $diskListLineNums;dodiskUsed=`echo $diskList | awk '{print $5}' | awk -F '%' '{print $1}'`#当使用率达到50告警if [ $diskUsed -gt 50 ];thendev=`echo $diskList | awk '{print $1}'`devSize=`echo $diskList | awk '{print $2}'`echo "$dev is used $diskUsed% , Warning!"fi
done
检查网站可用性
[root@wenzi wenzi]# cat test.sh
#!/bin/bash
check_url() {httpCode=`curl -o /dev/null --connect-timeout 3 -s -w "%{http_code}" $1`if [ $httpCode -ne 200 ];thenecho "Warning: $1 is failure!"fi
}
check_url $1
说明:
curl中 -o 表示将下载数据写入指定名称的文件中;--connect-timeout 表示最大请求时间;-w 表示在请求结束后打印本次请求的统计数据到标准输出,curl提供很多内置变量,使用 %{变量} 调用,完整的内置变量查看 man curl。
相关文章:

Shell脚本练习——系统应用相关
显示系统信息 [rootwenzi data]#cat systemInfo.sh #/bin/bash RED"\E[1;31m" GREEN"\E[1;32m" END"\E[0m" echo -e "$GREEN----------------------Host systeminfo--------------------$END" echo -e "HOSTNAME: $REDho…...

同创永益入选首批“金融数字韧性与混沌工程实践试点机构”
8月16日下午,由北京国家金融科技认证中心、北京国家金融标准化研究院联合主办的“传递信任 服务发展”金融科技标准认证生态大会在太原成功举办。中国金融电子化集团有限公司党委书记、董事长周逢民,中国科学院院士冯登国,中国工商银行首席技…...

Hive 表注释乱码解决
文章目录 出现原因MySQL 字符集修改调整元数据库字符集测试 出现原因 一般 Hive 的元数据信息都存储在 MySQL 中,但 MySQL 数据库中的 character_set_server 和 character_set_database 参数,默认都为 latin1 字符集,这两个参数决定了服务器…...

【搭建私人图床】使用LightPicture开源搭建图片管理系统并远程访问
文章目录 1.前言2. Lightpicture网站搭建2.1. Lightpicture下载和安装2.2. Lightpicture网页测试2.3.cpolar的安装和注册 3.本地网页发布3.1.Cpolar云端设置3.2.Cpolar本地设置 4.公网访问测试5.结语 1.前言 现在的手机越来越先进,功能也越来越多,而手机…...

Ubuntu入门04——目录与文件
目录 1.显示当前工作目录 2.更改目录 3.创建工作目录 4.删除工作目录 5.移动文件或者文件夹 6.文件夹and文件查看命令 7. 回到根目录,回到上一级 8.删除工作目录 9.查看目录和文件 10.以树状图列出目录内容 11.文件查找 12.在数据库中查找文件或目录 1…...
深度学习中有哪些超参数,都有什么作用
深度学习中有许多超参数需要设置,它们会对模型的性能和训练过程产生重要影响。以下是一些常见的超参数及其作用: 学习率(Learning Rate):控制参数更新的步长。较小的学习率可以使模型收敛更稳定,但可能需要…...

centOS下载与安装
1 下载centOS镜像 The CentOS Project 选择阿里云的镜像 2 下载虚拟机 Vmware workstation VMware - Delivering a Digital Foundation For Businesses 1 下载安装 centOs是一个操作系统,操作硬件的。所以需要有机器,可以使用虚拟机。 2 创建新的虚…...
uniapp中mixins的使用
mixins 是一个 js 对象,它可以包含我们组件中JS部分的任意功能选项,如:data、components、methods、created、computed 等等。我们只要将公用的功能以对象的方式传入 mixins 选项中,当组件使用 mixins 对象时所有 mixins 对象都将…...

【JAVA基础——JAVA虚拟机JVM】
JVM 文章目录 JVM一.JVM结构1.1.JVM包含两个子系统和两个组件1.2.运行时数据区1.2.1.简介1.2.2.程序计数器1.2.3.虚拟机栈1.2.4.堆1.2.5.本地方法栈1.2.6.方法区(永久代实现)java8-1.2.7.元空间(Metaspace)1.2.8.JVM字节码执行引擎1.2.9.直接内存(Direct Memory)1.2.10.垃圾收集…...

RTSP/Onvif视频服务器EasyNVR安防视频平台服务器频繁重启的问题解决方案
EasyNVR平台优秀的视频能力在于通过RTSP/ONVIF协议,将前端接入设备的音视频资源进行采集,并转码成适合全平台、全终端分发的视频流格式,包括RTSP、RTMP、FLV、HLS、WebRTC等格式。平台可拓展性强、部署轻快,在安防监控领域有着广泛…...

SpringBoot初级开发--服务请求(GET/POST)所有参数的记录管理(8)
服务端在定位错误的时候,有时候要还原现场,这就要把当时的所有入参参数都能记录下来,GET还好说,基本NGINX都会记录。但是POST的请求参数基本不会被记录,这就需要我们通过一些小技巧来记录这些参数,放入日志…...

快速掌握STM32工程创建
STM32 工程创建-- 使用Keil uVision5 软件 晓理紫 1 准备库函数库 STM32F10x_StdPeriph_Lib_V3.5.0 VX 搜索“晓丽紫”关注回复STM32F10x即可下载 2、创建一个目录用来存放工程 STM32Study STM32Study/study1 存放本次工程目录 3、打开Keil uVision5 创建工程 4、选择型号(根据…...

如何利用开源工具搭建AI大模型底座
开源社区是技术发展的一个重要部分,对于AI大模型来说,也是如此。 我们在这篇文章中来尝试通过开源工具来构建AI大模型的底座,涉及到的技术包括: LangchainOpenAIFlowiseLocalAILlama 使用Langchain构建第一个对话应用 如果你使…...

算法笔记:二叉树
1 基本二叉树 二叉树是一种树形数据结构,其中每个节点最多有两个子节点,通常称为“左子节点”和“右子节点”。 二叉树的根是唯一没有父节点的节点,而所有其他节点都有一个父节点和零个或两个子节点。 1.1 基础术语 节点(Node&…...

1. 安装Zookeeper
1.下载 点击下载Zookeeper 单机版安装 安装Zookeeper前需要先安装jdk上传安装包rz解压安装包:tar -zxvf apache-zookeeper-3.6.0-bin.tar.gz -C /opt/app/zookeeper zookeeper目录结构:a. bin: 放置运行脚本和工具脚本b. conf: zookeeper 默认读取配置的目录,里面会有…...
warning: ignoring unsupported character ‘问题修复
rivers/net/wireless/aic8800/Kconfig:1⚠️ ignoring unsupported character 问题修复: 有一次编译内核,看到有下面的warning: jianjian:~/share/kylin/rk-kernel-5.10$ make menuconfigUPD scripts/kconfig/mconf-cfgHOSTCC scripts/…...

【Ant Design】Form.Item创建自定义表单
一、概述 Antd是一个非常强大的UI组件库,里面的Form表单组件也基本能满足我们大多数场景。但是也有需要自定义表单的场景。 Vue2里我们使用v-model,结合子组件的model属性,来实现自定义组件的双向绑定。 Vue3里我们使用v-model,…...

Vision Transformer(VIT 网络架构)
论文下载链接:https://arxiv.org/abs/2010.11929 文章目录 引言1. VIT与传统CNN的比较2. 为什么需要Transformer在图像任务中? 1. 深入Transformer1.1 Transformer的起源:NLP领域的突破1.2 Transformer的基本组成1.2.1 自注意机制 (Self-Atte…...
数学建模--蒙特卡洛模型的Python实现
目录 1.算法思想简介 2.算法应用1:问题一阐述 3.算法应用1:问题一解决 4.算法应用2:问题二阐述 5.算法应用2:问题二解决 1.算法思想简介 #蒙特卡洛算法思想 """ 蒙特卡洛方法的理论其实很类似于概率论中一个比较重…...

MySQL访问和配置
目录 1.使用MySQL自带的客户端工具访问 2.使用DOS访问(命令行窗口WinR → cmd) 3.连接工具(SQLyog或其它) MySQL从小白到总裁完整教程目录:https://blog.csdn.net/weixin_67859959/article/details/129334507?spm1001.2014.3001.5502 1.使用MySQL自…...
conda相比python好处
Conda 作为 Python 的环境和包管理工具,相比原生 Python 生态(如 pip 虚拟环境)有许多独特优势,尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处: 一、一站式环境管理:…...

遍历 Map 类型集合的方法汇总
1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...
线程同步:确保多线程程序的安全与高效!
全文目录: 开篇语前序前言第一部分:线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分:synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分ÿ…...

Mac软件卸载指南,简单易懂!
刚和Adobe分手,它却总在Library里给你写"回忆录"?卸载的Final Cut Pro像电子幽灵般阴魂不散?总是会有残留文件,别慌!这份Mac软件卸载指南,将用最硬核的方式教你"数字分手术"࿰…...

【Java_EE】Spring MVC
目录 Spring Web MVC 编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 编辑参数重命名 RequestParam 编辑编辑传递集合 RequestParam 传递JSON数据 编辑RequestBody …...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)
骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术,它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton):由层级结构的骨头组成,类似于人体骨骼蒙皮 (Mesh Skinning):将模型网格顶点绑定到骨骼上,使骨骼移动…...

什么是Ansible Jinja2
理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具,可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板,允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板,并通…...

sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!
简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求,并检查收到的响应。它以以下模式之一…...

MFC 抛体运动模拟:常见问题解决与界面美化
在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...

基于IDIG-GAN的小样本电机轴承故障诊断
目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) 梯度归一化(Gradient Normalization) (2) 判别器梯度间隙正则化(Discriminator Gradient Gap Regularization) (3) 自注意力机制(Self-Attention) 3. 完整损失函数 二…...