linux系统巡检

 通过Shell脚本实现批量Linux服务器巡检-阿里云开发者社区 (aliyun.com)

 cat sysinfocheck.sh
#!/bin/bash
os_sys(){
#系统信息
os_type=`uname`
echo "操作系统的类型: $os_type"os_version=`cat /etc/redhat-release`
echo "操作系统的版本号:$os_version"os_ker=`uname -r`
echo "操作系统的内核版本:$os_ker"os_time=`date +%F_%T`
echo "服务器当前的运行时间:$os_time"os_last_reboot=`uptime |awk '{print $3,$4}'| awk -F ',' '{print $1}'`
echo "服务器最后重启时间: $os_last_reboot"os_hostname=`hostname`
echo "服务器的主机名: $os_hostname"
echo " "
}os_network(){
#网络信息
#which ifconfig &> /dev/null
#if [ $? -gt 0 ];then
#        yum -y install net-tools &>/dev/null
#fi
#ip_addr=$(ifconfig ens32 |awk '/netmask/{print $2}')
ip_addr=$(netstat -ntu | grep tcp | awk '{print $4}' | cut -d: -f1 | sort)
echo "服务器的IP地址为:${ip_addr}"
#ping -c1 www.baidu.com  &> /dev/null
#if [ $? -eq 0 ];then
#        echo -e "\033[5;33m服务器的网络正常\033[0m"
#else
#        echo -e "\033[5;34m数据异常请检查网路\033[0m"
#fi
#RX=$(ifconfig ens32 | grep RX | sed -n '1p' | awk '{print $(NF-1),$NF}')
#echo "网卡流入的量为:${RX}"
#TX=$(ifconfig ens32 | grep TX | sed -n '1p' | awk '{print $(NF-1),$NF}')
#echo "网卡流出的量为:${TX}"
#echo " "
}
#cpu
cpu_info(){#cpu_num=$(cat /proc/cpuinfo |grep "physical id" | sort |uniq |wc -l)
#cpu_num=$( cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c | awk '{print $1}')
#echo "cpu的物理个数为:${cpu_num}"
#cpu_core=$(cat /proc/cpuinfo |grep "core id" |sort |uniq |wc -l)
cpu_core=$( cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c | awk '{print $1}')
echo "cpu的核心个数为:${cpu_core}"
cpu_model=$(cat /proc/cpuinfo |grep "model name" |uniq |awk '{print $4,$6,$7,$9}')
echo "cpu的型号:${cpu_model}"
echo " "
}#mem
mem_info(){
#内存总大小
mem_total=`free -h | awk '/Mem/{print $2}'`
echo "内存总大小: $mem_total"
#已使用内存
#mem_used=`free -h | awk '/Mem/{print $3}'`
#echo "已用内存大小:$mem_used"
#剩余内存大小
mem_free=`free -h | awk '/Mem/{print $4}'`
echo "剩余内存大小:$mem_free"
#已使用内存百分比
#p_bfb=$(free -h | grep Mem | awk '{print $3/$2}')
#echo "已使用内存百分比:${p_bfb}%"
#剩余内存百分比 
s_bfb=$(free | grep Mem | awk '{print $4/$2 * 100.0}')
echo "剩余内存百分比:${s_bfb}%"
echo " "
}#disk
#磁盘总量
disk_info(){disk_total=$(lsblk |awk '/disk/{print $4}')
echo "磁盘总量为:${disk_total}"
count=($(df -Tm |egrep -v tmpfs |sed '1d' |awk '{print $5}'))
sum=0
for i in ${count[@]}
dolet sum=sum+$idone
sumb=($sum/1024)
echo "剩余磁盘总量为 $sum M"
}#while :#doos_sysos_networkcpu_infomem_infodisk_info#sleep 5#doneOS=` head -n 1 /etc/os-release ` #系统版本
Kernel=` uname -r ` #系统内核
Hostname=` hostname ` #主机名称
Default_lang=` echo $LANG ` #默认语言
Time=$(date +'%Y-%m-%d %H:%M:%S') #当前时间
Logintime=$(who -b |awk '{print $3,$4}') #此用户登录时间
Uptime=$(uptime|awk '{print $3}'|awk -F "," '{print $1}') #系统已运行时间
Ipaddr=$(ifconfig |grep 'inet ' |awk {'print$2'}|grep -v '127.0.0.1') #IP地址
Netmask=$(ifconfig|grep "inet"|sed '2,4d'|awk -F " " '{print $4}') #掩码
cpu_info=$(cat /proc/cpuinfo|grep "name"|cut  -d: -f2|awk '{print "*"$1,$2,$3,$4}'|uniq -c|sed 's/^[ \t]*//g') #CPU信息
cpu_type=$(grep 'model name' /proc/cpuinfo | uniq | awk -F":" '{print $2}') #CPU型号
cpu_arch=$(uname -m) #CPU架构
cpu_number_physical=$(grep 'physical id' /proc/cpuinfo | sort | uniq | wc -l) #物理CPU数
cpu_number_vir=$(grep 'processor' /proc/cpuinfo | wc -l) #逻辑CPU数
cpu_cores=$(grep 'cores' /proc/cpuinfo | uniq | awk -F":" '{print $NF}' ) #每CPU核心数
Sigle_memory_capacity=$(dmidecode|grep -P -A5 "Memory\s+Device"|grep "Size"|grep -v "Range"|grep '[0-9]'|awk -F ":" '{print $2}'|sed 's/^[ \t]*//g') #单内存容量
Maximum_memory_capacity=$(dmidecode -t 16|grep "Maximum Capacity"|awk -F ":" '{print $2}'|sed 's/^[ \t]*//g') #最大存储容量
Number_of_memory_slots=$(dmidecode -t 16|grep "Number Of Devices"|awk -F ":" '{print $2}'|sed 's/^[ \t]*//g') #内存卡槽数
Memory_total=$(cat /proc/meminfo|grep "MemTotal"|awk '{printf("MemTotal:%1.0fGB\n",$2/1024/1024)}'|awk -F ":" '{print $2}') #理论总内存
Product_name=$(dmidecode|grep -A10 "System Information"|grep "Product Name"|awk -F ":" '{print $2}'|sed 's/^[ \t]*//g') #内存品牌
Process_numbers=$(top -d 2 -n 1 -b|grep "Tasks" |awk -F':' '{print $2}'|awk -F" " '{print $1}') #总进程数
Process_running=$(top -d 2 -n 1 -b|grep "Tasks"|awk -F "[: ,]" '{print $8}') #活跃进程数
Process_sleeping=$(top -d 2 -n 1 -b|grep "Tasks"|awk -F "[: ,]" '{print $11}') #睡眠进程数
Process_stoping=$(top -d 2 -n 1 -b|grep "Tasks"|awk -F "[: ,]" '{print $16}') #停止进程数
Process_zombie=$(top -d 2 -n 1 -b|grep "Tasks"|awk -F "[: ,]" '{print $21}') #僵尸进程数
cpu_load=$(uptime | awk '{for(i=6;i<=NF;i++) printf $i""FS;print ""}') #系统负载
cpu_load_number=$(uptime | awk -F"load average:" '{print $2}' | awk -F"," '{print $1}' | awk -F"." '{print $1}' |sed 's/^[ \t]*//g') #获取近1分钟占用CPU内核数
cpu_user_space=$(top -d 2 -n 1 -b|grep 'C[Pp][Uu]'|head -1|awk -F "[:,]" '{print $2}'|awk -F" " '{print $1}') #用户空间占用CPU的百分比
cpu_system_space=$(top -d 2 -n 1 -b|grep 'C[Pp][Uu]'|head -1|awk -F "[:,]" '{print $3}'|awk -F" " '{print $1}') #内核空间占用CPU的百分比
cpu_idle=$(top -d 2 -n 1 -b|grep C[Pp][Uu]|grep id|awk -F"," '{print $4}'|awk -F" " '{print $1}') #空闲CPU
cpu_wait=$(top -d 2 -n 1 -b|grep 'C[Pp][Uu]'|head -1|awk -F "[:,]" '{print $6}'|awk -F" " '{print $1}') #等待占用CPU的百分比
Pem_totle_m=$(free -m |grep "Mem" |awk -F" " '{print $2"M"}') #实际总物理内存M
Mem_free_m=$(free -m |grep "Mem" |awk -F" " '{print $4"M"}') #实际可用内存M
Mem_used=$(top -d 2 -n 1 -b|grep "Mem"|head -1|sed 's/[:,]/ /g'|awk -F" " '{print $7}'|awk '{printf("%dM\n",$1/1024)}') #用户缓存容量
Mem_free=$( top -d 2 -n 1 -b|grep "Mem"|head -1|sed 's/[:,]/ /g'|awk -F" " '{print $5}'|awk '{printf("%dM\n",$1/1024)}') #空闲缓存容量
Mem_buffer=$(top -d 2 -n 1 -b|grep "Mem"|head -1|sed 's/[:,]/ /g'|awk -F" " '{print $9}'|awk '{printf("%dM\n",$1/1024)}') #缓冲缓存容量
Swap_total=$(top -d 2 -n 1 -b|grep "Swap"|awk -F" " '{print $3}'|awk '{printf("%dM\n",$1/1024)}') #交换分区总容量
Swap_free=$(top -d 2 -n 1 -b|grep "Swap"|awk -F" " '{print $5}'|awk '{printf("%dM\n",$1/1024)}') #交换分区空闲容量
Swap_used=$(top -d 2 -n 1 -b|grep "Swap"|awk -F" " '{print $7}'|awk '{printf("%dM\n",$1/1024)}') #交换分区占用容量
Swap_avail=$(top -d 2 -n 1 -b|grep "Swap"|awk -F" " '{print $9}'|awk '{printf("%dM\n",$1/1024)}') #交换分区可用容量
rx_pck=$(sar -n DEV 1 1 |sed '1,4d'|sed '2,$d'|awk -F" " '{print $3}') #网卡1每秒接收数据包数
tx_pck=$(sar -n DEV 1 1 |sed '1,4d'|sed '2,$d'|awk -F" " '{print $4}') #网卡1每秒发送数据包数
rx_kB=$(sar -n DEV 1 1 |sed '1,4d'|sed '2,$d'|awk -F" " '{print $5}') #网卡1每秒接收字节数
tx_kB=$(sar -n DEV 1 1 |sed '1,4d'|sed '2,$d'|awk -F" " '{print $6}') #网卡1每秒发送字节数
echo -e "系统版本|$OS
系统内核|$Kernel
主机名称|$Hostname
默认语言|$Default_lang
当前时间|$Time
此用户登录时间|$Logintime
系统已运行时间|$Uptime
IP地址|$Ipaddr
掩码|$Netmask
CPU信息|$cpu_info
CPU型号|$cpu_type
CPU架构|$cpu_arch
物理CPU数|$cpu_number_physical
逻辑CPU数|$cpu_number_vir
每CPU核心数|$cpu_cores
单内存容量|$Sigle_memory_capacity
最大存储容量|$Maximum_memory_capacity
内存卡槽数|$Number_of_memory_slots
理论总内存|$Memory_total
内存品牌|$Product_name
总进程数|$Process_numbers
活跃进程数|$Process_running
睡眠进程数|$Process_sleeping
停止进程数|$Process_stoping
僵尸进程数|$Process_zombie
系统负载|$cpu_load
获取近1分钟占用CPU内核数|$cpu_load_number
用户空间占用CPU的百分比|$cpu_user_space
内核空间占用CPU的百分比|$cpu_system_space
空闲CPU|$cpu_idle
等待占用CPU的百分比|$cpu_wait
实际总物理内存M|$Pem_totle_m
实际可用内存M|$Mem_free_m
用户缓存容量|$Mem_used
空闲缓存容量|$Mem_free
缓冲缓存容量|$Mem_buffer
交换分区总容量|$Swap_total
交换分区空闲容量|$Swap_free
交换分区占用容量|$Swap_used
交换分区可用容量|$Swap_avail
网卡1每秒接收数据包数|$rx_pck
网卡1每秒发送数据包数|$tx_pck
网卡1每秒接收字节数|$rx_kB
网卡1每秒发送字节数|$tx_kB"
#获取磁盘状态信息
function get_disk_status(){
echo -e "#磁盘使用情况:"IFS=""for i in ` df -iP | sed 1d | awk '{print $(NF-1)"\t"$NF"\t"$(NF-2)}'`;doDISK_UTILIZ=$( echo $i |awk '{print $1}') #利用率MOUNT_DISK=$(echo $i |awk '{print $2}') #挂载点DISK_FREE=$(echo $i |awk '{print $3}') #分区大小if [[ $(echo $MOUNT_DISK | sed s/%//g) -gt 70 ]];thenecho "异常""("$MOUNT_DISK"使用率为"$DISK_UTILIZ",超过70%)"elsecontinuefidone
df -hP |sed 1d |awk '{print $NF" ""分区"" ""剩余空间"" "$(NF-2),"使用率"" "$(NF-1)}'
}#获取CPU状态
function get_cup_status(){
echo -e "#CPU状态"
cpu_number=$(cat /proc/cpuinfo |grep name |cut -d: -f2 |uniq -c |awk '{print $1}') #提取CPU核数
cpu_load_number=$(uptime | awk -F"load average:" '{print $2}' | awk -F"," '{print $1}' | awk -F"." '{print $1}' |sed 's/^[ \t]*//g') #获取近1分钟占用CPU内核数
if [[ $cpu_load_number -lt $cpu_number ]];thenCPU_STATUS=正常
elseCPU_STATUS=异常
fi
}#获取内存状态
function get_memory_status(){
echo -e "#内存状态:"
MEM_TOTLE=$(free -m |grep "Mem" |awk -F" " '{print $2}') #总物理内存
MEM_FREE=$(free -m |grep "Mem" |awk -F" " '{print $4}') #可用内存
MEM_TOTLE_M=$(free -m |grep "Mem" |awk -F" " '{print $2"M"}') #总物理内存M
MEM_FREE_M=$(free -m |grep "Mem" |awk -F" " '{print $4"M"}') #可用内存M
MEM_USED=$(echo $(($MEM_TOTLE-$MEM_FREE))) #总占用内存
PERCENT=$(printf "%d%%" $(($MEM_USED*100/$MEM_TOTLE))) #内存占用率
PERCENT_N=$(echo $PERCENT|sed s/%//g) #内存占用率数值
if [[ $PERCENT_N -lt 80 ]];thenMEM_STATUS=正常
elseMEM_STATUS=异常
fi
echo -e "$MEM_STATUS\n"总内存大小:"$MEM_TOTLE_M,"剩余内存大小:"$MEM_FREE_M,"内存使用率"$PERCENT"
}#检测是否存在暴力破解密码
function get_ssh_deny(){
echo -e "#是否存在暴力破解密码:"
SYSTEM_TYPE=$(head -n 1 /etc/os-release |awk -F"=" '{print $2}'|awk -F" " '{print $1}'|sed 's/"//g') #获取系统类型
if [[ $SYSTEM_TYPE = 'CentOS' ]];thenSSH_SUM=$(cat /var/log/secure |grep "authentication failure" |wc -l)SSH_DIY=10if [[ $SSH_SUM -gt $SSH_DIY ]];thenecho ""请注意,密码尝试次数为"$SSH_SUM"elseecho "正常"fi
elseecho "系统类型不支持"
fi
}#检查开机自启任务
function get_auto_start_status() {
echo -e "#开机自启任务"
conf=$(grep -v "^#" /etc/rc.d/rc.local | sed '/^$/d')
echo "$conf"
}#检查可登陆用户与无密码的用户
function get_user(){
echo -e "#可登陆用户与无密码的用户:"
/usr/bin/w #当前在线用户信息
user=$(cat /etc/passwd|awk -F":" '$7 ~"/bin/bash"{print $1}') #可登陆用户
echo -e "可登陆用户:\n$user"
echo "未设置密码用户:"
for i in $user ;do
cat /etc/shadow|grep $i|awk -F":" '$2 ~"!!"{print $1,$2}' #未设置密码的用户
done
}#检查计划任务
function get_corn(){
echo -e "#计划任务:"
user=` cat /etc/passwd |awk -F":" '$7 ~"/bin/bash"{print $1}' ` #获取用户列表
for cronuser in $user;docrontab -l -u $cronuser > /dev/null 2>&1if [ $? -eq 0 ];thenecho "$cronuser"echo "######"crontab -l -u $cronuser | grep -vE "^#|^$"echo "######"elseecho "用户$cronuser不存在计划任务"fi
done
}#检查进程状态
function get_process(){
echo -e "#是否存在僵尸进程:"
if  [[ $(ps -aux | grep Zs |grep -v grep | wc -l ) -ge 1 ]];then #检查僵尸进程是否存在echo "存在僵尸进程"ps -aux |grep Zs |grep -v grep #输出僵尸进程信息
elseecho "不存在僵尸进程"
fi
echo -e "内存占用率TOP10进行列表:"
ps aux | awk '{print $2, $4, $6, $11}' | sort -k3rn | head -n 10 #获取内存占用率TOP10进行列表
echo -e "CPU利用率TOP10进行列表:"
top b -n1 | head -17 | tail -11 #获取CPU利用率TOP10进行列表
}

bash sysinfocheck.sh | nl
     1    操作系统的类型: Linux
     2    操作系统的版本号:CentOS Linux release 7.9.2009 (Core)
     3    操作系统的内核版本:3.10.0-1160.el7.x86_64
     4    服务器当前的运行时间:2024-07-07_19:15:11
     5    服务器最后重启时间: 1:09
     6    服务器的主机名: localhost.localdomain
     7     
     8    服务器的IP地址为:10.8.8.8
     9    cpu的核心个数为:4
    10    cpu的型号:Intel(R) i5-4590 CPU 3.30GHz
    11     
    12    内存总大小: 3.8G
    13    剩余内存大小:1.3G
    14    剩余内存百分比:33.9173%
    15     
    16    磁盘总量为:100G
    17    剩余磁盘总量为 94280 M
    18    系统版本|NAME="CentOS Linux"
    19    系统内核|3.10.0-1160.el7.x86_64
    20    主机名称|localhost.localdomain
    21    默认语言|en_US.UTF-8
    22    当前时间|2024-07-07 19:15:11
    23    此用户登录时间|2024-07-08 02:05
    24    系统已运行时间|1:09
    25    IP地址|10.8.8.8
    26    掩码|255.255.255.0
    27    CPU信息|4 *Intel(R) Core(TM) i5-4590 CPU
    28    CPU型号| Intel(R) Core(TM) i5-4590 CPU @ 3.30GHz
    29    CPU架构|x86_64
    30    物理CPU数|2
    31    逻辑CPU数|4
    32    每CPU核心数| 2
    33    单内存容量|4096 MB
    34    最大存储容量|65 GB
    35    内存卡槽数|64
    36    理论总内存|4GB
    37    内存品牌|VMware Virtual Platform
    38    总进程数|137
    39    活跃进程数|2
    40    睡眠进程数|135
    41    停止进程数|0
    42    僵尸进程数|0
    43    系统负载|load average: 0.02, 0.05, 0.05 
    44    获取近1分钟占用CPU内核数|0
    45    用户空间占用CPU的百分比|0.0
    46    内核空间占用CPU的百分比|0.0
    47    空闲CPU|92.5
    48    等待占用CPU的百分比|0.0
    49    实际总物理内存M|3931M
    50    实际可用内存M|1332M
    51    用户缓存容量|481M
    52    空闲缓存容量|1332M
    53    缓冲缓存容量|2117M
    54    交换分区总容量|3967M
    55    交换分区空闲容量|3967M
    56    交换分区占用容量|0M
    57    交换分区可用容量|3156M
    58    网卡1每秒接收数据包数|ens36
    59    网卡1每秒发送数据包数|0.00
    60    网卡1每秒接收字节数|0.00
    61    网卡1每秒发送字节数|0.00

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/867903.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpEL表达式相关知识点

SpEL表达式 知识点 Spel概述 Spring 表达式&#xff0c;即 Spring Expression Language&#xff0c;简称 SpEL。 那么是什么SpEL表达式呢&#xff1f; SpEL (Spring Expression Language) 是一种在Spring框架中用于处理表达式的语言。SpEL中的表达式可以支持调用bean的方法…

IntelliJ IDEA菜单不见了设置找回方法

通过CtrAltS键按出设置 找到View,然后自定义一个快捷键,然后保存 使用自定义快捷键弹出改界面,点击Main Menu即可

传感器标定(一)摄像头内参标定

一、使用ROS进行手动标定安装 1、安装 image-view &usb_cam ⽤于驱动相机 sudo apt-get install ros-melodic-image-view sudo apt-get install ros-melodic-usb-cam2、查看系统视频设备 v4l2- ctl -d /dev/video0 --all 查询所有相机具体的参数包括width和height ls /…

内容监管与自由表达:Facebook的平衡之道

在当今数字化信息社会中&#xff0c;社交媒体平台不仅是人们交流和获取信息的主要渠道&#xff0c;也是自由表达的重要舞台。Facebook&#xff0c;作为全球最大的社交网络平台&#xff0c;连接了数十亿用户&#xff0c;形成了一个丰富多样的信息生态。然而&#xff0c;如何在维…

vue项目中 i18n(vue-i18n) 国际化解决方案,从安装到使用

1、国际化介绍 国际化&#xff08;Internationalization&#xff0c;通常缩写为"i18n"&#xff09;是指设计和开发软件应用程序&#xff0c;使其能够轻松地适应不同的语言、文化和地区的需求。国际化不仅仅涉及将文字翻译成其他语言&#xff0c;还包括调整日期、时间…

数据列表组件-报表

当数据在后端接口查询到&#xff0c;需要在页面展示出来&#xff0c;如果项目有很多report &#xff0c;可以把列表做一个组件 效果如下&#xff1a; js代码&#xff1a; <!DOCTYPE html> <html> <head><meta charset"utf-8" /><title&g…

中英双语介绍东京的商业核心区域:日本桥(Nihonbashi)

中文版 日本的日本桥&#xff08;Nihonbashi&#xff09; 位置 日本桥位于东京中央区&#xff0c;是东京市中心的重要商业和金融区之一。日本桥的名字来源于这里的同名桥梁“日本桥”&#xff0c;该桥建于江户时代&#xff0c;横跨日本桥川&#xff0c;是当时五街道的起点&a…

作业训练二编程题3. 数的距离差

【问题描述】 给定一组正整数&#xff0c;其中最大值和最小值分别为Max和Min, 其中一个数x到Max和Min的距离差定义为&#xff1a; abs(abs(x-Max)-(x-Min)) 其中abs()为求一个数的绝对值 【输入形式】 包括两行&#xff0c;第一行一个数n&#xff0c;表示第二行有n个正整数…

Linux内核链表使用方法

简介&#xff1a; 链表是linux内核中最简单&#xff0c;同时也是应用最广泛的数据结构。内核中定义的是双向链表。 linux的链表不是将用户数据保存在链表节点中&#xff0c;而是将链表节点保存在用户数据中。linux的链表节点只有2个指针(pre和next)&#xff0c;这样的话&#x…

AcWing 1260:二叉树输出

【题目来源】https://www.acwing.com/problem/content/1262/【题目描述】 树的凹入表示法主要用于树的屏幕或打印输出&#xff0c;其表示的基本思想是兄弟间等长&#xff0c;一个结点的长度要不小于其子结点的长度。 二叉树也可以这样表示&#xff0c;假设叶结点的长度为 1&…

SAP_MM模块-特殊业务场景下的系统实现方案

一、业务背景 目前公司有一种电商业务&#xff0c;卖的是备品配件&#xff0c;是公司先跟供应商采购&#xff0c;然后再销售给客户&#xff0c;系统账就是按照正常业务来流转&#xff0c;公司进行采购订单入库&#xff0c;然后销售订单出库。 不过这种备品配件&#xff0c;实…

STM32-I2C

本内容基于江协科技STM32视频学习之后整理而得。 文章目录 1. I2C通信1.1 I2C通信简介1.2 硬件电路1.3 I2C时序基本单元1.3.1 起始条件和终止条件1.3.2 发送一个字节1.3.3 接收一个字节1.3.4 发送应答和接收应答 1.4 I2C时序1.4.1 指定地址写1.4.2 当前地址读1.4.3 指定地址读…

Python实战训练(方程与拟合曲线)

1.方程 求e^x-派&#xff08;3.14&#xff09;的解 用二分法来求解&#xff0c;先简单算出解所在的区间&#xff0c;然后用迭代法求逼近解&#xff0c;一般不能得到精准的解&#xff0c;所以设置一个能满足自己进度的标准来判断解是否满足 这里打印出解x0是因为在递归过程中…

什么是PPG(光电容积描记)传感器?

PPG&#xff08;光电容积描记&#xff09;传感器是一种用于测量血液容量变化的设备。PPG传感器利用光学技术&#xff0c;通过检测皮肤下血液的反射光量变化来获取心率、血氧饱和度和其他生理参数。以下是PPG传感器的工作原理和应用&#xff1a;

python语句性能分析

1、for语句性能优于while import timeif __name__ __main__:start_time time.time()for i in range(10 ** 8):passend_time time.time()run_time end_time - start_timeprint(run_time)i 0start_time time.time()while i < 10 ** 8:i 1end_time time.time()run_tim…

强化学习的数学原理:时序差分算法

概述 之前第五次课时学习的 蒙特卡洛 的方法是全课程当中第一次介绍的第一种 model-free 的方法&#xff0c;而本次课的 Temporal-Difference Learning 简称 TD learning &#xff08;时序差分算法&#xff09;就是第二种 model-free 的方法。而对于 蒙特卡洛方法其是一种 non…

IntelliJ IDEA 同时多行同时编辑操作快捷键

首先 点击要编辑的地方,长按鼠标左键不放,同时按住 Ctrl Shift Alt,然后就可以进行多行编辑了

Android项目中,查看项目依赖树的多种方式

1.使用预设的Task来进行查看 1.1 命令行 查看某个模块的所有依赖树&#xff1a; gradlew [模块名称]:dependencies 例如&#xff1a;gradlew app:dependencies查看某个模块的某功能的依赖树&#xff1a; gradlew [模块名称]:dependencies --configuration [功能名称] 例如&…

k8s学习之cobra命令库学习

1.前言 打开k8s代码的时候&#xff0c;我发现基本上那几个核心服务都是使用cobra库作为命令行处理的能力。因此&#xff0c;为了对代码之后的代码学习的有比较深入的理解&#xff0c;因此先基于这个库写个demo&#xff0c;加深对这个库的一些理解吧 2.cobra库的基本简介 Git…

前端JS特效第22波:jQuery滑动手风琴内容切换特效

jQuery滑动手风琴内容切换特效&#xff0c;先来看看效果&#xff1a; 部分核心的代码如下&#xff1a; <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xm…