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

Linux Shell 编程基础语法汇总

读 Jetson 脚本

把脚本设置为可执行

假设要将脚本 test.sh 设置为可执行,需要:

  1. 使用 chmod +x test.sh 改变文件模式为可执行;
  2. 使用 ./ 指定路径,比如先将当前工作区设置为脚本所做位置(使用 cd 命令),然后: ./test.sh

如果执行时出现异常信息:/bin/sh^M: bad interpreter: No such file or directory
原因:
是我们在 windows 下编写的脚本文件,直接放到 Linux 默认的是 dos 模式的文本,不被识别,需要处理下。
解决办法有 3 种:

  1. 用 vim 打开脚本文件,在命令模式下输入::set ff=unix, 然后输入 :wq 保存退出就可以了。(set ff=unix 是告诉 Vim,将文件的换行符从原来的格式转换为 Unix 格式。)
  2. 在 windows下转换脚本格式,用 Notepad 改变文件格式即可。File–>Conversions–>DOS->UNIX
  3. 在 Linux 下新建一个 .sh 文件,然后复制粘贴过去也是可以的。

感谢网友 QC(_) 的博文。

2、在 windows下转换脚本格式,用 Notepad 改变文件格式即可。File–>Conversions–>DOS->UNIX。

3、在 Linux 下新建一个 .sh 文件,然后复制粘贴过去也是可以的。

————————————————
版权声明:本文为CSDN博主「QC(_)」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_27195727/article/details/115698995

脚本参数 ${0}${1}${2}${3}${#}${@}

${0} 表示脚本或函数的名称。
${1}${2}${3} 等表示脚本或函数的第一、第二、第三个参数,以此类推。
${#} 表示传递给脚本的参数个数
`${@} 表示列出所有参数
举一个例子:

#!/bin/bashecho "Shell name: ${0}."
echo "Number of parameters: ${#}."
echo "The first parameter is ${1}."
echo "The second parameter is ${2}."
echo "The parameter list is ${@}."
exit 0

脚本命名为 shell_arg.sh,运行这个脚本:
./shell_arg.sh 1 2 3

输出内容为:
Shell name: ./shell_arg.sh.
Number of parameters: 3.
The first parameter is 1.
The second parameter is 2.
The parameter list is 1 2 3.

注意的是,¥{0} 会包含脚本的路径。

命令替换 $() 与命令 basename

$() 表示命令替换。这是一种特殊的变量,它会将括号内的命令执行的结果赋值给变量。

#!/bin/bashscript_name="$(basename "${0}")"
echo "${script_name}"
exit 0

运行这个脚本:./shell_arg.sh
输出内容为:shell_arg.sh

在这个例子中,命令 basename 用于提取文件路径中的文件名,并显示基本文件名。
具体而言,basename命令从文件路径中删除目录路径和符号链接,只保留文件名部分。这对于提取文件名而不需要完整的文件路径非常有用。
比如 basename /path/to/file.txt ,输出的内容为 file.txt

命令 readlinkdirname

readlink 命令用于读取符号链接(symbolic link)所指向的实际文件路径。

符号链接是一种特殊类型的文件,它包含了另一个文件或目录的引用。当读取符号链接时,实际上读取的是链接目标文件的路径,而不是链接文件本身。readlink命令允许用户通过解析符号链接来获取实际文件的路径。语法为:

readlink [-fhlnr] [-m pattern] [file...]

主要选项和功能如下:

-f:解析路径名中的符号链接,并将其替换为实际路径。
-l:将输入作为符号链接对待,而不是普通文件。
-n:不进行换行处理,将输出直接打印到标准输出。
-r:递归解析符号链接,直到找到最终目标。
-m:使用模式匹配来解析符号链接。

dirname 是一个常用的命令行工具,它用于提取文件路径中的目录部分。

具体来说,dirname 命令接受一个文件路径作为参数,并返回该路径所在的目录路径。它删除了文件名和文件扩展名部分,只保留目录路径。

#!/bin/bashscript_name="$(basename "${0}")"
script_path="$(readlink -f "${0}")"
script_dir="$(dirname "${script_path}")"
echo "${script_name}"
echo "${script_path}"
echo "${script_dir}"
exit 0

运行这个脚本:./shell_arg.sh
输出内容为:
script_name is shell_arg.sh
script_path is /home/zhzhchang/Documents/Vscode-shell-test/shell_arg.sh
script_dir is /home/zhzhchang/Documents/Vscode-shell-test

if 语句的测试条件

在Linux shell编程中,if语句可以用于进行条件测试。以下是常见的测试条件:

  1. 文件测试:

    • -f:检查文件是否存在且是一个普通文件。
    • -d:检查目录是否存在。
    • -e:检查文件或目录是否存在。
    • -r:检查文件是否可读。
    • -w:检查文件是否可写。
    • -x:检查文件是否可执行。
    • -h:文件或目录是否是符号链接
  2. 字符串测试:

    • -z:检查字符串是否为空。
    • -n:检查字符串是否非空。
  3. 整数比较:

    • -eq:等于
    • -ne:不等于
    • -lt:小于
    • -gt:大于
    • -le:小于等于
    • -ge:大于等于
  4. 逻辑测试:

    • -a:与(AND)
    • -o:或(OR)
    • !:非(NOT)
  5. 字符串比较:

    • =:字符串相等
    • !=:字符串不相等
    • -z!= 非空字符串(长度为零)
    • -n!= 空字符串(长度非零)
  6. 数值比较(需使用双括号):

    • ((a == b)):等于
    • ((a != b)):不等于
    • ((a < b)):小于
    • ((a > b)):大于
    • ((a <= b)):小于等于
    • ((a >= b)):大于等于需要使用双括号来表示数值比较。

set -eset +e

set -e 是一个用来设置脚本行为的命令。当脚本遇到任何错误时,它将会立即终止脚本的执行。set -e 通常用在脚本的开始部分,以确保脚本在遇到任何错误时能够立即停止,这样可以帮助开发者更快地定位和修复问题。

set +e 用于取消上述设置。

退出状态码:$?

在Unix和类Unix系统中,每个运行中的进程都有一个退出状态码(也称为返回值),当进程结束时返回给操作系统。这个退出状态码可以用来表示进程是否成功地完成了它的任务,或者是否遇到了错误。在 shell 脚本中,你可以使用 $? 来检查上一条命令的退出状态,以此为基础来决定下一步的操作。通常,0 表示成功,非零值 表示错误。

延时:sleepusleep

Linux shell环境下,常用的延时函数包括:

  1. sleep:秒延时。函数原型为 unsigned int sleep(unsigned int seconds)。例如:sleep(1) 表示延时一秒。
  2. usleep:微秒延时。函数原型为 int usleep(useconds_t usec)。注意,usec 需要小于 1000000。例如,usleep(1000) 表示延时 1 秒(1000 微秒)。

捕获和处理信号 trap

function cleanup() {
# ...
}
trap cleanup EXIT

在Shell脚本中,trap 是一个内置命令,用于捕获和处理信号。这里的 trap cleanup EXIT 意味着当脚本收到 EXIT 信号(通常是在脚本完成或由于某种错误导致脚本中断时发送的)时,它会执行 cleanup 函数。

信号的名字定义在头文件 signal. h 中,

  1. EXIT:退出,在脚本完成或由于某种错误导致脚本中断时发送的退出信号。
  2. INT:中断,当用户按下Ctrl+C时,会发送中断信号。
  3. QUIT:退出,当用户按下Ctrl+\时,会发送退出信号。
  4. ABRT:中止,通常印某些严重的错误而引发
  5. ALRM:报警,通常用于处理超时
  6. TERM:终止,通常在系统关机时发送

参数列表左移动:shift

在Shell脚本中,shift 命令用于将参数列表向左移动。shift 2 的意思是将参数列表向左移动两位。举个例子,如果你有如下的参数列表:arg1 arg2 arg3 arg4,执行 shift 2 后,原来的 arg1arg2 会被丢弃,新的参数列表变成:arg3 arg4

内置命令 source

作用有点类似于 C 中的 #include 指令,具体来说,当你在 source 命令后指定一个文件名(例如 source test.sh ),Shell 会首先读取 test.sh 文件中的所有命令,然后将这些命令插入到当前 Shell 环境中执行。这意味着,文件中定义的任何变量或函数都可以在当前 Shell 环境中直接使用。

source 命令的一个常见用途是加载环境变量。如果你修改了 .bashrc 或其他配置文件,你可以使用 source 命令让这些修改立即生效,而无需重新登录。例如,你可以在 .bashrc 文件中设置某些环境变量,然后在你需要这些环境变量的 Shell 会话中使用source 命令加载它们。

当前目录压栈并切换到新目录:pushd

在 Shell 中,pushd 是一个命令,用于将当前目录压入目录栈,并切换到指定的目录。具体而言,pushd 会将当前目录的路径保存到栈中,然后通过改变当前工作目录来切换到指定的目录。

以通过 popd 命令返回之前的目录。

需要注意的是,pushdpopd 命令是针对当前 Shell 会话的,而不是针对脚本本身。这意味着在脚本中执行这些命令只会影响当前 Shell 会话中的工作目录,而不会影响脚本执行完毕后的工作目录。

重定向标准输出和标准错误

  1. 将标准输出重定向到文件:
command > output.txt

这将执行 command 并将输出写入 output.txt 文件中。如果文件不存在,则会创建该文件;如果文件已存在,则会覆盖其内容。

  1. 将标准输出追加到文件的末尾:
command >> output.txt

类似于上面的方法,但是输出将追加到 output.txt 文件的末尾,而不是覆盖文件内容。

  1. 将标准输出和错误输出同时重定向到文件:
command > output.txt 2>&1

这会将标准输出和错误输出都重定向到 output.txt 文件中。2>&1 表示将标准错误(file descriptor 2)重定向到标准输出(file descriptor 1)。

  1. 将标准输出和错误输出都重定向到 /dev/null,也就是说,不显示任何输出信息:
command > /dev/null 2>&1

取出等号前的内容

cut -d'=' -f1

是一个用于处理文本的命令。这个命令的作用是按等号( ‘=’ )作为分隔符( -d 选项指定),选择每行的第一个字段( -f1 选项指定)。通常,这个命令用于处理键值对文本,例如在处理 INI 文件或环境变量导出时,它能提取出等号前的键。

生成随机密码

user_pass="$(date +%s | sha256sum | base64 | head -c 8)"

这段代码是在 Bash shell 环境中生成一个用户密码。它的工作方式如下:

  1. date +%s:这部分生成一个当前时间的 Unix 时间戳。

  2. sha256sum:这个命令对前面生成的时间戳进行 SHA-256 哈希运算。

  3. base64:这个命令将上一步的哈希结果进行 Base64 编码,使其变成一个可打印的字符。

  4. head -c 8:最后这个命令从编码后的结果中选取前8个字符。

因此,这段代码生成的是一个8个字符长度的Base64编码的SHA-256哈希值,它基于当前的Unix时间戳。这样的用户密码由于其随机性和基于时间的特性,可以提供较好的安全性。

获取参数列表中最后一个参数

nargs=$#;
target_rootdev=${!nargs};
  • $#是特殊的Shell变量,代表命令行参数的个数,这就是 nargs 的值。
  • ${!nargs} 是间接引用,它引用的是 nargs 变量的值所代表的变量。在这个上下文中,nargs 的值是$#,代表命令行参数的个数,因此 ${!nargs} 就引用了第 $# 个参数。

解析命令行参数

opstr+="b:c:d:e:f:h:i:k:m:n:o:p:rs:t:u:v:w:x:z:B:C:F:G:I:K:L:M:N:P:R:S:Z:-:";
while getopts "${opstr}" OPTION; docase $OPTION inb) BCTFILE=${OPTARG}; ;;Z) zflag="true"; ;;			# cmdline only-) case ${OPTARG} inno-root-check) no_root_check=1; ;;no-flash) no_flash=1; ;;esac;;*) usage allunknown 1; ;;esac;
done
  1. opstr+="b:c:d:e:f:h:i:k:m:n:o:p:rs:t:u:v:w:x:z:B:C:F:G:I:K:L:M:N:P:R:S:Z:-:";:这一行定义了一个字符串 opstr,并向其添加了多个字符,每个字符后面都有一个冒号。这些字符将作为选项用于后面的 getopts 命令。
  2. while getopts "${opstr}" OPTION; do:这是一个 while 循环,它将遍历通过 opstr 定义的每个选项。getopts 命令将解析命令行参数,并将每个选项的名称存储在变量 OPTION 中。
  3. case $OPTION in:这是一个 case 语句,它将根据 OPTION 的值来执行不同的操作。

接下来,代码定义了与每个选项对应的操作。例如,当选项是 b 时,将把变量 BCTFILE 设置为命令行参数的值。类似的,对于其他选项也有类似的操作。

  1. *) usage allunknown 1; ;;):这是一个通配符模式,用于处理不匹配任何特定选项的情况。在这种情况下,将执行 usage allunknown 1 命令,但该命令在给定的代码段中没有定义。
  2. esac; done:这是 case 语句和 while 循环的结束标记。

另外,在选项 - 的情况下,根据命令行参数的值,将执行不同的操作。例如,如果参数是 no-root-check,则将变量 no_root_check 设置为1,以此类推。

这个脚本主要用于处理命令行参数,并根据参数的值执行相应的操作。

检查函数是否存在

declare -F -f process_fuse_level > /dev/null 2>&1;

这段代码用于检查是否存在一个名为 process_fuse_level 的函数。

declare -F -f process_fuse_level 这句代码会检查是否存在名为 ‘process_fuse_level’ 的函数,如果存在,该函数会被声明为只读。

然后 /dev/null 2>&1 将标准输出和错误输出都重定向到 /dev/null,也就是说,不显示任何输出信息。
总的来说,这段代码用于在不产生任何输出(包括错误)的情况下检查一个函数是否存在。

查找并分割字符串

tegrarcm --uid | grep BR_CID | cut -d' ' -f2
  1. 命令 tegrarcm --uid 输出的信息为:BR_CID: 0x32101001642a170814000000120204c0
  2. grep 命令用于搜索文本,在给定的文件或标准输入中搜索匹配 ‘BR_CID’ 的行,其输出通过管道传送给 cut 命令
  3. cut 命令用于从文本中提取字段,这里的 -d' ' 指定了字段分隔符为空格,-f2 表示提取第二个字段。因此,cut 命令将从 grep 命令输出的每一行中提取第二个字段(以空格分隔),并将其输出到标准输出。
  4. 最终输出为:0x32101001642a170814000000120204c0

字符串切片

ECID="0x32101001642a170814000000120204c0";
flval="${ECID:2:1}"
  1. 第一行定义了一个名为 ECID 的变量,并赋值为一个十六进制的字符串。
  2. flval="${ECID:2:1}":这一行使用了字符串切片操作。${ECID:2:1} 表示从 ECID 的第 2 个字符开始(索引从 0 开始计算),截取长度为 1 的片段。所以这行代码将 ECID 的第 3 个字符(在 ECID 中索引为 2 的字符)赋值给 flval

这段代码在 ECID 为 “0x32101001642a170814000000120204c0” 的情况下,flval 的值将是 “3”。

默认参数扩展 :-

ROOTFS_TYPE="${ROOTFS_TYPE:-ext4}";

这行 Shell 代码定义了一个变量 ROOTFS_TYPE,如果 ROOTFS_TYPE 这个变量在之前已经定义过,并且其值不是空字符串,那么这行代码就不会改变 ROOTFS_TYPE 的值。但如果 ROOTFS_TYPE 这个变量之前没有定义,或者其值为空字符串,那么这行代码就会将其值设置为 ext4。这是 Shell 中的默认参数扩展(Parameter Expansion)的用法。

执行存储在字符串中的命令:eval

eval 命令用于执行存储在字符串中的命令,并返回结果。

这个命令会解析并执行其参数指定的字符串中的命令,然后将结果输出到标准输出。例如,如果你有一个字符串包含了一个命令,你可以使用 eval 来执行那个命令。

注意,由于 eval 会执行字符串中的任意命令,因此在使用时需要特别小心,避免执行不安全的命令。

定义空数组

pre_deb_list=()

最小化 Jetson 磁盘

负载测试:fio

#读测试
fio -filename=test2g -direct=1 -rw=read -bs=1M -size=2G -numjobs=64 -runtime=10 -group_reporting -name=file1#写测试
fio -filename=test2g -direct=1 -rw=write -bs=1M -size=2G -numjobs=64 -runtime=10 -group_reporting -name=file1
  • -filename=test2g: 指定测试的文件名为’test2g’。注意会在工作目录下生成 test2g 文件,测试完成后要手动删除
  • -direct=1: 直接I/O模式,绕过页缓存。
  • -rw=read: 测试读取操作,替换之前的write。
  • -rw=write表示这是写入测试
  • -bs=1M: 块大小设为1M。
  • -size=2G: 测试的文件大小为2G。
  • -numjobs=64: 同时进行的作业数设为64。
  • -runtime=10: 每个作业运行10秒。
  • -group_reporting: 启用组报告模式,可以同时报告所有作业的总体情况。
  • -name=file1: 给这个测试任务命名为’file1’。
fio-3.1
Starting 64 processes
file1: Laying out IO file (1 file / 2048MiB)
Jobs: 64 (f=64): [R(64)][100.0%][r=88.0MiB/s,w=0KiB/s][r=88,w=0 IOPS][eta 00m:00s]
file1: (groupid=0, jobs=64): err= 0: pid=4780: Thu Mar  2 15:07:30 2023read: IOPS=88, BW=88.8MiB/s (93.1MB/s)(952MiB/10722msec)clat (msec): min=14, max=10702, avg=695.81, stdev=2470.19lat (msec): min=14, max=10702, avg=695.81, stdev=2470.19clat percentiles (msec):|  1.00th=[   22],  5.00th=[   23], 10.00th=[   23], 20.00th=[   23],| 30.00th=[   23], 40.00th=[   23], 50.00th=[   23], 60.00th=[   23],| 70.00th=[   23], 80.00th=[   23], 90.00th=[  372], 95.00th=[ 9597],| 99.00th=[10537], 99.50th=[10671], 99.90th=[10671], 99.95th=[10671],| 99.99th=[10671]bw (  KiB/s): min= 2048, max=47772, per=25.31%, avg=23012.47, stdev=21602.27, samples=80iops        : min=    2, max=   46, avg=22.20, stdev=20.83, samples=80lat (msec)   : 20=0.11%, 50=88.97%, 500=2.10%, 750=2.31%, >=2000=6.51%cpu          : usr=0.00%, sys=0.07%, ctx=1095, majf=0, minf=17569IO depths    : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0%submit    : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%complete  : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%issued rwt: total=952,0,0, short=0,0,0, dropped=0,0,0latency   : target=0, window=0, percentile=100.00%, depth=1Run status group 0 (all jobs):READ: bw=88.8MiB/s (93.1MB/s), 88.8MiB/s-88.8MiB/s (93.1MB/s-93.1MB/s), io=952MiB (998MB), run=10722-10722msecDisk stats (read/write):mmcblk0: ios=1886/1, merge=0/3, ticks=1126360/4332, in_queue=1321704, util=98.65%

统计根目录下所有文件夹的大小

sudo du -ah --max-depth=1 /
  • -a:显示所有的文件和目录,而不是只显示目录的总大小
  • -h:以人类可读模式显示(使用 K、M、G 等单位)
  • --max-depth:限制递归深度为 1。
  • /:从根目录开始计算

列出已经安装的软件包(带大小)

dpkg-query -Wf '${Installed-Size;8} KiB \t${Package;-30}\t${binary:Summary}\n'

按照软件包大小排序列出所有已经安装的软件

dpkg-query -Wf '${Installed-Size;8} KiB \t${Package;-30}\t${binary:Summary}\n' | sort -n -t$'\t' -k 1,1

相关文章:

Linux Shell 编程基础语法汇总

读 Jetson 脚本 把脚本设置为可执行 假设要将脚本 test.sh 设置为可执行&#xff0c;需要&#xff1a; 使用 chmod x test.sh 改变文件模式为可执行;使用 ./ 指定路径&#xff0c;比如先将当前工作区设置为脚本所做位置&#xff08;使用 cd 命令&#xff09;&#xff0c;然后…...

github 中关于Pyqt 的module view 操作练习

代码摘自&#xff0c;Pyside6 中的示例代码部分 # -*- coding: utf-8 -*- import sys from PySide6.QtWidgets import * from PySide6.QtGui import * from PySide6.QtCore import * from PySide6.QtSql import QSqlDatabase, QSqlQueryModel, QSqlQuery import os os.chdir(os…...

【操作系统】磁臂黏着现象

文章目录 什么是磁臂黏着&#xff1f;为什么 FCFS&#xff08;First Come First Service&#xff09; 可以避免磁臂黏着&#xff1f;为什么 scan&#xff0c;cscan 会产生磁臂黏着&#xff1f;为什么 NsetpScan 可以避免磁臂黏着&#xff1f;NScan 原理简介NScan 避免磁臂黏着的…...

面试题-React(十二):React中不可变数据的力量

一、不可变数据的概念 不可变数据意味着数据一旦创建&#xff0c;就不能被更改。在React中&#xff0c;每次对数据的修改都会返回一个新的数据副本&#xff0c;而不会改变原始数据。这种方式确保了数据的稳定性和一致性。 二、Props中的不可变数据 在React中&#xff0c;组件…...

conda 创建虚拟环境

1.为什么要创建虚拟环境 我们在做开发或者跑论文实验可能会同时进行多个任务&#xff0c;这些任务可能会依赖于不同的python环境&#xff0c;比如有的用到3.6有的用到3.7&#xff0c;这时我们创建不同版本的python&#xff0c;放到虚拟环境中给不同的任务分别提供其所需要的版本…...

Java的HTML转义工具

引言 在开发web应用程序时&#xff0c;我们经常需要处理用户输入的数据并将其显示在网页上。然而&#xff0c;用户输入的数据可能包含HTML标签或特殊字符&#xff0c;如果直接在网页上显示这些数据&#xff0c;会导致XSS攻击或显示错误的结果。为了解决这个问题&#xff0c;我…...

Flask (Jinja2) 服务端模板注入漏洞复现

文章目录 Flask (Jinja2) 服务端模板注入漏洞1.1 漏洞描述1.2 漏洞原理1.3 漏洞危害1.4 漏洞复现1.4.1 漏洞利用 1.5 漏洞防御 Flask (Jinja2) 服务端模板注入漏洞 1.1 漏洞描述 说明内容漏洞编号漏洞名称Flask (Jinja2) 服务端模板注入漏洞漏洞评级高危影响版本使用Flask框架…...

file_get_contents 与curl 的对比

在讲区别前大家对file_get_contents 只是停留在get 方法其实file_get_contents也可以进行post请求该方法如下 $content []; $options array(http > array(method > POST,// header 需要设置为 JSONheader > Content-type:application/json,content > json_en…...

两个el-date-picker进行互相关联

elementui两个el-date-picker进行互相关联_element-ui两个时间控件进行联动_沈清秋.的博客-CSDN博客...

python openai playground使用教程

文章目录 playground介绍Playground特点模型设置和参数选择四种语言模型介绍 playground应用构建自己的playground应用playground python使用 playground介绍 OpenAI Playground是一个基于Web的工具&#xff0c;旨在帮助开发人员测试和尝试OpenAI的语言模型&#xff0c;如GPT-…...

DOCKER本地仓库

概述 随着docker的应用越来越多&#xff0c;安装部署越来越方便&#xff0c;批量自动化的镜像生成和发布都需要docker仓库的本地化应用。 试用了docker的本地仓库功能&#xff0c;简单易上手&#xff0c;记录下来以备后用。 环境 centos&#xff1a;CentOS release 7.0 (F…...

python写着玩

摄氏温度转化为华氏温度 #摄氏温度转化为华氏温度 celsius float(input("请输入摄氏度&#xff1a;")) fahrenheit(9/5)*celsius32 print("华氏温度是%.1f"%fahrenheit) 计算圆柱体的体积 #计算圆柱体的体积 radius , length map( float,input("请…...

K8s Kubernetes Namespave Pod Label Deployment Service 实战

本章节将介绍如何在kubernetes集群中部署一个nginx服务&#xff0c;并且能够对其进行访问。 Namespace Namespace是kubernetes系统中的一种非常重要资源&#xff0c;它的主要作用是用来实现多套环境的资源隔离或者多租户的资源隔离。 默认情况下&#xff0c;kubernetes集群中…...

SpringBoot使用随机端口启动

1.获取可用端口工具类 import java.net.InetAddress; import java.net.Socket; import java.util.Random;public class ServerPortUtil {private static final int MAX_PORT 65535;private static final int MIN_PORT 8000;public static String getAvailablePort() {Random…...

NewStarCTF2023week2-ez_sql

闭合之后尝试判断字段数&#xff0c;存在WAF&#xff0c;使用大小写绕过&#xff08;后面的sql语句也需要进行大小写绕过&#xff09; ?id1 Order by 5-- 测出有5列 ?id1 Order by 6-- 查一下数据库名、版本、用户等信息 ?id1Union Select database(),version(),user(),4,…...

力扣-434.字符串中的单词数

Idea 利用C中的 stringstream 指定字符分割字符串 class Solution { public:int countSegments(string s) {int cnt 0;stringstream ss(s);string word;while(ss >> word){cnt;}return cnt;} };...

【ALO-BP预测】基于蚁狮算法优化BP神经网络回归预测研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

分布式存储系统Ceph应用详解

Ceph的应用 一、Ceph 存储池(Pool)1.1 Ceph存储池的基本概念1.2 原理1.3 一个Pool资源池应该包含多少PG数&#xff1f;1.4 Ceph 存储池相关管理命令1.4.1 创建1.4.2 查看1.4.3 修改1.4.4 删除 二、 CephFS文件系统MDS接口三、创建CephFS文件系统MDS接口3.1 服务端操作Step1 在管…...

人工智能轨道交通行业周刊-第63期(2023.10.9-10.15)

本期关键词&#xff1a;一体化智慧列车运行系统、车辆数字化运维管理、智能传感器、PHM、LKJ 1 整理涉及公众号名单 1.1 行业类 RT轨道交通人民铁道世界轨道交通资讯网铁路信号技术交流北京铁路轨道交通网上榜铁路视点ITS World轨道交通联盟VSTR铁路与城市轨道交通RailMetro…...

OJ项目——统一数据格式返回,我是如何处理的?

目录 前言 OJ项目中是如何处理的 1、准备一个类&#xff0c;作为统一的数据返回格式 2、准备一个类&#xff0c;实现ResponseBodyAdvice接口 3、我们如何写返回值更好 4、进一步优化返回值 小结 前言 关于SpringBoot的同一功能处理&#xff0c;本博主在这篇博客已经有介…...

基于算法竞赛的c++编程(28)结构体的进阶应用

结构体的嵌套与复杂数据组织 在C中&#xff0c;结构体可以嵌套使用&#xff0c;形成更复杂的数据结构。例如&#xff0c;可以通过嵌套结构体描述多层级数据关系&#xff1a; struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

Spark 之 入门讲解详细版(1)

1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室&#xff08;Algorithms, Machines, and People Lab&#xff09;开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目&#xff0c;8个月后成为Apache顶级项目&#xff0c;速度之快足见过人之处&…...

微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】

微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来&#xff0c;Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...

Leetcode 3577. Count the Number of Computer Unlocking Permutations

Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接&#xff1a;3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯&#xff0c;要想要能够将所有的电脑解锁&#x…...

macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用

文章目录 问题现象问题原因解决办法 问题现象 macOS启动台&#xff08;Launchpad&#xff09;多出来了&#xff1a;Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显&#xff0c;都是Google家的办公全家桶。这些应用并不是通过独立安装的…...

BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践

6月5日&#xff0c;2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席&#xff0c;并作《智能体在安全领域的应用实践》主题演讲&#xff0c;分享了在智能体在安全领域的突破性实践。他指出&#xff0c;百度通过将安全能力…...

使用 SymPy 进行向量和矩阵的高级操作

在科学计算和工程领域&#xff0c;向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能&#xff0c;能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作&#xff0c;并通过具体…...

论文笔记——相干体技术在裂缝预测中的应用研究

目录 相关地震知识补充地震数据的认识地震几何属性 相干体算法定义基本原理第一代相干体技术&#xff1a;基于互相关的相干体技术&#xff08;Correlation&#xff09;第二代相干体技术&#xff1a;基于相似的相干体技术&#xff08;Semblance&#xff09;基于多道相似的相干体…...

Selenium常用函数介绍

目录 一&#xff0c;元素定位 1.1 cssSeector 1.2 xpath 二&#xff0c;操作测试对象 三&#xff0c;窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四&#xff0c;弹窗 五&#xff0c;等待 六&#xff0c;导航 七&#xff0c;文件上传 …...

Linux nano命令的基本使用

参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时&#xff0c;显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...