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自…...
Linux应用开发之网络套接字编程(实例篇)
服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...
RocketMQ延迟消息机制
两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数,对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后…...
C++:std::is_convertible
C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...
无法与IP建立连接,未能下载VSCode服务器
如题,在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈,发现是VSCode版本自动更新惹的祸!!! 在VSCode的帮助->关于这里发现前几天VSCode自动更新了,我的版本号变成了1.100.3 才导致了远程连接出…...
Mac软件卸载指南,简单易懂!
刚和Adobe分手,它却总在Library里给你写"回忆录"?卸载的Final Cut Pro像电子幽灵般阴魂不散?总是会有残留文件,别慌!这份Mac软件卸载指南,将用最硬核的方式教你"数字分手术"࿰…...
Spring数据访问模块设计
前面我们已经完成了IoC和web模块的设计,聪明的码友立马就知道了,该到数据访问模块了,要不就这俩玩个6啊,查库势在必行,至此,它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据(数据库、No…...
OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 在 GPU 上对图像执行 均值漂移滤波(Mean Shift Filtering),用于图像分割或平滑处理。 该函数将输入图像中的…...
Docker 本地安装 mysql 数据库
Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker ;并安装。 基础操作不再赘述。 打开 macOS 终端,开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...
逻辑回归暴力训练预测金融欺诈
简述 「使用逻辑回归暴力预测金融欺诈,并不断增加特征维度持续测试」的做法,体现了一种逐步建模与迭代验证的实验思路,在金融欺诈检测中非常有价值,本文作为一篇回顾性记录了早年间公司给某行做反欺诈预测用到的技术和思路。百度…...
如何应对敏捷转型中的团队阻力
应对敏捷转型中的团队阻力需要明确沟通敏捷转型目的、提升团队参与感、提供充分的培训与支持、逐步推进敏捷实践、建立清晰的奖励和反馈机制。其中,明确沟通敏捷转型目的尤为关键,团队成员只有清晰理解转型背后的原因和利益,才能降低对变化的…...
