shell脚本30个案例(五)

前言:

通过一个多月的shell学习,总共写出30个案例,分批次进行发布,这次总共发布了5个案例,希望能够对大家的学习和使用有所帮助,更多案例会在下期进行发布。

案例二十一、系统内核优化

1.问题:

在服务器或高性能计算环境中,系统内核的默认参数可能无法满足特定工作负载的需求,导致性能不佳。例如,网络连接数受限可能影响高并发网络应用的性能,内存管理策略不当可能导致内存利用效率低下,磁盘 I/O 调度策略可能不适合特定的存储设备,从而影响读写速度。因此,需要对系统内核进行优化以提高系统的整体性能。

        2.分析:

网络参数优化:调整最大连接数相关参数:增加系统允许的最大文件描述符数量(fs.file - max)和网络连接跟踪表的大小(net.netfilter.nf_conntrack_max),以适应大量并发连接的场景。

优化 TCP 参数:调整 TCP 缓冲区大小(net.ipv4.tcp_rmem、net.ipv4.tcp_wmem)、TCP 连接超时时间(net.ipv4.tcp_fin_timeout)和 TCP 快速回收等参数(net.ipv4.tcp_tw_recycle、net.ipv4.tcp_tw_reuse),提高网络传输效率和连接处理速度。

内存管理优化:调整内存分配策略参数:例如,调整vm.swappiness参数来控制系统使用交换空间的倾向,减少不必要的磁盘交换,提高内存使用效率。

优化内存缓存参数:根据服务器的应用场景,调整内存页面缓存相关参数,如vm.vfs_cache_pressure,以平衡文件系统缓存和其他内存使用。

磁盘 I/O 优化:选择合适的 I/O 调度策略:对于不同类型的存储设备(如机械硬盘或固态硬盘),选择合适的 I/O 调度算法(如noop、deadline、cfq等),通过修改/sys/block/<device>/queue/scheduler(<device>为磁盘设备名)来实现。

调整磁盘预读参数:根据磁盘性能和应用的 I/O 模式,调整磁盘预读相关参数(如blockdev --setra命令),提高磁盘读取效率。

3.实现:

#!/bin/bash# 备份原始内核配置文件
cp /etc/sysctl.conf /etc/sysctl.conf.bak# 网络参数优化
echo "fs.file-max = 1000000" >> /etc/sysctl.conf
echo "net.netfilter.nf_conntrack_max = 500000" >> /etc/sysctl.conf
echo "net.ipv4.tcp_rmem = 4096 87380 16777216" >> /etc/sysctl.conf
echo "net.ipv4.tcp_wmem = 4096 16384 16777216" >> /etc/sysctl.conf
echo "net.ipv4.tcp_fin_timeout = 30" >> /etc/sysctl.conf
echo "net.ipv4.tcp_tw_recycle = 1" >> /etc/sysctl.conf
echo "net.ipv4.tcp_tw_reuse = 1" >> /etc/sysctl.conf# 内存管理优化
echo "vm.swappiness = 10" >> /etc/sysctl.conf
echo "vm.vfs_cache_pressure = 50" >> /etc/sysctl.conf# 磁盘I/O优化(假设磁盘设备名为sda,这里以修改为deadline调度策略为例)
echo "echo deadline > /sys/block/sda/queue/scheduler" >> /etc/rc.local
chmod +x /etc/rc.local
blockdev --setra 4096 /dev/sda# 使新的内核配置生效
sysctl -p# 这里可以添加重启系统的命令,如果需要重启才能使所有优化生效
# reboot

4.实现解析:

备份原始内核配置文件:使用cp /etc/sysctl.conf /etc/sysctl.conf.bak将原始的内核配置文件/etc/sysctl.conf备份到/etc/sysctl.conf.bak。这样在优化出现问题时,可以回滚到原始配置。

网络参数优化部分:通过echo命令将一系列网络参数配置添加到/etc/sysctl.conf文件中。

fs.file - max = 1000000:将系统允许的最大文件描述符数量设置为 1000000,以支持大量的文件和网络连接。

net.netfilter.nf_conntrack_max = 500000:增加网络连接跟踪表的大小,适应更多的并发网络连接。

net.ipv4.tcp_rmem和net.ipv4.tcp_wmem:分别设置 TCP 接收缓冲区和发送缓冲区的大小,优化 TCP 数据传输。

net.ipv4.tcp_fin_timeout = 30:缩短 TCP 连接关闭时的等待时间,加快连接资源的回收。

net.ipv4.tcp_tw_recycle = 1和net.ipv4.tcp_tw_reuse = 1:启用 TCP 连接的快速回收和重用机制,提高服务器处理大量短连接的能力。

内存管理优化部分:vm.swappiness = 10:降低系统使用交换空间的倾向,只有当内存使用率达到 90%(100 - 10)时才更积极地使用交换空间,提高内存使用效率。

vm.vfs_cache_pressure = 50:调整文件系统缓存的回收压力,平衡文件系统缓存和其他内存使用。

磁盘 I/O 优化部分:echo "echo deadline > /sys/block/sda/queue/scheduler" >> /etc/rc.local:将设置磁盘sda的 I/O 调度策略为deadline的命令添加到/etc/rc.local文件中,并在系统启动时执行。deadline调度策略适用于一般的服务器场景,能在一定程度上平衡读写性能。同时,使用chmod +x /etc/rc.local赋予/etc/rc.local可执行权限。

blockdev --setra 4096 /dev/sda:设置磁盘sda的预读扇区数为 4096,根据磁盘性能和应用的 I/O 模式优化磁盘读取效率。

使新的内核配置生效:使用sysctl -p命令加载/etc/sysctl.conf中的新内核参数配置,使参数立即生效。部分参数可能需要重启系统才能完全生效,这里可以根据实际情况添加reboot命令,但需要谨慎操作,因为重启会中断当前的服务。

5.结果验证:

测试优化前后的磁盘 I/O 性能,优化前的读写速度

dd if=/dev/zero of=testfile bs=1M count=1024 oflag=direct   读
dd if=testfile of=/dev/null bs=1M count=1024 iflag=direct    写

优化后的读写速度

可以看到速度有一定的提升

案例二十二、一键部署LNMP环境

1.问题:

在服务器环境中,手动搭建 LNMP 环境步骤繁琐且容易出错,需要耗费大量时间。包括安装 Nginx、MySQL、PHP 以及相关的配置和启动操作,不同软件之间可能还存在版本兼容性问题。因此,需要一个脚本来自动化完成 LNMP 环境的部署,提高部署效率和准确性。

2.分析:

软件安装与版本选择:Nginx:从官方或可靠的软件源获取 Nginx 安装包,根据服务器性能和需求选择合适的版本。需要注意安装过程中的依赖项处理。

MySQL:可以选择 MySQL 官方版本或者其分支(如 MariaDB)。同样要处理好安装依赖,并且在安装后进行必要的配置,如设置 root 用户密码、创建数据库等。

PHP:确定要安装的 PHP 版本,安装 PHP 以及与 Web 应用相关的扩展,如php - mysql、php - fpm等,以支持与 MySQL 和 Nginx 的协同工作。

配置管理:Nginx 配置:修改 Nginx 的配置文件(如nginx.conf),设置服务器域名、监听端口、根目录等相关参数,同时配置 Nginx 与 PHP - FPM 的交互。

PHP - FPM 配置:调整 PHP - FPM 的配置,包括监听地址、进程管理、资源限制等,确保 PHP 能够高效稳定地运行。

MySQL 配置(如果有):除了设置 root 用户密码外,还可以根据需要配置数据库的字符集、存储引擎等参数。

服务启动与检查:安装完成后,启动 Nginx、MySQL 和 PHP - FPM 服务,并检查服务是否正常启动,避免出现启动失败但未被发现的情况。

3.流程图:

4.实现:

#!/bin/bash# 定义函数用于输出信息
function echo_info() {echo -e "[\033[36m$(date +%T)\033[0m] [\033[32mINFO\033[0m] \033[37m$@\033[0m"
}
function echo_warning() {echo -e "[\033[36m$(date +%T)\033[0m] [\033[1;33mWARNING\033[0m] \033[1;37m$@\033[0m"
}
function echo_error() {echo -e "[\033[36m$(date +%T)\033[0m] [\033[41mERROR\033[0m] \033[1;31m$@\033[0m"
}# 安装 Nginx
install_nginx() {echo_info "正在安装 Nginx..."yum install -y epel-release.noarchyum install -y nginxif [ $? -eq 0 ]; thenecho_info "Nginx 安装成功。"elseecho_error "Nginx 安装失败。"fi
}# 安装 MySQL(这里以 MariaDB 为例)
install_mysql() {echo_info "正在安装 MariaDB..."yum install -y mariadb-server mariadbif [ $? -eq 0 ]; thenecho_info "MariaDB 安装成功。"echo_info "正在启动 MariaDB..."systemctl start mariadbif [ $? -eq 0 ]; thenecho_info "MariaDB 启动成功。"echo_info "设置 MariaDB 开机自启..."systemctl enable mariadbecho_info "正在设置 MariaDB root 用户密码..."mysqladmin -u root password '123456'echo_info "密码设置成功。"elseecho_error "MariaDB 启动失败。"fielseecho_error "MariaDB 安装失败。"fi
}# 安装 PHP 及相关扩展
install_php() {echo_info "正在安装 PHP 及相关扩展..."yum install -y php php-fpm php-mysql php-gd php-mbstring php-xmlif [ $? -eq 0 ]; thenecho_info "PHP 及相关扩展安装成功。"elseecho_error "PHP 安装失败。"fi
}# 配置 Nginx
configure_nginx() {echo_info "正在配置 Nginx..."# 这里可以添加具体的 Nginx 配置修改代码,例如:# sed -i's/listen       80;/listen       8080;/' /etc/nginx/nginx.conf# 创建一个简单的 Nginx 服务器配置块示例cat > /etc/nginx/conf.d/default.conf << EOF
server {listen       80;server_name  localhost;location / {root   /usr/share/nginx/html;index  index.php index.html index.htm;}location ~ \.php$ {fastcgi_pass   127.0.0.1:9000;fastcgi_index  index.php;fastcgi_param  SCRIPT_FILENAME  \$document_root\$fastcgi_script_name;include        fastcgi_params;}
}
EOFecho_info "Nginx 配置完成。"
}# 配置 PHP - FPM
configure_php_fpm() {echo_info "正在配置 PHP - FPM..."# 这里可以修改 PHP - FPM 的配置文件,例如:# sed -i's/listen = 127.0.0.1:9000/listen = 127.0.0.1:9000;/' /etc/php-fpm.d/www.confecho_info "PHP - FPM 配置完成。"
}# 启动服务并检查状态
start_and_check_services() {echo_info "正在启动 Nginx 服务..."systemctl start nginxif [ $? -eq 0 ]; thenecho_info "Nginx 服务启动成功。"elseecho_error "Nginx 服务启动失败。"fiecho_info "正在启动 PHP - FPM 服务..."systemctl start php-fpmif [ $? -eq 0 ]; thenecho_info "PHP - FPM 服务启动成功。"elseecho_error "PHP - FPM 服务启动失败。"fi
}# 主函数,按顺序调用各个函数
main() {install_nginxinstall_mysqlinstall_phpconfigure_nginxconfigure_php_fpmstart_and_check_services
}main

5.实现解析:

信息输出函数:定义了echo_info、echo_warning和echo_error函数,用于以不同颜色和格式输出信息、警告和错误消息,方便在脚本执行过程中查看状态。这些函数使用echo -e和 ANSI 转义序列来实现彩色输出。

安装 Nginx 函数install_nginx:使用yum install -y nginx命令安装 Nginx。-y选项表示自动回答yes以确认安装。通过检查命令的返回值($?)判断安装是否成功,若$? -eq 0,则输出安装成功信息;否则输出安装失败信息。

安装 MySQL(MariaDB)函数install_mysql:使用yum install -y mariadb - server mariadb安装 MariaDB 服务器和客户端。安装成功后,启动 MariaDB 服务(systemctl start mariadb),并根据启动命令的返回值判断启动是否成功,输出相应信息。若启动成功,将 MariaDB 设置为开机自启(systemctl enable mariadb)。接着使用mysqladmin -u root password 'your_password'设置 root 用户的密码,这里的your_password需要替换为实际的密码。

安装 PHP 及相关扩展函数install_php:使用yum install -y php php - fpm php - mysql php - gd php - mbstring php - xml安装 PHP 以及常用的与 Web 应用相关的扩展。通过检查安装命令的返回值判断安装是否成功,输出相应信息。

配置 Nginx 函数configure_nginx:输出正在配置 Nginx 的信息,这里可以添加更详细的 Nginx 配置修改代码。在示例中,创建了一个简单的/etc/nginx/conf.d/default.conf配置文件,设置了 Nginx 的监听端口(80)、服务器名称(localhost)、根目录(/usr/share/nginx/html)以及 PHP 相关的配置(location ~ \.php$部分),用于处理 PHP 文件的请求,将其转发到 PHP - FPM 服务。

配置 PHP - FPM 函数configure_php_fpm:输出正在配置 PHP - FPM 的信息,这里可以添加修改 PHP - FPM 配置文件(如/etc/php - fpm.d/www.conf)的代码,示例中只是简单输出配置完成信息,实际应用中可能需要根据需求修改监听地址等参数。

启动服务并检查状态函数start_and_check_services:分别启动 Nginx 服务(systemctl start nginx)和 PHP - FPM 服务(systemctl start php - fpm),并根据启动命令的返回值判断启动是否成功,输出相应信息。

主函数main:按照安装 Nginx、安装 MySQL、安装 PHP、配置 Nginx、配置 PHP - FPM、启动服务并检查状态的顺序调用各个函数,完成 LNMP 环境的部署。

6.结果验证:

首先关闭服务器的防火墙

Systemctl stop firewalld

 

将网页内容修改为test1

echo "test1" > /usr/share/nginx/html/index.html

打开浏览器,搜索http://服务器ip,显示如下界面,表示部署成功

案例二十三、一键部署LAMP

1.问题:

手动在 Linux 系统上部署 LAMP 环境需要分别安装和配置 Apache、MySQL 和 PHP,操作繁琐且容易出错,需要一个自动化脚本来快速准确地完成部署。

2.分析:

软件安装源:Apache:可以从系统默认的软件仓库(如 yum 仓库)获取安装包,选择合适的版本进行安装。

MySQL:可选择 MySQL 官方版本或其兼容的分支(如 MariaDB),从相应的官方或可靠的仓库获取安装包。

PHP:确定要安装的 PHP 版本,并从系统仓库安装 PHP 以及与 Apache 和 MySQL 协同工作所需的扩展,如php - mysql等。

依赖关系处理:每个软件在安装过程中可能有依赖项,需要确保这些依赖项在安装软件之前或同时安装,以保证安装顺利进行。

配置管理:Apache 配置:设置服务器域名、监听端口、文档根目录等相关参数,确保 Apache 能正确处理网页请求。

MySQL 配置:设置 root 用户密码、数据库字符集、存储引擎等参数,同时创建必要的数据库和用户(如果需要)。

PHP 配置:调整 PHP 的配置文件,如php.ini,设置时区、错误显示等参数,并确保 PHP 模块与 Apache 正确集成。

3.流程图:

4.实现:

#!/bin/bash# 定义函数用于输出信息
function echo_info() {echo -e "[\033[36m$(date +%T)\033[0m] [\033[32mINFO\033[0m] \033[37m$@\033[0m"
}
function echo_warning() {echo -e "[\033[36m$(date +%T)\033[0m] [\033[1;33mWARNING\033[0m] \033[1;37m$@\033[0m"
}
function echo_error() {echo -e "[\033[36m$(date +%T)\033[0m] [\033[41mERROR\033[0m] \033[1;31m$@\033[0m"
}# 安装 Apache
install_apache() {echo_info "正在安装 Apache..."yum install -y httpdif [ $? -eq 0 ]; thenecho_info "Apache 安装成功。"elseecho_error "Apache 安装失败。"fi
}# 安装 MySQL(这里以 MariaDB 为例)
install_mysql() {echo_info "正在安装 MariaDB..."yum install -y mariadb-server mariadbif [ $? -eq 0 ]; thenecho_info "MariaDB 安装成功。"echo_info "正在启动 MariaDB..."systemctl start mariadbif [ $? -eq 0 ]; thenecho_info "MariaDB 启动成功。"echo_info "设置 MariaDB 开机自启..."systemctl enable mariadbecho_info "正在设置 MariaDB root 用户密码..."mysqladmin -u root password '123456'echo_info "密码设置成功。"elseecho_error "MariaDB 启动失败。"fielseecho_error "MariaDB 安装失败。"fi
}# 安装 PHP 及相关扩展
install_php() {echo_info "正在安装 PHP 及相关扩展..."yum install -y php php-mysql php-gd php-mbstring php-xmlif [ $? -eq 0 ]; thenecho_info "PHP 及相关扩展安装成功。"elseecho_error "PHP 安装失败。"fi
}# 配置 Apache
configure_apache() {echo_info "正在配置 Apache..."# 修改 Apache 主配置文件,这里只是示例,可根据实际需求修改sed -i's/Listen 80/Listen 8080/' /etc/httpd/conf/httpd.confecho_info "Apache 配置完成。"
}# 配置 MySQL
configure_mysql() {echo_info "正在配置 MySQL..."# 这里可以添加更多的 MySQL 配置操作,如修改 my.cnf 文件等echo_info "MySQL 配置完成(示例,可进一步完善)。"
}# 配置 PHP
configure_php() {echo_info "正在配置 PHP..."# 修改 php.ini 文件,设置时区等,这里只是示例sed -i " s/;date.timezone =/date.timezone = Asia/Shanghai/" /etc/php.iniecho_info "PHP 配置完成(示例,可进一步完善)。"
}# 启动服务并检查状态
start_and_check_services() {echo_info "正在启动 Apache 服务..."systemctl start httpdif [ $? -eq 0 ]; thenecho_info "Apache 服务启动成功。"elseecho_error "Apache 服务启动失败。"fiecho_info "正在启动 PHP 模块(与 Apache 集成)..."# 这里可以根据实际情况检查 PHP 与 Apache 集成是否成功启动,例如检查相关模块是否加载echo_info "PHP 模块启动成功(示例,可进一步检查)。"
}# 主函数,按顺序调用各个函数
main() {install_apacheinstall_mysqlinstall_phpconfigure_apacheconfigure_mysqlconfigure_phpstart_and_check_services
}main

5.实现解析:

信息输出函数:定义了echo_info、echo_warning和echo_error函数,用于以不同颜色和格式输出信息、警告和错误消息,方便在脚本执行过程中查看状态。这些函数使用echo -e和 ANSI 转义序列来实现彩色输出。

安装 Apache 函数install_apache:使用yum install -y httpd命令安装 Apache。-y选项表示自动回答yes以确认安装。通过检查命令的返回值($?)判断安装是否成功,若$? -eq 0,则输出安装成功信息;否则输出安装失败信息。

安装 MySQL(MariaDB)函数install_mysql:使用yum install -y mariadb - server mariadb安装 MariaDB 服务器和客户端。安装成功后,启动 MariaDB 服务(systemctl start mariadb),并根据启动命令的返回值判断启动是否成功,输出相应信息。若启动成功,将 MariaDB 设置为开机自启(systemctl enable mariadb)。接着使用mysqladmin -u root password 'your_password'设置 root 用户的密码,这里的your_password需要替换为实际的密码。

安装 PHP 及相关扩展函数install_php:使用yum install -y php php - mysql php - gd php - mbstring php - xml安装 PHP 以及常用的与 Web 应用相关的扩展。通过检查安装命令的返回值判断安装是否成功,输出相应信息。

配置 Apache 函数configure_apache:输出正在配置 Apache 的信息,这里使用sed -i's/Listen 80/Listen 8080/' /etc/httpd/conf/httpd.conf修改 Apache 的主配置文件,将监听端口从80改为8080。这只是一个简单的配置修改示例,实际应用中可能需要根据具体需求进行更复杂的配置。

配置 MySQL 函数configure_mysql:输出正在配置 MySQL 的信息,这里只是简单输出完成信息,实际应用中可以添加更多的配置操作,如修改my.cnf文件来设置数据库字符集、缓存大小等参数。

配置 PHP 函数configure_php:输出正在配置 PHP 的信息,使用sed -i "s/;date.timezone =/date.timezone = Asia/Shanghai/" /etc/php.ini修改php.ini文件,将 PHP 的时区设置为Asia/Shanghai。这也是一个简单的配置示例,可根据实际情况进一步完善。

启动服务并检查状态函数start_and_check_services:启动 Apache 服务(systemctl start httpd),根据启动命令的返回值判断启动是否成功,输出相应信息。对于 PHP 模块与 Apache 的集成启动,这里只是简单输出成功信息,实际可以添加更多检查逻辑,如检查相关的 PHP 模块是否在 Apache 中正确加载。

主函数main:按照安装 Apache、安装 MySQL、安装 PHP、配置 Apache、配置 MySQL、配置 PHP、启动服务并检查状态的顺序调用各个函数,完成 LAMP 环境的部署。

6.结果验证:

首先关闭防火墙

systemctl stop firewalld

打开浏览器,输入http://服务器ip,显示如下,表示脚本运行成功

案例二十四、判断当前用户是否为root用户

1.问题:

在 CentOS 系统中,编写一个 shell 脚本以准确判断当前正在操作的用户是否为 root 用户。

2.分析:

在 Linux 系统中,每个用户都有一个唯一的用户名标识。root 用户是具有最高权限的特殊用户,其用户名固定为 “root”。

可以通过获取当前用户的用户名信息,并与 “root” 进行比较来判断当前用户是否为 root 用户。在 shell 脚本中,可以使用一些特定的命令和语法来实现这个功能。

3.流程图:

4.实现:

#!/bin/bash# 获取当前用户的用户名
current_user=$(whoami)# 判断当前用户是否为root用户
if [ "$current_user" == "root" ]; thenecho "当前用户是root用户"
elseecho "当前用户不是root用户"
fi

 5.实现解析:

current_user=$(whoami):使用whoami命令来获取当前正在操作的用户的用户名,并将其赋值给变量current_user。whoami命令会返回当前用户的登录名。

if [ "$current_user" == "root" ]; then... else... fi:这是一个条件判断语句。首先,将变量current_user的值与字符串 “root” 进行比较。如果两者相等,即当前用户的用户名是 “root”,那么就执行if语句块中的内容,也就是输出 “当前用户是 root 用户”;如果不相等,就执行else语句块中的内容,输出 “当前用户不是 root 用户”。

6.结果验证:

直接执行脚本

可以看到当前用户是root用户。

案例二十五、一键安装常用工具

1.问题:

在 CentOS 系统中,自动化安装一些常用的工具,如 wget、tree、vim 等,以提高系统的初始配置效率并满足日常使用需求。

2.分析:

需要确定要安装的常用工具列表,并了解在 CentOS 系统中使用何种包管理工具进行安装(如 yum)。

要考虑安装过程中的错误处理,例如网络问题导致的软件包下载失败或者依赖关系无法解决等情况。

3.流程图:

4.实现:

#!/bin/bash# 定义要安装的常用工具数组
tools=(wget tree vim)# 安装成功的工具列表
success_list=()
# 安装失败的工具列表
failure_list=()# 循环安装工具
for tool in "${tools[@]}"
doecho "正在安装 $tool..."yum install -y "$tool" > /dev/null 2>&1if [ $? -eq 0 ]; thensuccess_list+=("$tool")elsefailure_list+=("$tool")fi
done# 输出安装结果
echo "安装完成,以下工具安装成功:"
for s_tool in "${success_list[@]}"
doecho $s_tool
doneecho "以下工具安装失败:"
for f_tool in "${failure_list[@]}"
doecho $f_tool
done

5.实现解析:

tools=(wget tree vim):定义了一个包含要安装的常用工具名称的数组。

success_list=() 和 failure_list=():分别初始化安装成功和失败的工具列表为空数组,用于后续记录安装结果。

for tool in "${tools[@]}"... done:循环遍历 tools 数组中的每个工具名称。

yum install -y "$tool" > /dev/null 2>&1:使用 yum 命令安装当前工具,并将标准输出和标准错误输出重定向到 /dev/null,以避免安装过程中的大量输出信息干扰脚本执行。-y 参数表示自动回答 yum 安装过程中的所有提示为 “是”。

if [ $? -eq 0 ]; then... else... fi:通过检查上一个命令(yum install)的返回值($?)来判断安装是否成功。如果返回值为 0,表示安装成功,将工具名称添加到 success_list 数组中;否则添加到 failure_list 数组中。

最后两个循环分别输出安装成功和失败的工具列表。

6.结果验证:

直接执行脚本

可以看到所有工具安装成功,没有工具安装失败。

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

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

相关文章

一文解析Kettle开源ETL工具!

ETL&#xff08;Extract, Transform, Load&#xff09;工具是用于数据抽取、转换和加载的软件工具&#xff0c;用于支持数据仓库和数据集成过程。Kettle作为传统的ETL工具备受用户推崇。本文就来详细说下Kettle。 一、Kettle是什么&#xff1f; Kettle 是一款开源的 ETL&#x…

IDEA使用HotSwapHelper进行热部署

目录 前言JDK1.8特殊准备DECVM安装插件安装与配置参考文档相关下载 前言 碰到了一个项目&#xff0c;用jrebel启动项目时一直报错&#xff0c;不用jrebel时又没问题&#xff0c;找不到原因&#xff0c;又不想放弃热部署功能 因此思考能否通过其他方式进行热部署&#xff0c;找…

使用无监督机器学习算法进行预测性维护

目录 一、说明 二、主成分分析&#xff08;PCA&#xff09; 三、 K-means方法 四、K-最近邻 (KNN) 五、密度的空间聚类 (DBSCAN) 六、更先进的预测性维护算法 6.1 独立成分分析 (ICA) 6.2 PCA 和 ICA 有什么区别&#xff1f; 6.3 OPTICS 聚类 6.4 自组织映射 (SOM) 6.5 局部敏…

Elasticsearch 进阶

核心概念 索引(Index) 一个索引就是一个拥有几分相似特征的文档的集合。比如说&#xff0c;你可以有一个客户数据的索引&#xff0c;另一个产品目录的索引&#xff0c;还有一个订单数据的索引。一个索引由一个名字来标识(必须全部是小写字母)&#xff0c;并且当我们要对这个索…

107.【C语言】数据结构之二叉树求总节点和第K层节点的个数

目录 1.求二叉树总的节点的个数 1.容易想到的方法 代码 缺陷 思考:能否在TreeSize函数内定义静态变量解决size的问题呢? 其他写法 运行结果 2.最好的方法:分而治之 代码 运行结果 2.求二叉树第K层节点的个数 错误代码 运行结果 修正 运行结果 其他写法 1.求二…

vue2 虚拟DOM 和 真实DOM (概念、作用、Diff 算法)

虚拟 DOM 和 真实DOM&#xff08;概念、作用、Diff 算法&#xff09; 1.1 概念 真实 DOM&#xff08;Document Object Model&#xff09;&#xff1a;是浏览器中用于表示文档结构的树形结构。 <h2>你好</h2>虚拟DOM&#xff1a;用 JavaScript 对象来模拟真实 DOM…

Spring AI 框架介绍

Spring AI是一个面向人工智能工程的应用框架。它的目标是将Spring生态系统的设计原则&#xff08;如可移植性和模块化设计&#xff09;应用于AI领域&#xff0c;并推广使用pojo作为AI领域应用的构建模块。 概述 Spring AI 现在(2024/12)已经支持语言&#xff0c;图像&#xf…

matlab 中的 bug

在matlab中绘图&#xff0c;设置 axe 的背景颜色 axes_in3.Color #00235B ;打印的时候 print(figure_handle1,-dpng,-r300,"merge_yt_ey") ;此时保存的图片无法识别背景颜色 原因在于 matlab 中的 InverseHardcopy 将 InvertHardcopy 设置成 off 则可以解决这个问…

【数据库系列】Liquibase 与 Flyway 的详细对比

在现代软件开发中&#xff0c;数据库版本控制是一个至关重要的环节。为了解决数据库迁移和变更管理的问题&#xff0c;开发者们通常会使用工具&#xff0c;如 Liquibase 和 Flyway。本文将对这两个流行的数据库迁移工具进行详细比较&#xff0c;从基础概念、原理、优缺点到使用…

DVWA靶场通关——DOM型XSS漏洞

一、DOM型XSS攻击概述 DOM型XSS&#xff08;DOM-based Cross-Site Scripting&#xff0c;DOM XSS&#xff09;是一种跨站脚本攻击&#xff08;XSS&#xff09;的变种&#xff0c;它与传统的反射型XSS&#xff08;Reflected XSS&#xff09;或存储型XSS&#xff08;Stored XSS&a…

flink学习(14)—— 双流join

概述 Join:内连接 CoGroup&#xff1a;内连接&#xff0c;左连接&#xff0c;右连接 Interval Join&#xff1a;点对面 Join 1、Join 将有相同 Key 并且位于同一窗口中的两条流的元素进行关联。 2、Join 可以支持处理时间&#xff08;processing time&#xff09;和事件时…

设计模式——Facade(门面)设计模式

摘要 本文介绍了外观设计模式&#xff0c;这是一种通过简单接口封装复杂系统的设计模式。它简化了客户端与子系统之间的交互&#xff0c;降低了耦合度&#xff0c;并提供了统一的调用接口。文章还探讨了该模式的优缺点&#xff0c;并提供了类图实现和使用场景。 1. 外观设计模…

泷羽sec-burp功能介绍(1) 学习笔记

声明&#xff01; 学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下&#xff0c;如涉及侵权马上删除文章&#xff0c;笔记只是方便各位师傅的学习和探讨&#xff0c;文章所提到的网站以及内容&#xff0c;只做学习交流&#xff0c;其他均与本人以及泷羽sec团队无关&a…

技术创新与人才培养并重 软通动力子公司鸿湖万联亮相OpenHarmony人才生态大会

11月27日&#xff0c;由开放原子开源基金会指导&#xff0c;OpenHarmony项目群工作委员会主办的OpenHarmony人才生态大会2024在武汉隆重举办。软通动力子公司鸿湖万联作为OpenHarmony项目群A类捐赠人应邀出席。大会期间&#xff0c;鸿湖万联不仅深度参与了OpenHarmony人才生态年…

简单快速的上手python

前言 python是一门可以快速上手的语言&#xff0c;原因是它语法简单&#xff0c;api容易使用自由灵活 当我们需要安装任何的三方库时&#xff0c;只需要执行 pip install XX 之后在代码里面import xxx就可以使用python啦。 并且python的代码自由灵活&#xff0c;使用缩进区…

【算法刷题指南】优先级队列

&#x1f308;个人主页&#xff1a; 南桥几晴秋 &#x1f308;C专栏&#xff1a; 南桥谈C &#x1f308;C语言专栏&#xff1a; C语言学习系列 &#x1f308;Linux学习专栏&#xff1a; 南桥谈Linux &#x1f308;数据结构学习专栏&#xff1a; 数据结构杂谈 &#x1f308;数据…

[241129] Docker Desktop 4.36 发布:企业级管理功能、WSL 2 增强 | Smile v4.0.0 发布

目录 Docker Desktop 4.36 发布&#xff1a;企业级管理功能、WSL 2 和 ECI 增强Smile v4.0.0 发布&#xff01;Java 机器学习库迎来重大升级 Docker Desktop 4.36 发布&#xff1a;企业级管理功能、WSL 2 和 ECI 增强 Docker Desktop 4.36 带来了强大的更新&#xff0c;简化了…

vue3+typescript自定义input组件

官方文档&#xff1a;https://cn.vuejs.org/guide/components/events#%E5%AE%9A%E4%B9%89%E8%87%AA%E5%AE%9A%E4%B9%89%E4%BA%8B%E4%BB%B6 触发与监听事件​ 在组件的模板表达式中&#xff0c;可以直接使用 $emit 方法触发自定义事件 (例如&#xff1a;在 v-on 的处理函数中)…

HarmonyOS4+NEXT星河版入门与项目实战(23)------实现手机游戏摇杆功能

文章目录 1、案例效果2、案例实现1、代码实现2、代码解释4、总结1、案例效果 2、案例实现 1、代码实现 代码如下(示例): import router from @ohos.router import {ResizeDirection } from @ohos.UiTest import curves

Qt的定时器应用案例 || Qt的图片添加显示

目录 1.ui界面 2.头文件 3.cpp源文件 4.main文件 5.关于ui_mytimerevent.h的代码编译错误 6.图片的添加展示方式 7.结果展示 8.参考文章 1.ui界面 2.头文件 #ifndef MYTIMEREVENT_H #define MYTIMEREVENT_H#include <QMainWindow> #include <QTime> //#in…