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

linux运维之shell编程

Shell 编程在系统运维中及其重要

1. Shell 编程概述

Shell 是一种命令行解释器,能够执行操作系统的命令。Shell 脚本是一个包含一系列 Shell 命令的文件,它可以被执行,以自动化和批量处理任务。常用的 Shell 类型包括 bash、sh、zsh 等。Shell 编程本质上是利用这些命令和控制结构(如条件判断、循环等)来创建自动化任务。

2. 自动化系统管理任务

运维工程师的工作常常包括重复性高的任务,Shell 编程可以将这些任务自动化,减少手动操作,提高效率和减少错误。

常见的自动化任务包括:

  • 备份:自动定期备份文件、数据库、配置文件等。
  • 日志轮转和清理:定期清理过期的日志文件,防止占满磁盘空间。
  • 安全检查:定期扫描系统中的潜在安全风险(如非法登录、弱密码等)。
  • 监控系统状态:定期检查系统的 CPU、内存、磁盘空间等状态,并在出现异常时发送警报。

示例:自动化备份脚本

#!/bin/bash
# 自动备份脚本
BACKUP_DIR="/data"
DEST_DIR="/backup"
DATE=$(date +%Y%m%d%H%M)
TAR_FILE="${DEST_DIR}/backup_${DATE}.tar.gz"

# 创建备份
tar -czf $TAR_FILE $BACKUP_DIR

# 输出备份日志
echo "Backup completed: $TAR_FILE"

这个脚本会自动备份指定的 /data 目录,并将备份文件保存到 /backup 目录下,文件名包含当前日期时间,便于管理。

3. 批量操作与配置管理

在大型系统中,可能有大量的服务器需要统一配置、更新、安装软件等。使用 Shell 脚本可以在多个服务器上批量执行命令,从而避免逐台操作。

示例:批量安装软件

#!/bin/bash
# 批量安装软件包
SERVERS=("server1" "server2" "server3")
PACKAGE="nginx"

for SERVER in "${SERVERS[@]}"
do
  echo "Installing $PACKAGE on $SERVER..."
  ssh $SERVER "sudo apt-get install -y $PACKAGE"
done

该脚本通过 SSH 远程连接到多个服务器,批量安装指定的软件包。

4. 系统健康监控与报警

Shell 编程非常适合于实现基础的系统监控和报警机制。例如,运维人员可以编写脚本定期检查系统的磁盘使用情况、内存状态等,并在发现异常时触发邮件或短信报警。

示例:磁盘空间监控脚本

#!/bin/bash
# 磁盘空间监控
THRESHOLD=90
DISK_USAGE=$(df / | grep / | awk '{ print $5 }' | sed 's/%//g')

if [ $DISK_USAGE -gt $THRESHOLD ]; then
  echo "Warning: Disk usage is over ${THRESHOLD}%!" | mail -s "Disk Space Alert" admin@example.com
fi

这个脚本会定期检查根目录(/)的磁盘使用情况,如果超过设定的阈值(如 90%),则通过邮件提醒管理员。

5. 定时任务与调度

在运维工作中,定时任务非常常见,Shell 脚本与 Linux 的定时任务工具 cron 配合使用,可以自动定期执行脚本。

示例:使用 cron 定时执行备份脚本

假设你已经写好了一个备份脚本 /home/admin/backup.sh,并希望它每天凌晨 1 点执行一次。可以通过以下步骤设置 cron 任务:

crontab -e

在 crontab 文件中添加以下内容:

0 1 * * * /bin/bash /home/admin/backup.sh

这行表示每天凌晨 1 点运行 /home/admin/backup.sh 脚本。

6. 日志分析与处理

运维工程师经常需要分析大量的日志文件(如 Apache/Nginx 日志、系统日志、应用程序日志等),Shell 脚本提供了强大的文本处理能力,能够提取关键信息并生成报告或发送警报。

示例:分析 Apache 日志中的错误
# 检查 Apache 错误日志
LOG_FILE="/var/log/apache2/error.log"
ERROR_LOG="/var/log/apache2/error_report.txt"

# 查找错误日志中包含 "error" 的行,并输出到报告文件
grep "error" $LOG_FILE > $ERROR_LOG

# 发送报告邮件
mail -s "Apache Error Log Report" admin@example.com < $ERROR_LOG

这个脚本会分析 Apache 错误日志,提取包含“error”关键字的行,并将结果保存到报告文件中,再将报告通过邮件发送给管理员。

7. 故障排除与修复

Shell 脚本在故障排除中同样发挥重要作用。在系统出现故障时,运维工程师可以编写脚本自动检测系统状态、排除常见问题,甚至在某些情况下直接执行修复操作。

示例:检查并重启 Apache 服务
# 检查 Apache 服务状态,如果未运行,则重启
SERVICE="apache2"
STATUS=$(systemctl is-active $SERVICE)

if [ "$STATUS" != "active" ]; then
  echo "$SERVICE is down. Restarting..."
  systemctl restart $SERVICE
  echo "$SERVICE has been restarted." | mail -s "$SERVICE restart notification" admin@example.com
else
  echo "$SERVICE is running normally."
fi

这个脚本会检查 Apache 服务是否处于运行状态,如果没有运行则尝试重启,并通过邮件通知管理员。

8. 安全运维

运维工程师需要确保系统的安全,Shell 脚本可以用于检测和修复系统中的安全问题。例如,检查不安全的用户配置、密码策略、权限问题等。

示例:检查弱密码用户

#!/bin/bash
# 检查系统中是否存在弱密码用户(如空密码)
for user in $(cut -d: -f1 /etc/passwd); do
  PASSWORD=$(sudo grep "^$user" /etc/shadow | cut -d: -f2)
  if [ -z "$PASSWORD" ]; then
    echo "User $user has no password set!" | mail -s "Weak password detected" admin@example.com
  fi
done

这个脚本会检查系统中所有用户的密码,发现空密码用户时会发送警报。

总结:Shell 编程在系统运维中的核心作用

Shell 编程对系统运维工程师来说是一项非常重要的技能,它能够帮助你:

  • 自动化重复性工作,提高工作效率。
  • 处理和分析系统日志,快速识别问题。
  • 批量管理和配置服务器,节省时间并减少人为错误。
  • 定期监控系统健康状态,及时发现潜在问题。
  • 故障排除与修复,自动化恢复系统服务。
  • 增强系统安全性,通过脚本自动化检查和修复安全漏洞。

一,变量

变量是存储数据的容器,用于在脚本中传递信息、操作数据等。根据其作用范围和使用场景,Shell 中的变量可以分为 两种主要类型

1. 环境变量(Environment Variables)

环境变量是影响系统或程序行为的全局变量。它们通常用于存储操作系统、应用程序、或者 Shell 的配置信息。环境变量不仅在当前 Shell 中有效,而且在启动该 Shell 的所有子进程中都有效。

环境变量的特点:

  • 环境变量是全局有效的。
  • 通常由操作系统或程序自动设置,用户也可以自定义。
  • 它们通常用于配置系统或用户的行为,如 $PATH、$HOME、$USER 等。

常见的环境变量:

  • $HOME:当前用户的家目录路径。
  • $USER:当前用户的用户名。
  • $PATH:系统查找可执行文件的路径列表。
  • $SHELL:当前 Shell 的路径,例如 /bin/bash。

设置和查看环境变量:

  • 设置环境变量
    export VAR_NAME="value"
    例如,设置环境变量 MY_VAR:
    export MY_VAR="Hello, World!"
  • 查看环境变量
    echo $MY_VAR
  • 查看所有环境变量
    printenv

环境变量的作用:

环境变量对系统或应用程序的行为至关重要。例如,$PATH 变量决定了 Shell 如何查找可执行文件,当你在命令行输入一个命令时,系统会按照 $PATH 中的目录顺序查找该命令对应的文件。

2. 局部变量(Local Variables)

局部变量是仅在当前 Shell 或脚本的作用域内有效的变量。它们的生命周期仅限于脚本执行期间,脚本执行结束后,这些变量会被销毁。局部变量通常用于存储脚本中的临时数据或计算结果。

局部变量的特点:

  • 局部变量只能在当前 Shell 会话或者脚本中访问。
  • 它们不会影响到其他 Shell 进程或脚本的执行。
  • 局部变量不需要使用 export 来设置。

设置局部变量:

  • 设置局部变量
    VAR_NAME="value"
    例如,设置局部变量 MY_VAR:
    MY_VAR="Hello, World!"
  • 查看局部变量
    echo $MY_VAR

局部变量的作用:

局部变量通常用于保存临时数据、脚本参数、计算结果等。例如,在一个脚本中,你可能需要将某些计算结果存储在变量中,并在脚本结束后释放这些变量。

局部变量与环境变量的区别

特点

环境变量

局部变量

作用范围

全局有效,影响子进程。

仅在当前 Shell 或脚本中有效。

设置方式

使用 export 命令导出,例如 export VAR=value。

直接设置变量名和值,例如 VAR=value。

常见用途

配置系统、应用程序或 Shell 行为。

存储脚本中的临时数据或计算结果。

生命周期

直到 Shell 会话结束,或者被显式修改或删除。

仅在当前脚本或命令会话中有效,执行结束后失效。

影响范围

可以影响所有子进程及 Shell 会话。

只在当前 Shell 会话或脚本内部有效。

实例说明:

1. 环境变量示例

#!/bin/bash
# 设置环境变量
export MY_PATH="/usr/local/bin"

# 查看环境变量
echo "The PATH is: $MY_PATH"

这个脚本中,MY_PATH 是一个环境变量,export 使得它在当前 Shell 会话和任何子进程中都有效。

2. 局部变量示例

#!/bin/bash
# 设置局部变量
MY_VAR="Hello, Shell!"

# 查看局部变量
echo "Message: $MY_VAR"

在这个脚本中,MY_VAR 是一个局部变量,只有在当前脚本运行时有效,脚本执行结束后它就会消失。

3. 环境变量与局部变量的混合使用

#!/bin/bash
# 设置环境变量
export HOME_DIR="/home/user"

# 设置局部变量
FILE_PATH="$HOME_DIR/data/file.txt"

echo "Home Directory: $HOME_DIR"
echo "File Path: $FILE_PATH"

这个脚本中,HOME_DIR 是环境变量,可以在其他 Shell 会话或脚本中使用。而 FILE_PATH 是局部变量,仅在当前脚本中有效。

总结

  • 环境变量:全局有效,影响当前 Shell 会话及其子进程,通常用于系统配置和用户信息。
  • 局部变量:仅在当前 Shell 会话或脚本中有效,适用于存储脚本中的临时数据。

二,变量应用实例

1,将系统时间输入到变量

2,将/etc/passwd文件进行备份,存储在/tmp下并且以当前时间作为后缀名

cp /etc/passwd /tmp/passwd_$(date +%F_%R)

ls /tmp/

案例一,利用脚本创建文件和文件夹

1,编写脚本 vim file.sh

#!/bin/bash

#touch mkdir

touch 1.txt

mkdir /root/test1

ls /root

2,给脚本赋予执行权限,然后执行

file.sh文件属主读写执行权限,属组执行权限,其他人读执行权限

案例二,编写shell脚本用于创建user1用户,并且设置密码123456

1,编写脚本 vim user.sh

#!/bin/bash

useradd user1 

echo "user1:123456" | chpasswd

#echo 123456 | passwd --stdin user1 &> /dev/null

echo "用户 user1 创建成功,密码已设置为 123456"

2,给执行权限再执行

3,验证实验效果

三,引用与转义

单引号(引用)

单引号用于将字符串中的所有字符都作为普通字符处理,不会解析其中的特殊字符。例如:

array=10
echo '$array' 
# 输出: $array

在上面的例子中,$array 被单引号括起来,因此 $ 符号不会被解释为变量的前缀,而是作为普通的字符输出

双引号(弱引用)

双引号允许字符串中的大多数字符被解释为普通字符,但会解析一些特殊字符,如 $、反引号和转义符。例如:

array=10
echo "$array" 
# 输出: 10

在这个例子中,双引号内的 $array 被解析为变量 array 的值,即 10

转义

转义是指使用转义符(通常是反斜杠 \)来改变紧随其后的字符的含义。在Shell中,转义符可以使特殊字符失去其特殊含义,而仅作为普通字符处理。例如:

echo \$Dollar  # 输出: $Dollar

在这个例子中,$ 符号前面有一个反斜杠 \,因此 $ 符号被当作普通字符输出,而不是被解释为变量的前缀

四,shell脚本实现四则运算

1,编写脚本 vim  calc.sh

#!/bin/bash

#test1

read -p "please input two numbers:" x y

echo $x + $y = $(expr $x + $y)

echo $x - $y = $(expr $x - $y)

echo $x \* $y = $(expr $x \* $y)

echo $x / $y = $(expr $x / $y)

2,给权限执行 chmod u+x calc.sh

五,无执行权限脚本执行

使用bash执行脚本(使用bash -x 显示脚本执行过程)

bash 1.sh

使用source执行脚本

source 1.sh

六,条件测试概述

在Shell编程中,条件测试用于判断某个条件是否为真。条件测试的结果通常用于控制程序的流程,例如决定是否执行某个命令或代码块。Shell提供了多种条件测试方式,包括文件测试、字符串比较、数值比较等。

文件测试

文件测试用于检查文件或目录的属性。常用的文件测试操作符包括:

  • -e FILE:检查文件是否存在。
  • -f FILE:检查文件是否存在且为普通文件。
  • -d DIR:检查目录是否存在。
  • -r FILE:检查文件是否可读。
  • -w FILE:检查文件是否可写。
  • -x FILE:检查文件是否可执行。
  • -s FILE:检查文件是否存在且大小大于0。

示例:

if [ -e "#测试文件的正确路径" ]; then
    echo "File exists."
else
    echo "File does not exist."
fi

数值比较

数值比较用于比较两个数值的大小。常用的数值比较操作符包括:

  • -eq:检查两个数值是否相等。
  • -ne:检查两个数值是否不相等。
  • -lt:检查第一个数值是否小于第二个数值。
  • -le:检查第一个数值是否小于或等于第二个数值。
  • -gt:检查第一个数值是否大于第二个数值。
  • -ge:检查第一个数值是否大于或等于第二个数值。

示例:

read -p "Please enter your num1: " num1

read -p "Please enter your num2: " num2
if [ "$num1" -lt "$num2" ]; then
    echo "num1 is less than num2."
else
    echo "num1 is not less than num2."
fi

代码示例

以下是一个简单的Shell脚本示例,展示了如何根据分数判断ABCD四个等级:

#!/bin/bash
# 获取用户输入的分数
read -p "请输入分数: " score
 

# 根据分数判断等级
if (( score >= 90 )); then
    echo "等级: A"
elif (( score >= 80 )); then
    echo "等级: B"
elif (( score >= 70 )); then
    echo "等级: C"
elif (( score >= 60 )); then
    echo "等级: D"
else
    echo "等级: F"
fi

解释

  1. 获取用户输入:使用read命令获取用户输入的分数。
  2. 条件判断
    • 如果分数大于等于90,输出“等级: A”。
    • 如果分数大于等于80且小于90,输出“等级: B”。
    • 如果分数大于等于70且小于80,输出“等级: C”。
    • 如果分数大于等于60且小于70,输出“等级: D”。
    • 如果分数小于60,输出“等级: F”。
  3. 输出结果:根据条件判断的结果,输出对应的等级。

实例练习

单分支:

1、编写一个 Shell 脚本,如果系统中安装了 httpd 软件,则输出 “httpd 已安装”。

#!/bin/bash

# 检查 httpd 是否安装

if command -v httpd &> /dev/null; then

    echo "httpd 已安装"

else

    echo "httpd 未安装"

fi

2、编写一个 Shell 脚本,判断当前系统时间是否在 9 点到 18 点之间,如果在则输出 “当前处于工作时间”。

#!/bin/bash

# 获取当前小时

current_hour=$(date +"%H")

# 判断当前时间是否在 9 点到 18 点之间

if [ "$current_hour" -ge 9 ] && [ "$current_hour" -lt 18 ]; then

    echo "当前处于工作时间"

else

    echo "当前不处于工作时间"

fi

双分支

1、编写一个 Shell 脚本,提示用户输入一个数字,然后判断该数字是正数还是负数,并分别输出相应的结果。

#!/bin/bash

# 提示用户输入一个数字

echo "请输入一个数字:"

read number

# 判断数字是正数还是负数

if [ $number -gt 0 ]; then

    echo "该数字是正数"

elif [ $number -lt 0 ]; then

    echo "该数字是负数"

else

    echo "该数字是零"

fi

2,编写一个 Shell 脚本,接受一个文件路径作为参数,判断该文件是否具有可执行权限,如果有则输出 “该文件具有可执行权限”,否则输出 “该文件没有可执行权限”。

#!/bin/bash

# 检查参数数量

if [ "$#" -ne 1 ]; then

    echo "使用方法: $0 <文件路径>"

    exit 1

fi

# 获取文件路径

FILE_PATH=$1

# 检查文件是否存在

if [ ! -e "$FILE_PATH" ]; then

    echo "错误: 文件 $FILE_PATH 不存在"

    exit 1

fi

# 检查文件是否具有可执行权限

if [ -x "$FILE_PATH" ]; then

    echo "该文件具有可执行权限"

else

    echo "该文件没有可执行权限"

fi

3、编写一个 Shell 脚本,接受两个整数作为参数,判断第一个数是否大于第二个数,如果是则输出 “第一个数大于第二个数”,否则输出 “第一个数小于等于第二个数”。

#!/bin/bash

# 检查参数数量是否正确

if [ "$#" -ne 2 ]; then

    echo "用法: $0 <整数1> <整数2>"

    exit 1

fi

# 获取两个参数

num1=$1

num2=$2

# 判断第一个数是否大于第二个数

if [ "$num1" -gt "$num2" ]; then

    echo "第一个数大于第二个数"

else

    echo "第一个数小于等于第二个数"

fi

多分支

1、编写一个 Shell 脚本,接受一个月份数字作为参数,根据月份判断所属季节并输出(3、4、5 月为春季,6、7、8 月为夏季,9、10、11 月为秋季,12、1、2 月为冬季)。

#!/bin/bash

# 检查参数数量

if [ "$#" -ne 1 ]; then

    echo "Usage: $0 <month_number>"

    exit 1

fi

# 获取月份参数

month=$1

# 根据月份判断季节

case $month in

    3|4|5)

        echo "春季"

        ;;

    6|7|8)

        echo "夏季"

        ;;

    9|10|11)

        echo "秋季"

        ;;

    12|1|2)

        echo "冬季"

        ;;

    *)

        echo "无效的月份数字"

        exit 1

        ;;

esac

相关文章:

linux运维之shell编程

Shell 编程在系统运维中及其重要 1. Shell 编程概述 Shell 是一种命令行解释器&#xff0c;能够执行操作系统的命令。Shell 脚本是一个包含一系列 Shell 命令的文件&#xff0c;它可以被执行&#xff0c;以自动化和批量处理任务。常用的 Shell 类型包括 bash、sh、zsh 等。Shel…...

ssm 多数据源 注解版本

application.xml 配置如下 <!-- 使用 DruidDataSource 数据源 --><bean id"primaryDataSource" class"com.alibaba.druid.pool.DruidDataSource" init-method"init" destroy-method"close"></bean> <!-- 使用 数…...

Nginx核心配置详解

一、配置文件说明 nginx官方帮助文档&#xff1a;nginx documentation nginx的配置文件的组成部分&#xff1a; 主配置文件&#xff1a;nginx.conf子配置文件: include conf.d/*.conffastcgi&#xff0c; uwsgi&#xff0c;scgi 等协议相关的配置文件mime.types&#xff1a;…...

十六(AJAX3)、XMLHttpRequest、Promise、简易axios封装、案例天气预报、lodash-debounce防抖

1. XMLHttpRequest 1.1 XMLHttpRequest-基本使用 /* 定义&#xff1a;XMLHttpRequest&#xff08;XHR&#xff09;对象用于与服务器交互。通过 XMLHttpRequest 可以在不刷新页面的情况下请求特定 URL&#xff0c;获取数据。这允许网页在不影响用户操作的情况下&#xff0c;更…...

12.06 深度学习-预训练

# 使用更深的神经网络 经典神经网络 import torch import cv2 from torchvision.models import resnet18,ResNet18_Weights from torch import optim,nn from torch.utils.data import DataLoader from torchvision.datasets import CIFAR10 from torchvision import tr…...

【计算机网络】期末速成(2)

部分内容来源于网络&#xff0c;侵删~ 第五章 传输层 概述 传输层提供进程和进程之间的逻辑通信&#xff0c;靠**套接字Socket(主机IP地址&#xff0c;端口号)**找到应用进程。 传输层会对收到的报文进行差错检测。 比特流(物理层)-> 数据帧(数据链路层) -> 分组 / I…...

Python学习笔记10-作用域

作用域 定义&#xff1a;Python程序程序可以直接访问命名空间的正文区域 作用&#xff1a;决定了哪一部分区域可以访问哪个特定的名称 分类&#xff1a; 局部作用域&#xff08;Local&#xff09;闭包函数外的函数中&#xff08;Enclosing&#xff09;全局作用域&#xff0…...

Sui 主网升级至 V1.38.3

Sui 主网现已升级至 V1.38.3 版本&#xff0c;同时协议升级至 69 版本。请开发者及时关注并调整&#xff01; 其他升级要点如下所示&#xff1a; 协议 #20199 在共识快速路径投票中设置允许的轮次数量。 节点&#xff08;验证节点与全节点&#xff09; #20238 为验证节点…...

linux的vdagent框架设计

1、vdagent Linux 的 spice 客户代理由两部分组成&#xff0c;一个系统范围的守护进程 spice-vdagentd 和一个 X11 会话代理 spice-vdagent&#xff0c;每个 X11 会话有一个。spice-vdagentd 通过 Sys-V initscript 或 systemd 单元启动。 如下图&#xff1a;spice-vdagent&a…...

vue3+elementPlus封装的一体表格

目录结构 源码 exportOptions.js export default reactive([{label: 导出本页,key: 1,},{label: 导出全部,key: 2,}, ])index.vue <template><div class"flex flex-justify-between flex-items-end"><div><el-button-group><slot name…...

判断是否 AGP7+ 的方法

如何判断&#xff1f; /*** 是否是AGP7.0.0及以上* param project* return*/static boolean isAGP7_0_0(Project project) {def androidComponents project.extensions.findByName("androidComponents")if (androidComponents && androidComponents.hasProp…...

使用 Streamlit +gpt-4o实现有界面的图片内容分析

在上一篇利用gpt-4o分析图像的基础上&#xff0c;进一步将基于 Python 的 Streamlit 库&#xff0c;结合 OpenAI 的 API&#xff0c;构建一个简洁易用的有界面图片内容分析应用。通过该应用&#xff0c;用户可以轻松浏览本地图片&#xff0c;并获取图片的详细描述。 调用gpt-4o…...

树莓集团是如何链接政、产、企、校四个板块的?

树莓集团作为数字影像行业的积极探索者与推动者&#xff0c;我们通过多维度、深层次的战略举措&#xff0c;将政、产、企、校四个关键板块紧密链接在一起&#xff0c;实现了资源的高效整合与协同发展&#xff0c;共同为数字影像产业的繁荣贡献力量。 与政府的深度合作政府在产业…...

Fyne ( go跨平台GUI )中文文档-Fyne总览(二)

本文档注意参考官网(developer.fyne.io/) 编写, 只保留基本用法 go代码展示为Go 1.16及更高版本,ide为goland2021.2??????? ?这是一个系列文章&#xff1a; Fyne ( go跨平台GUI )中文文档-入门(一)-CSDN博客 Fyne ( go跨平台GUI )中文文档-Fyne总览(二)-CSDN博客 Fyne…...

MySQL数据库(3)-SQL基础语言学习

1. DDL数据定义语言 1.1 什么是DDL DDL&#xff08;Data Definition Language&#xff0c;数据定义语言&#xff09;是SQL语言的一部分&#xff0c;用于定义和修改数据库结构。DDL主要包括以下三类语句&#xff1a; 1.CREATE&#xff1a;用于创建数据库对象&#xff0c;如数…...

下拉框根据sql数据回显

vue <a-form-item label"XXXX" :labelCol"labelCol" :wrapperCol"wrapperCol" required><a-select v-decorator"[disputeType, validatorRules.disputeType]" style"width: 200px" placeholder"请选择XXXX&q…...

电池销售系统

文末获取源码和万字论文&#xff0c;制作不易&#xff0c;感谢点赞支持。 摘 要 在当今信息爆炸的大时代&#xff0c;由于信息管理系统能够更有效便捷的完成信息的管理&#xff0c;越来越多的人及机构都已经引入和发展以信息管理系统为基础的信息化管理模式&#xff0c;随之信…...

四、镜像构建

四、镜像构建 从镜像大小上来说&#xff0c;一个比较小的镜像只有十几MB&#xff0c;而内核文件需要一百多MB&#xff0c;因此镜像里面是没有内核的&#xff0c;镜像是在被启动为容器后直接使用宿主机的内核&#xff0c;而镜像本身则只提供相应的rootfs&#xff0c;即系统正常…...

FastAPI 响应状态码:管理和自定义 HTTP Status Code

FastAPI 响应状态码&#xff1a;管理和自定义 HTTP Status Code 本文介绍了如何在 FastAPI 中声明、使用和修改 HTTP 状态码&#xff0c;涵盖了常见的 HTTP 状态码分类&#xff0c;如信息响应&#xff08;1xx&#xff09;、成功状态&#xff08;2xx&#xff09;、客户端错误&a…...

C#设计模式--原型模式(Prototype Pattern)

原型模式是一种创建型设计模式&#xff0c;它允许通过复制现有对象来创建新对象&#xff0c;而无需通过构造函数。这种方式可以提高性能&#xff0c;特别是在创建复杂对象时。C# 中可以通过实现 ICloneable 接口或自定义克隆方法来实现原型模式。 案例 1&#xff1a;文档编辑器…...

使用Goland对6.5840项目进行go build出现异常

使用Goland对6.5840项目进行go build出现异常 Lab地址: https://pdos.csail.mit.edu/6.824/labs/lab-mr.html项目地址: git://g.csail.mit.edu/6.5840-golabs-2024 6.5840运行环境: mac系统 goland git clone git://g.csail.mit.edu/6.5840-golabs-2024 6.5840 cd 6.5840/src…...

使用kibana实现es索引的数据映射和索引模版/组件模版

1 数据映射 数据映射官方链接 1.1 日期映射案例 1.创建一条索引。把索引中的字段生日映射为日期&#xff0c;并制定映射后的格式为年月日 PUT http://10.0.0.91:9200/zhiyong18-luckyboy-date {"mappings": {"properties": {"birthday": {&q…...

基于elementui的远程搜索下拉选择分页组件

在开发一个练手项目的时候&#xff0c;需要一个远程搜索的下拉选择组件&#xff1b; elementui自带的el-select支持远程搜索&#xff1b;但如果一次性查询的数据过多&#xff1b;会导致卡顿。故自己实现一个可分页的远程下拉选择组件 效果&#xff1a; 代码&#xff1a; <…...

每日一题 LCR 074. 合并区间

LCR 074. 合并区间 对遍历顺序注意一下就可以 class Solution { public:vector<vector<int>> merge(vector<vector<int>>& intervals) {int n intervals.size();sort(intervals.begin(),intervals.end());int idx 0;vector<vector<int&g…...

Flink SQL

Overview | Apache Flink FlinkSQL开发步骤 Concepts & Common API | Apache Flink 添加依赖&#xff1a; <dependency><groupId>org.apache.flink</groupId><artifactId>flink-table-api-java-bridge_2.11</artifactId><version>…...

[免费]SpringBoot+Vue企业OA自动化办公管理系统【论文+源码+SQL脚本】

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的SpringBootVue企业OA自动化办公管理系统&#xff0c;分享下哈。 项目视频演示 【免费】SpringBootVue企业OA自动化办公管理系统 Java毕业设计_哔哩哔哩_bilibili 项目介绍 随着信息技术在管理上越来越深入…...

Linux下编译安装METIS

本文记录Linux下编译安装METIS的流程。 零、环境 操作系统Ubuntu 22.04.4 LTSVS Code1.92.1Git2.34.1GCC11.4.0CMake3.22.1 一、安装依赖 1.1 下载GKlib sudo apt-get install build-essential sudo apt-get install cmake 2.2 编译安装GKlib 下载GKlib代码&#xff0c; …...

LLM学习路径 - 渐进式构建知识体系

LLM学习路径 - 渐进式构建知识体系 文章目录 LLM学习路径 - 渐进式构建知识体系一、模型算法基础二、机器学习三、深度学习四、自然语言处理 (NLP)五、大规模语言模型 (LLM) References 一、模型算法基础 编程基础 Web 框架 深入学习 Gradio 与 Streamlit&#xff0c;理解其构…...

使用Unity脚本模拟绳索、布料(碰撞)

效果演示&#xff1a; 脚本如下&#xff1a; using System.Collections; using System.Collections.Generic; using UnityEngine;namespace PhysicsLab {public class RopeSolver : MonoBehaviour {public Transform ParticlePrefab;public int Count 3;public int Space 1;…...

Qt Chart 模块化封装曲线图

一 版本说明 二 完成示例 此文章包含&#xff1a;曲线轴设置&#xff0c;曲线切换&#xff0c;单条曲线显示&#xff0c;坐标轴。。。 三 曲线图UI创建 在UI界面拖放一个QWidget,然后在 Widget里面放一个 graphicsView 四 代码介绍 1 头文件 #include <QString> #in…...

【Linux】深入理解进程管理与fork系统调用的实现原理

【Linux】深入理解进程管理与fork系统调用的实现原理 进程基本概念描述进程-PCBtask_struct-PCB的一种task_ struct内容分类组织进程 查看进程通过系统调用获取进程标示符Fork 之后的代码共享1. **代码共享**2. **数据段不共享**总结 &#x1f30f;个人博客主页&#xff1a;个人…...

C语言程序设计P5-2【应用函数进行程序设计 | 第二节】——知识要点:函数的参数及返回值和函数的调用及声明

知识要点&#xff1a;函数的参数及返回值和函数的调用及声明 视频&#xff1a; 目录 一、任务分析 二、必备知识与理论 三、任务实施 一、任务分析 1.求x的n次方的值也就是求n个x的乘积&#xff0c;可把x和n作为函数的形参&#xff0c;定义一个函数power来完成这个功能&am…...

【LeetCode】169.多数元素

题目连接&#xff1a; https://leetcode.cn/problems/majority-element/solutions/2362000/169-duo-shu-yuan-su-mo-er-tou-piao-qing-ledrh/?envTypestudy-plan-v2&envIdtop-interview-150 题目描述&#xff1a; 思路一&#xff1a; 使用哈希表unordered_map记录每个元…...

0x0118消息 WM_SYSTIMER

0x0118消息就是WM_SYSTIMER 编辑框出现输入光标时,产生的消息. 0x0118 would be the undocumented WM_SYSTIMER, which appears to be used for caret blinks. 0x0118是一个undocument 消息&#xff0c; 微软没有记录。 但在一些库的源码中可以看到&#xff0c;比如ATL的库文…...

【Linux内核】Hello word程序

创建测试目录 mkdir -p ~/develop/kernel/hello-1 cd ~/develop/kernel/hello-1 创建MakeFile文件和内核.c文件 nano Makefile nano hello-1.c 编写内容 /* * hello-1.c - The simplest kernel module. */ #include <linux/module.h> /* Needed by all modules */…...

黑马redis

Redis的多IO线程只是用来处理网络请求的,对于读写操作命令Redis仍然使用单线程来处理 Redisson分布式锁实现15问 文章目录 主线程和IO线程是如何协作的Unix网络编程中的五种IO模型Linux世界一切皆文件生产上限制keys *、flushdb、flushall等危险命令keys * 遍历查询100W数据花…...

Robust Depth Enhancement via Polarization Prompt Fusion Tuning

paper&#xff1a;论文地址 code&#xff1a;github项目地址 今天给大家分享一篇2024CVPR上的文章&#xff0c;文章是用偏振做提示学习&#xff0c;做深度估计的。模型架构图如下 这篇博客不是讲这篇论文的内容&#xff0c;感兴趣的自己去看paper&#xff0c;主要是分享环境&…...

集合框架(3)Map

Map接口 现实生活与开发中&#xff0c;我们常会看到这样的一类集合&#xff1a;用户ID与账户信息、学生姓名与考试成绩、IP地址与主机名等&#xff0c;这种一一对应的关系&#xff0c;就称作映射。Java提供了专门的集合框架用来存储这种映射关系的对象&#xff0c;即java.util…...

Java反射机制—Class

Java反射机制是指在运行时动态地获取类的信息以及操作类的成员变量、方法和构造方法的能力。反射机制通过使用Class类来实现&#xff0c;Class类是Java中表示类的类。 通过反射机制&#xff0c;我们可以在运行时动态地创建对象、调用方法、访问属性等。反射机制提供了一种强大…...

C# 新语法中的字符串内插$和{}符号用法详解

自C#6.0开始提供一个新的语法糖&#xff0c;即"$" 符号&#xff0c;配合“{}”使用&#xff0c;它的作用除了是对String.format的简化&#xff0c;还可设置其格式模板&#xff0c;实现了对字符串的拼接优化。 语法格式&#xff1a; $"string {变量表达式}” 语…...

WordPress 独立站是否需要 CDN:深度解析及必要性分析

WordPress 是目前全球最流行的开源内容管理系统&#xff08;CMS&#xff09;&#xff0c;其易用性和丰富的插件生态使得它成为搭建独立站的首选。然而&#xff0c;随着流量的增加以及用户体验的需求&#xff0c;网站的速度和可靠性变得至关重要。在这种情况下&#xff0c;CDN&a…...

dell电脑开不了机怎么回事?戴尔电脑无法开机解决方法

dell戴尔电脑开不了机&#xff0c;这是很多使用dell电脑用户常遇到的问题。这种故障情况是由多种原因引起&#xff0c;包括硬件故障、软件问题或电源问题等等。dell电脑开不了机怎么办呢&#xff1f;下面便为大家介绍一下相关解决修复方法&#xff0c;帮助用户解决戴尔电脑无法…...

如何解决 JavaScript 中的数组方法不生效?

在 JavaScript 中&#xff0c;数组方法是常用的工具&#xff0c;可以用来对数组进行操作。常见的数组方法包括 push(), pop(), shift(), unshift(), map(), filter(), reduce() 等。 然而&#xff0c;有时候我们会遇到数组方法“失效”或者不按预期工作的情况。这个问题的原因…...

道可云人工智能元宇宙每日资讯|全国工商联人工智能委员会成立会议在南京举办

道可云元宇宙每日简报&#xff08;2024年12月5日&#xff09;讯&#xff0c;今日元宇宙新鲜事有&#xff1a; 全国工商联人工智能委员会成立会议在南京举办 全国工商联人工智能委员会成立会议日前在江苏省南京市举办。中央统战部副部长、全国工商联党组书记沈莹出席会议并讲话…...

华为HCIP-Datacom H12-821H12-831 (12月最新题库)

备考HCIP-datacom的小伙伴注意啦 !!! 2024年下半年12月份最新(H12-821和H12-831)题库带解析,有需要的小伙伴移动至文章末 H12-821: H12-831: 1.BGP 邻居建立过程的状态存在以下几种&#xff1a;那么建立一个成功的连接所经历的状态机顺序是 A、3-1-2-5-4 B、1-3-5-2-4 C、…...

模型案例:| 手机识别模型!

导读 2023年以ChatGPT为代表的大语言模型横空出世&#xff0c;它的出现标志着自然语言处理领域取得了重大突破。它在文本生成、对话系统和语言理解等方面展现出了强大的能力&#xff0c;为人工智能技术的发展开辟了新的可能性。同时&#xff0c;人工智能技术正在进入各种应用领…...

AWS创建ec2实例并连接成功

aws创建ec2实例并连接 aws创建ec2并连接 1.ec2创建前准备 首先创建一个VPC隔离云资源并且有公有子网 2.创建EC2实例 1.启动新实例或者创建实例 2.创建实例名 3.选择AMI使用linux(HVM) 4.选择实例类型 5.创建密钥对下载到本地并填入密钥对名称 6.选择自己创建的VPC和公有子网…...

短视频矩阵系统开发|技术源代码部署

短视频矩阵系统通过多账号运营管理、多平台视频智能分发等功能&#xff0c;助力企业实现视频引流、粉丝沉淀和转化。 短视频矩阵系统是一种创新的营销工具&#xff0c;它整合了多账号管理、视频智能分发、数据可视化等多种功能&#xff0c;为企业在短视频领域的发展提供了强大…...

C# GDI绘制的小熊进度条

C# GDI小熊进度条 1、添加自定义控件winform using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms;…...

java书 核心技术+卷一+4

5.4 对象包装器与自动装箱 package 反射; import java.util.AbstractList; import java.util.ArrayList; public class test {public static void main(String[] args) {int a10;ArrayList<Integer> xxnew ArrayList<>();xx.add(a); //自动装箱int bxx.get(0);//…...