当前位置: 首页 > news >正文

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日下午&#xff0c;由北京国家金融科技认证中心、北京国家金融标准化研究院联合主办的“传递信任 服务发展”金融科技标准认证生态大会在太原成功举办。中国金融电子化集团有限公司党委书记、董事长周逢民&#xff0c;中国科学院院士冯登国&#xff0c;中国工商银行首席技…...

Hive 表注释乱码解决

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

【搭建私人图床】使用LightPicture开源搭建图片管理系统并远程访问

文章目录 1.前言2. Lightpicture网站搭建2.1. Lightpicture下载和安装2.2. Lightpicture网页测试2.3.cpolar的安装和注册 3.本地网页发布3.1.Cpolar云端设置3.2.Cpolar本地设置 4.公网访问测试5.结语 1.前言 现在的手机越来越先进&#xff0c;功能也越来越多&#xff0c;而手机…...

Ubuntu入门04——目录与文件

目录 1.显示当前工作目录 2.更改目录 3.创建工作目录 4.删除工作目录 5.移动文件或者文件夹 6.文件夹and文件查看命令 7. 回到根目录&#xff0c;回到上一级 8.删除工作目录 9.查看目录和文件 10.以树状图列出目录内容 11.文件查找 12.在数据库中查找文件或目录 1…...

深度学习中有哪些超参数,都有什么作用

深度学习中有许多超参数需要设置&#xff0c;它们会对模型的性能和训练过程产生重要影响。以下是一些常见的超参数及其作用&#xff1a; 学习率&#xff08;Learning Rate&#xff09;&#xff1a;控制参数更新的步长。较小的学习率可以使模型收敛更稳定&#xff0c;但可能需要…...

centOS下载与安装

1 下载centOS镜像 The CentOS Project 选择阿里云的镜像 2 下载虚拟机 Vmware workstation VMware - Delivering a Digital Foundation For Businesses 1 下载安装 centOs是一个操作系统&#xff0c;操作硬件的。所以需要有机器&#xff0c;可以使用虚拟机。 2 创建新的虚…...

uniapp中mixins的使用

mixins 是一个 js 对象&#xff0c;它可以包含我们组件中JS部分的任意功能选项&#xff0c;如&#xff1a;data、components、methods、created、computed 等等。我们只要将公用的功能以对象的方式传入 mixins 选项中&#xff0c;当组件使用 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协议&#xff0c;将前端接入设备的音视频资源进行采集&#xff0c;并转码成适合全平台、全终端分发的视频流格式&#xff0c;包括RTSP、RTMP、FLV、HLS、WebRTC等格式。平台可拓展性强、部署轻快&#xff0c;在安防监控领域有着广泛…...

SpringBoot初级开发--服务请求(GET/POST)所有参数的记录管理(8)

服务端在定位错误的时候&#xff0c;有时候要还原现场&#xff0c;这就要把当时的所有入参参数都能记录下来&#xff0c;GET还好说&#xff0c;基本NGINX都会记录。但是POST的请求参数基本不会被记录&#xff0c;这就需要我们通过一些小技巧来记录这些参数&#xff0c;放入日志…...

快速掌握STM32工程创建

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

如何利用开源工具搭建AI大模型底座

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

算法笔记:二叉树

1 基本二叉树 二叉树是一种树形数据结构&#xff0c;其中每个节点最多有两个子节点&#xff0c;通常称为“左子节点”和“右子节点”。 二叉树的根是唯一没有父节点的节点&#xff0c;而所有其他节点都有一个父节点和零个或两个子节点。 1.1 基础术语 节点&#xff08;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 问题修复&#xff1a; 有一次编译内核&#xff0c;看到有下面的warning&#xff1a; jianjian:~/share/kylin/rk-kernel-5.10$ make menuconfigUPD scripts/kconfig/mconf-cfgHOSTCC scripts/…...

【Ant Design】Form.Item创建自定义表单

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

Vision Transformer(VIT 网络架构)

论文下载链接&#xff1a;https://arxiv.org/abs/2010.11929 文章目录 引言1. VIT与传统CNN的比较2. 为什么需要Transformer在图像任务中&#xff1f; 1. 深入Transformer1.1 Transformer的起源&#xff1a;NLP领域的突破1.2 Transformer的基本组成1.2.1 自注意机制 (Self-Atte…...

数学建模--蒙特卡洛模型的Python实现

目录 1.算法思想简介 2.算法应用1&#xff1a;问题一阐述 3.算法应用1&#xff1a;问题一解决 4.算法应用2&#xff1a;问题二阐述 5.算法应用2&#xff1a;问题二解决 1.算法思想简介 #蒙特卡洛算法思想 """ 蒙特卡洛方法的理论其实很类似于概率论中一个比较重…...

MySQL访问和配置

目录 1.使用MySQL自带的客户端工具访问 2.使用DOS访问(命令行窗口WinR → cmd) 3.连接工具&#xff08;SQLyog或其它&#xff09; MySQL从小白到总裁完整教程目录:https://blog.csdn.net/weixin_67859959/article/details/129334507?spm1001.2014.3001.5502 1.使用MySQL自…...

避坑指南:为什么你的mqtt.fx连不上OneNET?Token生成与参数配置的3个关键细节

避坑指南&#xff1a;为什么你的mqtt.fx连不上OneNET&#xff1f;Token生成与参数配置的3个关键细节 当你深夜调试MQTT设备&#xff0c;反复检查代码却依然看到刺眼的"离线"状态时&#xff0c;那种挫败感我深有体会。OneNET作为国内主流物联网平台&#xff0c;其MQTT…...

CANN/asc-devkit LogicalAnds临时空间接口

GetLogicalAndsMaxMinTmpSize 【免费下载链接】asc-devkit 本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言&#xff0c;原生支持C和C标准规范&#xff0c;主要由类库和语言扩展层构成&#xff0c;提供多层级API&#xff0c;满足多维场景算子开发诉求。 项目地址: ht…...

A型流感病毒广谱中和抗体与广谱通用疫苗研究进展

摘要流感作为全球性的公共卫生问题&#xff0c;对人类健康构成严重威胁。接种流感疫苗是预防和控制流感流行的关键手段&#xff0c;但当前通用流感疫苗的研究尚处于初级阶段。本文聚焦于A型流感病毒&#xff0c;综述了广谱中和抗体的研究进展以及其在广谱通用疫苗研发中的潜在应…...

2026年需求管理工具盘点:主流软件对比、测评与选型实用指南

本文盘点 ONES、Tower、Jira、Azure DevOps、Asana、ClickUp、monday.com、Notion、Linear、YouTrack 这 10 款需求管理工具&#xff0c;围绕需求收集、拆解、优先级、追踪闭环和团队协作展开测评&#xff0c;帮助选型人员更快判断哪类工具适合自己的团队。刚做项目经理时&…...

华为鸿蒙与欧拉操作系统:全场景战略下的技术架构与生态构建

1. 从“备胎”到“主干”&#xff1a;华为操作系统的战略突围之路 最近科技圈里关于华为的消息&#xff0c;大家讨论得最多的&#xff0c;除了孟晚舟女士的归国&#xff0c;可能就是华为在软件领域接连放出的几个“大招”了。作为一名在ICT行业摸爬滚打了十几年的老兵&#xff…...

终极指南:如何用Prodigal在3分钟内完成原核生物基因预测

终极指南&#xff1a;如何用Prodigal在3分钟内完成原核生物基因预测 【免费下载链接】Prodigal Prodigal Gene Prediction Software 项目地址: https://gitcode.com/gh_mirrors/pr/Prodigal 还在为复杂的基因预测工具头疼吗&#xff1f;面对海量的微生物基因组数据&…...

M9A:重返未来1999终极解放双手指南 - 智能助手让你的游戏体验更轻松

M9A&#xff1a;重返未来1999终极解放双手指南 - 智能助手让你的游戏体验更轻松 【免费下载链接】M9A 重返未来&#xff1a;1999 小助手 | Assistant For Reverse: 1999 项目地址: https://gitcode.com/gh_mirrors/m9/M9A 你是否曾经为《重返未来&#xff1a;1999》的日…...

树莓派3B上跑通Apriltag识别:老设备配置Python环境(OpenCV+pupil_apriltags)的血泪史与终极方案

树莓派3B上跑通Apriltag识别&#xff1a;老设备配置Python环境&#xff08;OpenCVpupil_apriltags&#xff09;的血泪史与终极方案 当你在二手市场淘到一台树莓派3B&#xff0c;满心欢喜地想用它搭建一个视觉导航机器人时&#xff0c;现实往往会给你当头一棒。这款2016年发布的…...

RV1126B嵌入式音频开发实战:从ALSA驱动到应用播放全解析

1. 项目概述&#xff1a;从一块核心板到声音的诞生 最近在折腾一块基于瑞芯微RV1126B芯片的EASY EAI Nano开发板&#xff0c;目标是让它“开口说话”——实现稳定的音频输出。这听起来像是一个基础功能&#xff0c;但对于嵌入式开发&#xff0c;尤其是涉及多媒体处理的边缘AI设…...

Prodigal原核生物基因预测工具:3天从零到精通的完整指南

Prodigal原核生物基因预测工具&#xff1a;3天从零到精通的完整指南 【免费下载链接】Prodigal Prodigal Gene Prediction Software 项目地址: https://gitcode.com/gh_mirrors/pr/Prodigal 你是否正在为原核生物基因组分析而烦恼&#xff1f;面对海量的DNA序列数据&…...