网络安全-Linux基础(bash脚本)
文章目录
- bash脚本编写基础
- 使用的脚本解析器/bin/bash(声明)
- bash脚本需要拥有执行权限
- bash脚本语法
- 输入与输出
- 函数的封装
- 条件判断语句
- 条件符号
- 循环语句
- 模块化编程
- Linux进程操作
- 查看寻找进程
- 终止进程
- 暂停与恢复进程
- 后台运行
- bash脚本编写
- 系统内存资源占用
bash脚本编写基础
使用的脚本解析器/bin/bash(声明)
#!/bin/bash
#!,由 “#” 和 “!” 两个字符组成的特殊标记。当一个可执行文件以这两个字符开头时,内核会将该行的其余部分作为解释器的路径来读取,并使用该解释器来执行这个文件的后续内容。/bin/bash是指 bash解释器的路径。- 所以
#!/bin/bash整体的意思就是指定这个脚本文件应该由 Bash 解释器来执行。
bash脚本需要拥有执行权限
是否拥有执行的权限,表示脚本是否可以进行执行
- 使用
ls -liah进行详细目录查看 - 权限修改可以使用
chmod 777 www.sh用户、用户组、其他用户都给最高权限(读、写、执行)
bash脚本语法
输入与输出
- 输入
read name输入一个值,并赋值给name- 赋值给
name后需要使用$进行解析如$name
- 输出
echo对于字符进行整行输出printf类似与C语言
printf "My name is %s and I am %d years old.\n" $name $age
前面""中需要有格式化符号,后面才是变量.
函数的封装
- 不含参数函数定义调用
greet () {echo "Hello, World!"
}
函数调用
#!/bin/bash
greet
- 含参函数定义调用
add_numbers () {sum=$(($1 + $2))echo "The sum of $1 and $2 is $sum"
}
函数调用
#!/bin/bash
add_numbers 3 5
-
当然也可以存在
rutern返回值 -
$() 与 反引号``的异同
都可以用于获取指令结果,但建议使用$(),因为它可以嵌套,而反引号不支持。
条件判断语句
- if 语句基本结构
- 在 Bash 编程中,
if语句用于条件判断。基本结构如下:
- 在 Bash 编程中,
if [ condition ]; then# 条件为真时执行的命令commands
fi
- 其中,
[ condition ]是条件表达式部分,;用于分隔条件表达式和then关键字(也可以将;换成换行)。then后面的commands是当条件为真时要执行的命令序列。 fi是一个关键字,用于标识if语句块的结束- 例如,判断一个变量是否大于 10:
#!/bin/bash
num=15
if [ $num -gt 10 ]; thenecho "$num is greater than 10"
fi
- 这里的
$num -gt 10是条件表达式,-gt是用于比较大小的操作符,表示 “大于”。当num的值大于 10 时,就会执行echo命令。 - 除了只在条件为真时执行命令,还可以在条件为假时执行其他命令,这就用到了
if - else语句。结构如下:
if [ condition ]; thencommands1
elsecommands2
fi
- 例如,判断一个数是偶数还是奇数:
#!/bin/bash
num=7
if [ $((num % 2)) -eq 0 ]; thenecho "$num is even"
elseecho "$num is odd"
fi
- 这里使用
$((num % 2)) -eq 0作为条件表达式,%是取余运算,-eq是 “等于” 操作符。如果num除以 2 的余数为 0,则为偶数,执行echo偶数相关的命令;否则为奇数,执行echo奇数相关的命令。
- if - elif - else 语句
- 当需要判断多个条件时,可以使用
if - elif - else语句。结构如下:
if [ condition1 ]; thencommands1
elif [ condition2 ]; thencommands2
……
elsecommandsn
fi
- 例如,根据分数范围输出等级:
#!/bin/bash
score=85
if [ $score -ge 90 ]; thenecho "A"
elif [ $score -ge 80 ]; thenecho "B"
elif [ $score -ge 70 ]; thenecho "C"
elif [ $score -ge 60 ]; thenecho "D"
elseecho "F"
fi
- 这里依次判断分数是否大于等于 90、80、70、60,根据不同的范围输出相应的等级。如果分数小于 60,则输出
F。
条件符号
-
数值比较操作符- -lt:小于。
- -le:小于等于。
- -eq:等于。
- -ne:不等于。
- -ge:大于等于。
- -gt:大于。
-
字符串比较操作符- = 或 ==:相等(在多数 Bash 环境下,不过 “==” 可能在某些版本中不被支持)。
- !=:不相等。
- -z:判断字符串长度是否为 0。
- if - else 语句
-
文件判断使用到的参数
-e 文件名 如果文件存在则为真
-f 文件名 如果文件存在且为普通文件则为真
-d 文件名 如果文件存在且为目录则为真
-r 文件名 如果文件存在且可读则为真
-w 文件名 如果文件存在且可写则为真
-x 文件名 如果文件存在且可执行则为真
-s 文件名 如果文件存在且至少有一个字符则为真
-c 文件名 如果文件存在且为字符型特殊文件则为真
-b 文件名 如果文件存在且为块特殊文件则为真 -
条件判断使用到的逻辑操作符
①与 的表示方法:&&、-a
要求所有条件为真,则条件为真
②或 的表示方法:||、-o
要求任意条件为真,则条件为真
③非 的表示方法:!
要求条件反转为真时,条件为真
循环语句
- for 循环
- 基本语法:
for循环用于遍历一系列的值,通常是一个列表。基本格式为:
- 基本语法:
for variable in list; docommands
done
- 其中
variable是循环变量,用于依次存储list中的每个元素;list可以是一个用空格分隔的值列表、一个数组或者是一个由命令生成的结果集;commands是在每次循环中要执行的命令。 - 遍历列表示例:
- 例如,遍历一个数字列表并打印每个数字:
for number in 1 2 3 4 5; doecho $number
done
- 这里
number会依次取1、2、3、4、5,并在每次循环中通过echo命令输出。 - 遍历数组示例:
- 假设定义了一个数组
fruits,并使用for循环遍历它:
- 假设定义了一个数组
fruits=("apple" "banana" "cherry")
for fruit in "${fruits[@]}"; doecho $fruit
done
- 在这个例子中,
${fruits[@]}表示数组fruits的所有元素,fruit会依次取数组中的每个元素并输出。 - 使用命令生成列表示例:
- 可以使用命令的输出作为
for循环的列表。例如,通过ls命令列出当前目录下的文件,并逐个打印文件名:
- 可以使用命令的输出作为
for file in $(ls); doecho $file
done
- 不过要注意,这种方式如果文件名中有空格等特殊字符可能会出现问题,更安全的做法是使用
while循环和read命令结合来处理有特殊字符的文件名。
- while 循环
- 基本语法:
while循环在条件为真时持续执行命令块。基本格式为:
while [ condition ]; docommands
done
- 其中
[ condition ]是条件表达式,commands是每次循环要执行的命令。 - 简单计数示例:
- 例如,从 1 开始计数,直到数字达到 5:
count=1
while [ $count -le 5 ]; doecho $countcount=$((count + 1))
done
- 在这里,
count初始值为 1,每次循环判断count是否小于等于 5,如果是则打印count的值,然后将count的值加 1。当count大于 5 时,循环结束。 - 读取文件内容示例:
- 假设要逐行读取一个文件的内容,可以这样做:
while read line; doecho $line
done < file.txt
- 这个循环会不断读取
file.txt文件中的一行内容存储到line变量中,然后通过echo命令输出该行内容,直到文件结束。
- until 循环
- 基本语法和特点:
until循环与while循环相反,它在条件为假时持续执行命令块,直到条件变为真。基本格式为:
until [ condition ]; docommands
done
- 例如,计算从 1 加到某个数,直到总和大于等于 10:
sum=0
num=1
until [ $sum -ge 10 ]; dosum=$((sum + num))num=$((num + 1))
done
echo $sum
- 在这里,开始时
sum为 0,num为 1,每次循环将num累加到sum中,并将num加 1,直到sum大于等于 10,循环结束后输出sum的值。
- 循环控制语句
- break 语句:用于立即跳出循环。例如,在
for循环中,如果满足某个条件就跳出循环:
for i in 1 2 3 4 5; doif [ $i -eq 3 ]; thenbreakfiecho $i
done
- 这个循环在
i等于 3 时就会跳出,所以只会输出 1 和 2。 - continue 语句:用于跳过当前循环的剩余部分,直接进入下一次循环。例如:
for i in 1 2 3 4 5; doif [ $i -eq 3 ]; thencontinuefiecho $i
done
- 当
i等于 3 时,continue语句会跳过echo命令,直接进入下一次循环,所以会输出 1、2、4、5。
模块化编程
就是在本脚本中调用其他脚本的函数,以此来实现模块化编程
#!/bin/bash
source update.sh
update $n1 $n1
echo 在$0文件中运行update.sh的函数update
$0是一个特殊的变量,它代表当前脚本的文件名。当脚本被执行时,$0会被自动赋值为脚本文件的名称。(类似与Windows系统dos编程中的%0)source是一个命令(也可以用 “.” 来代替,如 “.”filename与source filename效果相同)。它的主要作用是在当前脚本环境中读取并执行另一个文件中的命令。(相当于文件包含)
Linux进程操作
查看寻找进程
- ps 命令
- 基本语法:
ps [options]。例如,ps -ef是最常用的查看进程的命令组合。-e选项表示显示所有进程,-f选项用于显示完整格式的信息。 - 详细解释:它会列出进程的 UID(用户 ID)、PID(进程 ID)、PPID(父进程 ID)、C(CPU 使用率)、STIME(进程启动时间)、TTY(终端类型)、TIME(累计 CPU 时间)和 CMD(命令行)等信息。例如,在命令行输入
ps -ef后,会看到类似如下的输出:
- 基本语法:
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 11:00? 00:00:01 /sbin/init
root 2 0 0 11:00? 00:00:00 [kthreadd]
- 其他常用选项:
ps -aux:显示所有包含其他用户的进程,并且以 BSD 风格输出。其中a选项表示显示所有终端下的进程,包括其他用户的进程;u选项以用户为中心组织输出;x选项表示显示没有控制终端的进程。
- top 命令
- 基本语法:
top。直接在命令行输入top后,会进入一个实时显示系统进程状态的界面。 - 详细解释:它会按照 CPU 使用率、内存使用率等对进程进行排序,并动态更新。在这个界面中,可以看到系统的负载情况(
load average),包括 1 分钟、5 分钟和 15 分钟的平均负载。每一行代表一个进程,显示的信息和ps -ef有一些重叠,如 PID、USER、PR(优先级)、NI(Nice 值)、VIRT(虚拟内存大小)、RES(物理内存大小)等。 - 操作方式:在
top界面中,可以通过按键来进行操作。例如,按P键可以按照 CPU 使用率排序进程,按M键可以按照内存使用率排序进程,按q键可以退出top界面。
- pgrep 命令
- 基本语法:
pgrep [options] pattern。例如,pgrep -l firefox用于查找名称中包含firefox的进程并显示其 PID 和名称。 - 详细解释:它是通过进程名称或者其他属性来查找进程的 PID。
-l选项表示在输出中同时显示进程名称。如果只需要 PID,可以不使用-l选项。
终止进程
- kill 命令
- 基本语法:
kill [signal] PID。例如,kill -9 1234表示强制终止 PID 为 1234 的进程。 - 详细解释:
signal是发送给进程的信号,默认信号是TERM(15),它会请求进程正常终止。如果进程没有响应TERM信号,可以使用-9(SIGKILL)信号来强制终止进程。不过,强制终止进程可能会导致数据丢失或系统不稳定,因为进程没有机会进行清理操作。 注意:在使用kill -9时要谨慎,尽量先尝试使用默认的TERM信号来终止进程。
- 基本语法:
- pkill 命令
- 基本语法:
pkill [options] pattern。例如,pkill -9 firefox用于强制终止所有名称中包含firefox的进程。 - 详细解释:它是通过进程名称或者其他属性来终止进程,和
pgrep命令类似,但是它的功能是终止进程而不是查找 PID。-9选项同样表示强制终止。
- 基本语法:
暂停与恢复进程
- 暂停进程:可以使用
kill -STOP PID来暂停一个进程。例如,kill -STOP 5678会暂停 PID 为 5678 的进程。此时,进程会暂停执行,并且不会占用 CPU 资源,直到收到恢复信号。 - 恢复进程:使用
kill -CONT PID来恢复一个被暂停的进程。例如,kill -CONT 5678会恢复之前被暂停的 PID 为 5678 的进程,使其继续正常运行。
后台运行
- 在后台运行进程
- 方法一:命令后加 & 符号。例如,
./long_running_script.sh &。这样,long_running_script.sh这个脚本就会在后台运行,命令行提示符会立即返回,用户可以继续在命令行进行其他操作。 - 方法二:使用 nohup 命令。
nohup command &,例如nohup python my_script.py &。nohup(no hang up)命令用于在用户退出登录后,进程仍然能够继续运行。它会将进程的输出重定向到nohup.out文件中(默认情况下)。
- 方法一:命令后加 & 符号。例如,
- 将后台进程恢复到前台
- 基本语法:
fg %n。其中n是作业号。可以通过jobs -l命令来查看后台作业的作业号和 PID。例如,如果jobs -l显示后台作业的作业号为 1,PID 为 9876,那么fg %1就可以将这个后台作业恢复到前台运行。
- 基本语法:
bash脚本编写
系统内存资源占用
#!/bin/bash
TOTAL_MEM=$(grep MemTotal /proc/meminfo | awk '{print $2}')
USE_MEM=$((TOTAL_MEM * 30 / 100))
USE_MEM_MB=$((USE_MEM / 1024))
while true;domemtester $USE_MEM_MB 1wait $!
done
-
TOTAL_MEM=$(grep MemTotal /proc/meminfo | awk '{print $2}') -
grep MemTotal /proc/meminfo:/proc/meminfo是 Linux 系统下一个虚拟文件,它包含了系统当前的内存信息。grep MemTotal命令用于在/proc/meminfo文件中查找包含 “MemTotal” 字样的行,该行记录了系统的总内存量信息。 -
awk '{print $2}':awk是一种文本处理工具。在这里,它用于从grep找到的包含 “MemTotal” 的行中提取第二个字段的值,也就是系统总内存量的值(以 KB 为单位)。最终将提取到的值赋给变量TOTAL_MEM。 -
USE_MEM=$((TOTAL_MEM * 30 / 100))
使用算术扩展($((...)))来计算需要占用的内存量。它将变量TOTAL_MEM(系统总内存量,以 KB 为单位)乘以 30 再除以 100,得到的结果就是要占用的内存量(同样以 KB 为单位),并将这个结果赋给变量USE_MEM
USE_MEM_MB=$((USE_MEM / 1024))
再次使用算术扩展,将变量USE_MEM(以 KB 为单位的要占用的内存量)除以 1024,从而将其转换为以 MB 为单位的内存量,并将结果赋给变量USE_MEM_MB
memtester $USE_MEM_MB 1
使用memtester工具进行内存测试。$USE_MEM_MB是前面计算并转换得到的要占用的内存量(以 MB 为单位),1在这里可能是memtester工具要求的某个参数(比如可能表示测试的次数或者其他相关参数,具体取决于memtester的版本和使用方式)。这个命令会启动memtester对指定的内存量进行测试。
-
wait $! -
$!是一个特殊的 Bash 变量,它表示最近在后台运行的命令的进程 ID(PID)。在这里,由于memtester命令刚刚在后台运行(因为memtachers通常会在后台执行内存测试操作),所以$!获取到的就是memtester的进程 ID。 -
wait命令用于等待指定的进程完成。在这里就是等待memtester的进程完成其内存测试操作,确保每次memtester测试都能完整执行完毕后再进入下一次循环。
tester $USE_MEM_MB 1`
使用memtester工具进行内存测试。$USE_MEM_MB是前面计算并转换得到的要占用的内存量(以 MB 为单位),1在这里可能是memtester工具要求的某个参数(比如可能表示测试的次数或者其他相关参数,具体取决于memtester的版本和使用方式)。这个命令会启动memtester对指定的内存量进行测试。
-
wait $! -
$!是一个特殊的 Bash 变量,它表示最近在后台运行的命令的进程 ID(PID)。在这里,由于memtester命令刚刚在后台运行(因为memtachers通常会在后台执行内存测试操作),所以$!获取到的就是memtester的进程 ID。 -
wait命令用于等待指定的进程完成。在这里就是等待memtester的进程完成其内存测试操作,确保每次memtester测试都能完整执行完毕后再进入下一次循环。
相关文章:
网络安全-Linux基础(bash脚本)
文章目录 bash脚本编写基础使用的脚本解析器/bin/bash(声明)bash脚本需要拥有执行权限bash脚本语法输入与输出函数的封装条件判断语句条件符号 循环语句模块化编程 Linux进程操作查看寻找进程终止进程暂停与恢复进程后台运行 bash脚本编写系统内存资源占…...
Lucene 和 Elasticsearch 中更好的二进制量化 (BBQ)
作者:来自 Elastic Benjamin Trent Lucene 和 Elasticsearch 中更好的二进制量化 (BBQ)。 嵌入模型输出 float32 向量,通常对于高效处理和实际应用来说太大。Elasticsearch 支持 int8 标量量化,以减小向量大小,同时保持性能。其他…...
jmeter基础05_第1个http请求
本节课使用网站“httpbin.org”进行基础的http请求全流程。 请求获取httpbin.org的首页: 请求方法:GET URL:http://httpbin.org 参数:无 1、操作步骤 ① 打开jmeter:命令行窗口输入“jmeter”并回车。 ② 添加线程组…...
C++builder中的人工智能(25):AI中的C++多线程std::thread
主要是为Ai算法中要使用到C的多线程,这是使用C11中的多线程std::thread。 在现代数学、物理和计算机科学中,优化和加速应用程序开发在编程中非常重要,以加快计算速度。多核心CPU和GPU通过核心和晶体管的数量得到了高度发展,为当今…...
RestSharp基本使用方法
关于RestSharp RestSharp is a library that allows you to make REST and HTTP calls in .NET applications. It supports serialization, parameters, async functions, and more. RestSharp是C#的一个WepApi库,支持通用的Web接口处理,支持序列化、参数…...
MySQL与Oracle对比及区别
一、比较 1、MySQL的特点 性能卓越,服务稳定,很少出现异常宕机; 开放源代码无版本制约,自主性及使用成本低; 历史悠久,社区和用户非常活跃,遇到问题及时寻求帮助; 软件体积小&#…...
NCC前端调用查询弹框
系统自带的查询模板 弹框 调启使用默认的 查询模板 是在 单据模板的 列表模板中,有个查询区域 ,查询区域就是查询模板内容如果在列表页做客开 新增按钮 调启查询模板 无问题,但是目前需求是需要再卡片页面下调启系统标准的调启模板代码 //调…...
【高中生讲机器学习】25. AdaBoost 算法详解+推导来啦!
创建时间:2024-11-08 首发时间:2024-11-13 最后编辑时间:2024-11-13 作者:Geeker_LStar 你好呀~这里是 Geeker_LStar 的人工智能学习专栏,很高兴遇见你~ 我是 Geeker_LStar,一名高一学生,热爱计…...
第三十七章 Vue之编程式导航及跳转传参
目录 一、编程式导航跳转方式 1.1. path 路径跳转 1.1.1. 使用方式 1.1.2. 完整代码 1.1.2.1. main.js 1.1.2.2. App.vue 1.1.2.3. index.js 1.1.2.4. Home.vue 1.1.2.5. Search.vue 1.2. name 命名路由跳转 1.2.1. 使用方式 1.2.2. 完整代码 1.2.2.1. main.js 1…...
vue 版本升级
Vue 3.4 升级了组件产值方式 v-model ,果断升级玩玩,记录一下升级过程 我的原Vue版本是3.2.13 升级到目前最新3.5.12 1. npm add vuelatest 2. npm add -g vue/clilatest 安装完成后记得查看是否有如下警告 这个警告是说eslint-plugin-vue package…...
探索Copier:Python项目模板的革命者
文章目录 **探索Copier:Python项目模板的革命者**1. 背景介绍:为何Copier成为新宠?2. Copier是什么?3. 如何安装Copier?4. 简单库函数使用方法4.1 创建模板4.2 从Git URL创建项目4.3 使用快捷方式4.4 动态替换文本4.5 …...
云原生后端深度解析
云原生后端 云原生后端是指专门为云计算环境设计的软件架构和服务。它强调了应用程序的设计、开发、部署和运维的方式,以充分利用云平台提供的弹性、可伸缩性和自动化能力。云原生技术主要包括容器化、微服务、不可变基础设施、声明式APIs等核心概念。下面是对这些…...
本地 SSL 证书生成神器,自己创建SSL
本地 SSL 证书生成神器,自己创建SSL 在本地环境中配置HTTPS一直以来是开发者的痛点,手动创建SSL证书、配置信任存储不仅繁琐,还容易出错。今天给大家介绍一个开源神器——mkcert!它能让你快速生成本地受信任的SSL/TLS证书,轻松打造安全的HTTPS开发环境,成为许多开发者的首…...
HCIP-快速生成树RSTP
一、RSTP是什么 STP(Spanning Tree Protocol )是生成树协议的英文缩写。该协议可应用于环路网络,通过一定的算法实现路径冗余,同时将环路网络修剪成无环路的树型网络,从而避免报文在环路网络中的增生和无限循环。 RS…...
企业级RAG(检索增强生成)系统构建研究
— 摘要 检索增强生成(Retrieval-Augmented Generation,RAG)技术已经成为企业在知识管理、信息检索和智能问答等应用中的重要手段。本文将从RAG系统的现状、方法论、实践案例、成本分析、实施挑战及应对策略等方面,探讨企业如何…...
MATLAB基础应用精讲-【数模应用】Google Caffeine算法
目录 前言 算法原理 Caffeine算法的背景和优势 什么是Caffeine算法 Caffeine算法的工作原理 常见的缓存数据淘汰算法 FIFO LRU LFU W-TinyLFU Caffeine W-TinyLFU 实现 元素驱逐 元素访问 Caffeine 的四种缓存添加策略 1. 手动加载 2. 自动加载 3. 手动异步加载…...
第十九届中国国际中小企业博览会将在粤开展
11月15日-18日,第十九届中国国际中小企业博览会(简称“中博会”)将在广州广交会展馆举办,共设8个展厅,展位总数约2800个,将举办超过30场系列配套活动,35个国家(地区)和国…...
云计算在智能交通系统中的应用
💓 博客主页:瑕疵的CSDN主页 📝 Gitee主页:瑕疵的gitee主页 ⏩ 文章专栏:《热点资讯》 云计算在智能交通系统中的应用 云计算在智能交通系统中的应用 云计算在智能交通系统中的应用 引言 云计算概述 定义与原理 发展历…...
b4tman / docker-squid 可快速安装运行的、容器型代理服务器 + podman
使用容器部署,省时省力。 使用镜像,目前的最大麻烦就是之前各大镜像源纷纷关闭,需要自己找到合适的、安全的镜像源。 幸好 docker-squid 推广在 ghcr.io,目前下载没有障碍。 注:ghcr.io 是 GitHub Container Registry …...
脉冲神经网络(Spiking Neural Network,SNN)学习(1)
目录 一、神经网络 1、神经元 2、激活函数 (1)常见的激活函数:Sigmoid函数 (2)常见的激活函数:ReLU(Rectified Linear Unit)函数 (3)常见的激活函数&…...
从WWDC看苹果产品发展的规律
WWDC 是苹果公司一年一度面向全球开发者的盛会,其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具,对过去十年 WWDC 主题演讲内容进行了系统化分析,形成了这份…...
循环冗余码校验CRC码 算法步骤+详细实例计算
通信过程:(白话解释) 我们将原始待发送的消息称为 M M M,依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)(意思就是 G ( x ) G(x) G(x) 是已知的)࿰…...
(二)TensorRT-LLM | 模型导出(v0.20.0rc3)
0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述,后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作,其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...
基于数字孪生的水厂可视化平台建设:架构与实践
分享大纲: 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年,数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段,基于数字孪生的水厂可视化平台的…...
大模型多显卡多服务器并行计算方法与实践指南
一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...
Android15默认授权浮窗权限
我们经常有那种需求,客户需要定制的apk集成在ROM中,并且默认授予其【显示在其他应用的上层】权限,也就是我们常说的浮窗权限,那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...
python报错No module named ‘tensorflow.keras‘
是由于不同版本的tensorflow下的keras所在的路径不同,结合所安装的tensorflow的目录结构修改from语句即可。 原语句: from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后: from tensorflow.python.keras.lay…...
【Go语言基础【13】】函数、闭包、方法
文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数(函数作为参数、返回值) 三、匿名函数与闭包1. 匿名函数(Lambda函…...
20个超级好用的 CSS 动画库
分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码,而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库,可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画,可以包含在你的网页或应用项目中。 3.An…...
【网络安全】开源系统getshell漏洞挖掘
审计过程: 在入口文件admin/index.php中: 用户可以通过m,c,a等参数控制加载的文件和方法,在app/system/entrance.php中存在重点代码: 当M_TYPE system并且M_MODULE include时,会设置常量PATH_OWN_FILE为PATH_APP.M_T…...
