shell编程:安装部署前常见环境检查
脚本任务
监测主机是否联通正常
检查安装操作系统版本是否和需求一致
检查CPU是否满足规格要求
检查内存是否满足规格要求
检查数据磁盘是否满足规格要求
检查操作系统分区目录大小是否满足需求
检查集群主机时间是否一致
0.配置文件准备及脚本变量初始化
编写config.ini存放主机配置文件
[hosts]
10.0.1.10 node01
10.0.1.20 node02
10.0.1.30 node03[root_password]
000000
编写 env-check.sh 取出ip和 密码
#!/bin/bash
#
if [ ! -e ./config.ini ];thenecho "config.ini is not exist...please check.."EXIT 1
fiHOSTS_IP=`cat config.ini | sed -n '/\[hosts\]/,/\[.*\]/p' | grep -v "\[.*\]" |grep -v ^$ |grep -v ^# |awk '{print $1}'`ROOT_PATH=`cat config.ini | sed -n '/\[root_password\]/,/\[.*\]/p' | grep -v "\[.*\]" |grep -v ^$ |grep -v ^#`
1.监测主机是否联通正常
function check_host_online
{echo "++++++++++++++++监测主机是否联通正常++++++++++++++++"for host in $HOSTS_IP;doping -w 3 $host &> /dev/nullif [ $? -eq 0 ];thenecho "检测主机 $host 连通性通过"elseecho "检测主机 $host 无法连通"ping_faild_hosts="$ping_faild_hosts $host"fidoneif [[ "$ping_faild_hosts" == "" ]];thenecho "1.使用ping对主机连通性检查,全部通过"elseecho "1.使用ping对主机连通性检查,未全部通过:$ping_faild_hosts"exit 1fi
}
循环遍历主机列表:通过for循环遍历HOSTS_IP变量中包含的所有主机IP地址。
执行ping命令:对每个主机执行ping命令,-w 3参数指定ping操作持续3秒,&> /dev/null将标准输出和标准错误都重定向到/dev/null,即不显示ping命令的输出。
检查ping命令的返回值:使用$?获取上一个命令(即ping命令)的退出状态。如果返回值为0(-eq 0),表示ping命令成功,即主机连通性通过。
打印连通性结果:如果主机连通性通过,则打印"检测主机 $host 连通性通过";如果不通,则打印"检测主机 $host 无法连通",并将该主机IP添加到ping_faild_hosts变量中,用于记录失败的主机。
检查是否有主机未通过连通性检查:循环结束后,使用if语句检查ping_faild_hosts变量是否为空。如果为空,表示所有主机的连通性检查都通过了,打印"1.使用ping对主机连通性检查,全部通过"。如果不为空,表示有主机未通过连通性检查,打印"1.使用ping对主机连通性检查,未全部通过:$ping_faild_hosts",并退出脚本,返回状态为1。
退出脚本:如果检测到有主机连通性失败,脚本将通过exit 1命令退出,并返回状态码1,表示脚本执行失败。
2.检查安装操作系统版本是否和需求一致
先编写检查主机是否能登录
function verify_password
{if [ $# -lt 2 ];thenecho "Usage: verify_password IP root_password"exit 1fisshpass -p$2 ssh -o StrictHostKeyChecking=no -o ConnectTimeout=2 root@$1 "df -h" &> /dev/nullif [ $? -ne 0 ];thenecho "尝试登录ssh主机$1 失败,检查后重试"return 255elsereturn 0fi
}
编写检查操作系统版本是否一致
grep $OS_VERSION /etc/redhat-release
OS_VERSION=`cat config.ini | sed -n '/\[os_version\]/,/\[.*\]/p' | grep -v "\[.*\]" |grep -v ^$ |grep -v ^#`function check_os_version
{for host in $HOSTS_IP;doverify_password $host $ROOT_PASSif [ $? -eq 0 ];thensshpass -p$ROOT_PASS ssh -o StrictHostKeyChecking=no -o ConnectTimeout=2 root@$host "grep $OS_VERSION /etc/redhat-release" &> /dev/nullif [ $? -ne 0 ];thenecho "检查主机$host 版本,与目标不一致,检查不通过"os_failed_hosts="$os_failed_hosts $host"elseecho "检查主机$host 版本,与目标一致,检查通过"fielseos_failed_hosts="$os_failed_hosts $host"fidoneif [[ "$os_failed_hosts" == "" ]];thenecho "2.对主机版本检查,全部通过"elseecho "2.对主机版本检查,未全部通过: $os_failed_hosts"exit 1fi
}
循环遍历主机列表:通过for循环遍历HOSTS_IP变量中包含的所有主机IP地址。
验证密码:对每个主机调用verify_password函数,传入主机IP和root用户的密码$ROOT_PASS,以验证SSH连接的密码是否正确。
检查SSH连接:如果verify_password函数返回状态码0(表示密码验证成功),则继续执行;否则,跳过当前主机。
SSH连接并检查操作系统版本:使用sshpass工具和提供的root用户密码通过SSH连接到主机,并执行grep命令检查/etc/redhat-release文件中是否包含特定的操作系统版本字符串$OS_VERSION。这里使用了-o StrictHostKeyChecking=no选项来禁用严格的主机密钥检查,这在自动化脚本中常用于避免每次连接时的手动确认。
记录检查结果:如果操作系统版本检查未通过(即grep命令返回非0状态码),则打印该主机的检查未通过信息,并将主机IP添加到os_failed_hosts变量中;如果检查通过,则打印该主机的检查通过信息。
汇总检查结果:循环结束后,使用if语句检查os_failed_hosts变量是否为空。如果为空,表示所有主机的操作系统版本检查都通过了,打印"2.对主机版本检查,全部通过"。如果不为空,表示有主机的操作系统版本检查未通过,打印"2.对主机版本检查,未全部通过:$os_faild_hosts",并退出脚本,返回状态码1。
退出脚本:如果检测到有主机操作系统版本不一致,脚本将通过exit 1命令退出,并返回状态码1,表示脚本执行失败。
3.检查CPU是否满足规格要求
cat /proc/cpuinfo |grep ^processor |sort |uniq |wc -l
CPU_CORES=`cat config.ini | sed -n '/\[cpu_cores\]/,/\[.*\]/p' | grep -v "\[.*\]" |grep -v ^$ |grep -v ^#`
function check_cpu_cores
{for host in $HOSTS_IP;doverify_password $host $ROOT_PASSif [ $? -eq 0 ];thenDST_CPU_CORES=`sshpass -p$ROOT_PASS ssh -o StrictHostKeyChecking=no -o ConnectTimeout=2 root@$host "cat /proc/cpuinfo |grep ^processor |sort |uniq |wc -l"` &> /dev/nullif [ $DST_CPU_CORES -lt $CPU_CORES ];thenecho "检查主机CPU逻辑核心数量,检查不通过"cpu_failed_hosts="$cpu_failed_hosts $host"elseecho "检查主机CPU逻辑核心数量,检查通过"fielsecpu_failed_hosts="$cpu_failed_hosts $host"fidoneif [[ "$cpu_failed_hosts" == "" ]];thenecho "3.对主机cpu检查,全部通过"elseecho "3.对主机cpu检查,未全部通过: $cpu_failed_hosts"exit 1fi
4.检查内存是否满足规格要求
cat /proc/meminfo |grep MemTotal| awk '{print $2}'
TOTAL_MEMORY=`cat config.ini | sed -n '/\[memory_kb\]/,/\[.*\]/p' | grep -v "\[.*\]" |grep -v ^$ |grep -v ^#`
function check_memory
{for host in $HOSTS_IP;doverify_password $host $ROOT_PASSif [ $? -eq 0 ];thenDST_TOTAL_MEMORY=`sshpass -p$ROOT_PASS ssh -o StrictHostKeyChecking=no -o ConnectTimeout=2 root@$host "cat /proc/meminfo |grep MemTotal| awk '{print \\$2}'"` &> /dev/nullif [ $DST_TOTAL_MEMORY -lt $TOTAL_MEMORY ];thenecho "检查主机 $host 内存大小,检查不通过"men_failed_hosts="$men_failed_hosts $host"elseecho "检查主机 $host 内存大小,检查通过"fielsemen_failed_hosts="$men_failed_hosts $host"fidoneif [[ "$men_failed_hosts" == "" ]];thenecho "4.对主机内存检查,全部通过"elseecho "4.对主机内存检查,未全部通过,未通过的主机: $men_failed_hosts"fi
}
5.检查数据磁盘是否满足规格要求
function check_disk_number
{for host in $HOSTS_IP;doverify_password $host $ROOT_PASSALL_DISK_SYMBOLS=`sshpass -p$ROOT_PASS ssh -o StrictHostKeyChecking=no -o ConnectTimeout=2 root@$host "lsscsi |awk '\\$2~/disk/{print \\$8}'"` &> /dev/nullfor d in $ALL_DISK_SYMBOLS;dodf -h | grep "$d" &> /dev/nullif [ $? -eq 0 ];thenDATA_DISK_SYMBOLS=`echo $ALL_DISK_SYMBOLS | sed "s#$d##g"`fidoneDATA_DISK_NUMBER=`echo $DATA_DISK_SYMBOLS | awk '{print NF}'`if [ $DATA_DISK_NUMBER -ge $NUM_OF_DISK ]; thenecho "检查主机 $host 数据盘个数,检查通过"elseecho "检查主机 $host 数据盘个数,检查不通过"disk_failed_hosts="$disk_failed_hosts $host"fidoneif [[ "$disk_failed_hosts" == "" ]];thenecho "5.对主机内存检查,全部通过"elseecho "5.对主机内存检查,未全部通过,未通过的主机: $disk_failed_hosts"fi}
6.检查操作系统分区目录大小是否满足需求
PARTITION_SIZE=`cat config.ini | sed -n '/\[root_partition_size\]/,/\[.*\]/p' | grep -v "\[.*\]" |grep -v ^$ |grep -v ^#`
function check_root_partition_size
{for host in $HOSTS_IP;doverify_password $host $ROOT_PASSif [ $? -eq 0 ];thenROOT_PARTITION_SIZE=`sshpass -p$ROOT_PASS ssh -o StrictHostKeyChecking=no -o ConnectTimeout=2 root@$host "df -h |awk '\\$6==\"/\"{print \\$2}' |sed 's/[^0-9]//g'"` &> /dev/nullif [ $ROOT_PARTITION_SIZE -ge $PARTITION_SIZE ]; thenecho "检查主机 $host 分区大小,检查通过"elseecho "检查主机 $host 分区大小,检查不通过"part_failed_hosts="$part_failed_hosts $host"fielsepart_failed_hosts="$part_failed_hosts $host"fidoneif [[ "$part_failed_hosts" == "" ]];thenecho "6.对主机分区大小,全部通过"elseecho "6.对主机分区大小,未全部通过,未通过的主机: $part_failed_hosts"fi
}
7.检查集群主机时间是否一致
TIME_VALUE=`cat config.ini | sed -n '/\[time_sync_diff\]/,/\[.*\]/p' | grep -v "\[.*\]" |grep -v ^$ |grep -v ^#`
function check_time_sync
{for host in $HOSTS_IP;doLOCAL_TIME=`date "+%Y%m%d%H%M%S"`verify_password $host $ROOT_PASSif [ $? -eq 0 ];thenDST_HOST_TIME=`sshpass -p$ROOT_PASS ssh -o StrictHostKeyChecking=no -o ConnectTimeout=2 root@$host 'date "+%Y%m%d%H%M%S"'` &> /dev/nullTIME_DIFF=`expr $LOCAL_TIME - $DST_HOST_TIME |sed 's/[^0-9]//g'`if [ $TIME_DIFF -lt $TIME_VALUE ];thenecho "检查主机 $host 时间同步通过"elseecho "检查主机 $host 时间同步不通过,时间误差在 $TIME_DIFF"time_failed_hosts="$time_failed_hosts $host"fielsetime_failed_hosts="$time_failed_hosts $host"fidoneif [[ "$time_failed_hosts" == "" ]];thenecho "7.对主机时间检查,全部通过"elseecho "7.对主机时间检查,未全部通过,未通过的主机: $time_failed_hosts"fi
}
全部代码在这
#!/bin/bash
#
if [ ! -e ./config.ini ];thenecho "config.ini is not exist...please check.."exit 1
fiHOSTS_IP=`cat config.ini | sed -n '/\[hosts\]/,/\[.*\]/p' | grep -v "\[.*\]" |grep -v ^$ |grep -v ^# |awk '{print $1}'`ROOT_PASS=`cat config.ini | sed -n '/\[root_password\]/,/\[.*\]/p' | grep -v "\[.*\]" |grep -v ^$ |grep -v ^#`OS_VERSION=`cat config.ini | sed -n '/\[os_version\]/,/\[.*\]/p' | grep -v "\[.*\]" |grep -v ^$ |grep -v ^#`CPU_CORES=`cat config.ini | sed -n '/\[cpu_cores\]/,/\[.*\]/p' | grep -v "\[.*\]" |grep -v ^$ |grep -v ^#`TOTAL_MEMORY=`cat config.ini | sed -n '/\[memory_kb\]/,/\[.*\]/p' | grep -v "\[.*\]" |grep -v ^$ |grep -v ^#`NUM_OF_DISK=`cat config.ini | sed -n '/\[data_disk_number\]/,/\[.*\]/p' | grep -v "\[.*\]" |grep -v ^$ |grep -v ^#`PARTITION_SIZE=`cat config.ini | sed -n '/\[root_partition_size\]/,/\[.*\]/p' | grep -v "\[.*\]" |grep -v ^$ |grep -v ^#`TIME_VALUE=`cat config.ini | sed -n '/\[time_sync_diff\]/,/\[.*\]/p' | grep -v "\[.*\]" |grep -v ^$ |grep -v ^#`if [[ "$HOSTS_IP" == "" ]];thenecho "NO HOST IP ADDRESS is configured in config.please check config.ini"exit 1
elseecho "the cluster includes the following hosts:"for host in $HOSTS_IP; doecho $hostdoneread -p "Please confirm,input yes/no:" choiceif [[ "$choice" == "yes" || "$choice" == "YES" || "$choice" == "Y" || "$choice" == "y" ]];thencontinueelseexitfi
fifunction format_print
{if [ $# -lt 1 ]; thenecho "Usage: format_print 'args1 args2...'"exit 1fifor str in $@;doecho $strdone
}function verify_password
{if [ $# -lt 2 ];thenecho "Usage: verify_password IP root_password"exit 1fisshpass -p$2 ssh -o StrictHostKeyChecking=no -o ConnectTimeout=2 root@$1 "df -h" &> /dev/nullif [ $? -ne 0 ];thenecho "尝试登录ssh主机$1 失败,检查后重试"return 255elsereturn 0fi
}function check_host_online
{echo "++++++++++++++++1、检查主机是否联通正常++++++++++++++++"for host in $HOSTS_IP;doping -w 3 $host &> /dev/nullif [ $? -eq 0 ];thenecho "检测主机 $host 连通性通过"elseecho "检测主机 $host 无法连通"ping_faild_hosts="$ping_faild_hosts $host"fidoneif [[ "$ping_faild_hosts" == "" ]];thenecho "1.使用ping对主机连通性检查,全部通过"elseecho "1.使用ping对主机连通性检查,未全部通过:"format_print $ping_faild_hostsfi
}
function check_os_version
{echo "++++++++++++++++2、检查安装操作系统版本是否和需求一致++++++++++++++++"for host in $HOSTS_IP;doverify_password $host $ROOT_PASSif [ $? -eq 0 ];thensshpass -p$ROOT_PASS ssh -o StrictHostKeyChecking=no -o ConnectTimeout=2 root@$host "grep $OS_VERSION /etc/redhat-release" &> /dev/nullif [ $? -ne 0 ];thenecho "检查主机$host 版本,与目标不一致,检查不通过"os_failed_hosts="$os_failed_hosts $host"elseecho "检查主机$host 版本,与目标一致,检查通过"fielseos_failed_hosts="$os_failed_hosts $host"fidoneif [[ "$os_failed_hosts" == "" ]];thenecho "2.对主机版本检查,全部通过"elseecho "2.对主机版本检查,未全部通过,未通过的主机: "format_print $os_failed_hostsfi
}
function check_cpu_cores
{echo "++++++++++++++++3、检查CPU是否满足规格要求++++++++++++++++"for host in $HOSTS_IP;doverify_password $host $ROOT_PASSif [ $? -eq 0 ];thenDST_CPU_CORES=`sshpass -p$ROOT_PASS ssh -o StrictHostKeyChecking=no -o ConnectTimeout=2 root@$host "cat /proc/cpuinfo |grep ^processor |sort |uniq |wc -l"` &> /dev/nullif [ $DST_CPU_CORES -lt $CPU_CORES ];thenecho "检查主机CPU逻辑核心数量,检查不通过"cpu_failed_hosts="$cpu_failed_hosts $host"echo $cpu_failed_hostselseecho "检查主机CPU逻辑核心数量,检查通过"fielsecpu_failed_hosts="$cpu_failed_hosts $host"fidoneif [[ "$cpu_failed_hosts" == "" ]];thenecho "3.对主机cpu检查,全部通过"elseecho "3.对主机cpu检查,未全部通过,未通过的主机: "format_print $cpu_failed_hostsfi
}
function check_memory
{echo "++++++++++++++++4、检查内存是否满足规格要求++++++++++++++++"for host in $HOSTS_IP;doverify_password $host $ROOT_PASSif [ $? -eq 0 ];thenDST_TOTAL_MEMORY=`sshpass -p$ROOT_PASS ssh -o StrictHostKeyChecking=no -o ConnectTimeout=2 root@$host "cat /proc/meminfo |grep MemTotal| awk '{print \\$2}'"` &> /dev/nullif [ $DST_TOTAL_MEMORY -lt $TOTAL_MEMORY ];thenecho "检查主机 $host 内存大小,检查不通过"men_failed_hosts="$men_failed_hosts $host"elseecho "检查主机 $host 内存大小,检查通过"fielsemen_failed_hosts="$men_failed_hosts $host"fidoneif [[ "$men_failed_hosts" == "" ]];thenecho "4.对主机内存检查,全部通过"elseecho "4.对主机内存检查,未全部通过,未通过的主机:"format_print $men_failed_hostsfi
}
function check_disk_number
{echo "++++++++++++++++5、检查数据磁盘是否满足规格要求++++++++++++++++"for host in $HOSTS_IP;doverify_password $host $ROOT_PASSALL_DISK_SYMBOLS=`sshpass -p$ROOT_PASS ssh -o StrictHostKeyChecking=no -o ConnectTimeout=2 root@$host "lsscsi |awk '\\$2~/disk/{print \\$8}'"` &> /dev/nullfor d in $ALL_DISK_SYMBOLS;dodf -h | grep "$d" &> /dev/nullif [ $? -eq 0 ];thenDATA_DISK_SYMBOLS=`echo $ALL_DISK_SYMBOLS | sed "s#$d##g"`fidoneDATA_DISK_NUMBER=`echo $DATA_DISK_SYMBOLS | awk '{print NF}'`if [ $DATA_DISK_NUMBER -ge $NUM_OF_DISK ]; thenecho "检查主机 $host 数据盘个数,检查通过"elseecho "检查主机 $host 数据盘个数,检查不通过"disk_failed_hosts="$disk_failed_hosts $host"fidoneif [[ "$disk_failed_hosts" == "" ]];thenecho "5.对主机内存检查,全部通过"elseecho "5.对主机内存检查,未全部通过,未通过的主机:"format_print $disk_failed_hostsfi}
function check_root_partition_size
{echo "++++++++++++++++6、检查操作系统分区目录大小是否满足需求++++++++++++++++"for host in $HOSTS_IP;doverify_password $host $ROOT_PASSif [ $? -eq 0 ];thenROOT_PARTITION_SIZE=`sshpass -p$ROOT_PASS ssh -o StrictHostKeyChecking=no -o ConnectTimeout=2 root@$host "df -h |awk '\\$6==\"/\"{print \\$2}' |sed 's/[^0-9]//g'"` &> /dev/nullif [ $ROOT_PARTITION_SIZE -ge $PARTITION_SIZE ]; thenecho "检查主机 $host 分区大小,检查通过"elseecho "检查主机 $host 分区大小,检查不通过"part_failed_hosts="$part_failed_hosts $host"fielsepart_failed_hosts="$part_failed_hosts $host"fidoneif [[ "$part_failed_hosts" == "" ]];thenecho "6.对主机分区大小,全部通过"elseecho "6.对主机分区大小,未全部通过,未通过的主机:"format_print $part_failed_hostsfi}
function check_time_sync
{echo "++++++++++++++++7、检查集群主机时间是否一致++++++++++++++++"for host in $HOSTS_IP;doLOCAL_TIME=`date "+%Y%m%d%H%M%S"`verify_password $host $ROOT_PASSif [ $? -eq 0 ];thenDST_HOST_TIME=`sshpass -p$ROOT_PASS ssh -o StrictHostKeyChecking=no -o ConnectTimeout=2 root@$host 'date "+%Y%m%d%H%M%S"'` &> /dev/nullTIME_DIFF=`expr $LOCAL_TIME - $DST_HOST_TIME |sed 's/[^0-9]//g'`if [ $TIME_DIFF -lt $TIME_VALUE ];thenecho "检查主机 $host 时间同步通过"elseecho "检查主机 $host 时间同步不通过,时间误差在 $TIME_DIFF"time_failed_hosts="$time_failed_hosts $host"fielsetime_failed_hosts="$time_failed_hosts $host"fidoneif [[ "$time_failed_hosts" == "" ]];thenecho "7.对主机时间检查,全部通过"elseecho "7.对主机时间检查,未全部通过,未通过的主机: "format_print $time_failed_hostsfi
}
check_host_online
check_os_version
check_cpu_cores
check_memory
check_disk_number
check_root_partition_size
check_time_sync相关文章:
shell编程:安装部署前常见环境检查
脚本任务 监测主机是否联通正常 检查安装操作系统版本是否和需求一致 检查CPU是否满足规格要求 检查内存是否满足规格要求 检查数据磁盘是否满足规格要求 检查操作系统分区目录大小是否满足需求 检查集群主机时间是否一致 0.配置文件准备及脚本变量初始化 编写config.i…...
思特科技:国家宝藏数字体验馆展现东方美学 让“文物活起来”
01 思特科技为“国家宝藏数字体验展”提供“数字技术”支持,带来国宝的数字化演绎。以《国家宝藏》顶级IP为基础,打造的全新沉浸文化项目“国宝数字体验展“,借由文物的视角、站在历史的星河中,探寻时间长河中不变的智慧…...
ES6笔记总结(Xmind格式):第二天
Xmind鸟瞰图: 简单文字总结: ES6知识总结 Proxy(代理): 1.作用:实现数据的私有化处理 2.target 目标对象 handler处理函数 3.处理函数中有两个方法:get,set 4.读取数据会触发g…...
Kotlin 流flow、ShareFlow、StateFlow、Channel的解释与使用
一、介绍 随着Android接入kotlin开发,Android之前好多模式也渐渐被kotlin替代。开发模式也在做渐进的转型,从MVC到MVP在到MVVP以及现在的MVI等。 流IO在java中和kotlin中使用率都是比较高的,场景很多。如Java的IO和NIO,再到我们现…...
【个人学习】JVM(7):方法区概述、方法区内部结构、垃圾回收等
方法区 栈、堆、方法区的交互关系 从线程共享与否的角度来看 ThreadLocal:如何保证多个线程在并发环境下的安全性?典型场景就是数据库连接管理,以及会话管理。 栈、堆、方法区的交互关系 下面涉及了对象的访问定位 Person 类的 .class 信息存放在方法区中person 变量存放…...
@Scheduled 定时任务自定义
简介 Scheduled 定时任务自定义可以通过SchedulingConfigurer实现。 SchedulingConfigurer 是 Spring Framework 中的一个接口,用于配置定时任务。当你需要对定时任务进行更高级别的定制时,这个接口就显得非常有用。 可以通过SchedulingConfigurer 接口…...
一种新颖的面试方式
你好,我是 shengjk1,多年大厂经验,努力构建 通俗易懂的、好玩的编程语言教程。 欢迎关注!你会有如下收益: 了解大厂经验拥有和大厂相匹配的技术等 希望看什么,评论或者私信告诉我! 文章目录 一…...
【Linux】生产消费模型实践 --- 基于信号量的环形队列
你送出去的每颗糖都去了该去的地方, 其实地球是圆的, 你做的好事终会回到你身上。 --- 何炅 --- 基于信号量的环形队列 1 信号量2 框架构建3 代码实现4 测试运行 1 信号量 信号量本质是一个计数器,可以在初始化时对设置资源数量…...
Science Robotics 与蜜蜂群互动的蜂窝型机器人系统
蜜蜂,如黄蜂,蚂蚁和其他社会昆虫,建立大型自组织群体,通常被解释为自我调节的“超有机体”。这些超生物是生态系统的重要稳定剂,因此被认为是“关键物种”。例如,蜜蜂群落通过觅食授粉服务的生态效应对陆地…...
Vue 计算属性:优雅地处理数据逻辑
在 Vue.js 中,计算属性(Computed Properties)是一种非常实用的功能,它允许我们根据组件的响应式依赖进行缓存和派生状态。计算属性可以让我们以声明式的方式编写复杂的逻辑,而不必担心性能问题。 什么是计算属性&…...
C++中`union`
文章目录 C中的union什么是union?定义union示例一输出结果: 示例二修正后的代码解释输出结果结论 union的特性匿名union示例 union和struct的区别1. 内存布局2. 同时访问3. 用途 union和class的区别1. 数据成员2. 功能性3. 适用场景 在C编程中࿰…...
Linux——网络(1)
一、IPC(进程间通信方式) IPC:Inter Process Communication 共享内存(最高效的进程间通信方式) 虚拟地址 mmu(memory management unit ) 共享内存: 1.是一块,内核预留的空间 2.最高效的…...
【五】阿伟开始学Kafka
阿伟开始学Kafka 概述 人生若只如初见,阿伟心里回想起了第一次和Kafka见面的场景,记忆虽然已经有些模糊,但是感觉初次见面是美好的。积累了一些实战经验之后,阿伟感觉不能再是面对百度开发了,于是决心系统的学习一下Ka…...
Java—Arrays api
public static String toString(数组) //把数组拼接成一个字符串 public static int binarySearch(数组,查找的元素) //二分查找法查找元素 public static int[] copyOf(原数组,新数组长度) //拷贝数组 public st…...
Java - 基数排序算法介绍、应用场景和示例代码
概述 基数排序(Radix Sort)是一种非比较型整数排序算法,适用于整数或固定长度的字符串排序。它的基本思想是将待排序的元素分为多个关键字进行排序,通常从最低位(最低有效位,Least Significant Digit, LSD…...
Django 后端架构开发:文件云存储,从本地存储到腾讯COS桶集成
⭐ Django 后端架构开发:文件云存储,从本地存储到腾讯COS桶集成 目录 ☁️ 文件云存储 - 项目使用云存储💻 文件云存储 - 项目中使用本地存储📝 文件云存储 - 概述和创建项目🌐 腾讯COS桶 - 概述📚 腾讯CO…...
【系统分析师】-综合知识-计算机网络与信息安全
1、要对消息明文进行加密传送,当前通常使用的加密算法是 报文认证算法:数字摘要 RSA 非对称加密,一般不用于明文 MD5 数字摘要 SHA-1 数字摘要,160位的消息摘要 HMAC 以一个密钥和一个消息为输入,生成一个消息摘要作…...
C++ | Leetcode C++题解之第363题矩形区域不超过K的最大数值和
题目: 题解: class Solution { public:int maxSumSubmatrix(vector<vector<int>> &matrix, int k) {int ans INT_MIN;int m matrix.size(), n matrix[0].size();for (int i 0; i < m; i) { // 枚举上边界vector<int> sum(…...
python动画:场景的线性变换展示
一,主函数 LinearTransformationScene 是 Manim 中用于展示线性变换的场景类。它通过在一幅背景和前景平面上展示向量和变换,帮助理解线性代数中的概念。 LinearTransformationScene(include_background_planeTrue, include_foreground_planeTrue, ba…...
HBase体系架构与环境搭建
这里写目录标题 一、常见的NoSQL数据库二、HBase的体系架构和表结构三、搭建HBasa环境1.本地模式2.伪分布模式全分布模式HA模式 一、常见的NoSQL数据库 NoSQL数据库的说明与定义 NoSQL是一种不同于关系数据库的数据库管理系统设计方式,是对非关系型数据库的统称。它…...
基于FPGA的PID算法学习———实现PID比例控制算法
基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容:参考网站: PID算法控制 PID即:Proportional(比例)、Integral(积分&…...
srs linux
下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935,SRS管理页面端口是8080,可…...
Linux云原生安全:零信任架构与机密计算
Linux云原生安全:零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言:云原生安全的范式革命 随着云原生技术的普及,安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测,到2025年,零信任架构将成为超…...
unix/linux,sudo,其发展历程详细时间线、由来、历史背景
sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...
JDK 17 新特性
#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持,不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的ÿ…...
多种风格导航菜单 HTML 实现(附源码)
下面我将为您展示 6 种不同风格的导航菜单实现,每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...
RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文全面剖析RNN核心原理,深入讲解梯度消失/爆炸问题,并通过LSTM/GRU结构实现解决方案,提供时间序列预测和文本生成…...
【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习
禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...
关键领域软件测试的突围之路:如何破解安全与效率的平衡难题
在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件,这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下,实现高效测试与快速迭代?这一命题正考验着…...
保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek
文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama(有网络的电脑)2.2.3 安装Ollama(无网络的电脑)2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...
