Linux服务器组建与管理
#!/bin/bash #判断是否是root用户if [ "$USER" != "root" ]; then echo "不是root用户,无法进行安装操作" exit 1 fi#关闭防火墙systemctl stop firewalld && systemctl disable firewalld && echo "防火墙已经关闭" sed -i 's/SELINUX=*/SELINUX=disabled/g' /etc/selinux/config && setenforce 0 && echo "关闭selinux"#安装bind服务yum install bind bind-utils -y#测试是否安装成功if [ $? -eq 0 ]; then echo "bind安装成功" else echo "bind安装失败,即将退出" exit 0 fi#!/bin/bash#提示用户输入信息read -p "请输入主服务器的 IP 地址: " MASTER_IP read -p "请输入从服务器的 IP 地址: " SLAVE_IP read -p "请输入域名: " DOMAIN#提取 IP 地址的网络段NETWORK=$(echo $MASTER_IP | cut -d '.' -f 1-3) REVERSE_NETWORK=$(echo $NETWORK | awk -F. '{print $3"."$2"."$1}')#配置主服务器的 named.confcat << EOF > /etc/named.conf options { listen-on port 53 { 127.0.0.1; $MASTER_IP; }; listen-on-v6 port 53 { ::1; }; directory "/var/named"; dump-file "/var/named/data/cache_dump.db"; statistics-file "/var/named/data/named_stats.txt"; memstatistics-file "/var/named/data/named_mem_stats.txt"; recursing-file "/var/named/data/named.recursing"; secroots-file "/var/named/data/named.secroots"; allow-query { any; }; recursion yes; dnssec-enable yes; dnssec-validation yes; bindkeys-file "/etc/named.iscdlv.key"; managed-keys-directory "/var/named/dynamic"; pid-file "/run/named/named.pid"; session-keyfile "/run/named/session.key"; }; logging { channel default_debug { file "data/named.run"; severity dynamic; }; }; zone "." IN { type hint; file "named.ca"; }; zone "$DOMAIN" IN { type master; file "$DOMAIN.zone"; allow-transfer { $SLAVE_IP; }; }; zone "$REVERSE_NETWORK.in-addr.arpa" IN { type master; file "$REVERSE_NETWORK.rev"; allow-transfer { $SLAVE_IP; }; }; include "/etc/named.rfc1912.zones"; include "/etc/named.root.key"; EOF#创建正向区域文件cat << EOF > /var/named/$DOMAIN.zone $TTL 86400 @ IN SOA ns1.$DOMAIN. admin.$DOMAIN. ( $(date +%Y%m%d01) ; Serial 3600 ; Refresh 1800 ; Retry 604800 ; Expire 86400 ) ; Minimum IN NS ns1.$DOMAIN. ns1 IN A $MASTER_IP www IN A $MASTER_IP EOF#创建反向区域文件MASTER_LAST_OCTET=$(echo $MASTER_IP | cut -d '.' -f 4) cat << EOF > /var/named/$REVERSE_NETWORK.rev $TTL 86400 @ IN SOA ns1.$DOMAIN. admin.$DOMAIN. ( $(date +%Y%m%d01) ; Serial 3600 ; Refresh 1800 ; Retry 604800 ; Expire 86400 ) ; Minimum IN NS ns1.$DOMAIN. $MASTER_LAST_OCTET IN PTR ns1.$DOMAIN. EOF#修改文件权限chown named:named /var/named/$DOMAIN.zone chown named:named /var/named/$REVERSE_NETWORK.rev#启动并设置开机自启systemctl start named systemctl enable namedecho "主服务器配置完成!"
下图为结果图DNS测试情况:

#!/bin/bashvsftpd虚拟用户安装配置脚本功能:1.配置虚拟用户FTP 2.设置定时备份 3.管理用户权限#全局变量定义VUSER_HOME="/data/ftp"
VUSER_CONF_DIR="/etc/vsftpd/vsftpd_user_conf"
VUSER_DB="/etc/vsftpd/vsftpd_login.db"
VUSER_LIST="/etc/vsftpd/vusers.list"
SYSTEM_USER="vuser"
BACKUP_DIR="/var/ftp/pub" # 新增备份目录
DATA_DIR="/data/ftp" # 业务数据目录
CRON_LOG="/var/log/ftp_backup.log" # 备份日志#函数定义log_info() { echo -e "\033[34m[INFO] $1\033[0m"; }
log_error() { echo -e "\033[31m[ERROR] $1\033[0m"; }
check_command() { command -v $1 >/dev/null || { log_error "$1未安装,安装失败!"; exit 1; } }#环境检查log_info "开始环境检查..."
check_command yum
check_command db_load
mkdir -p $BACKUP_DIR $DATA_DIR # 创建业务目录和备份目录#安装依赖包(优化镜像源配置)log_info "配置阿里云镜像源..."
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum clean all >/dev/null
yum makecache fast >/dev/nulllog_info "开始安装vsftpd及依赖..."
yum install -y vsftpd libdb-utils lftp cronie >/dev/null
if [ $? -ne 0 ]; thenlog_error "yum安装失败,请检查网络连接或系统状态!"exit 1
fi#关闭防火墙和SELinux(优化配置)log_info "关闭防火墙..."
systemctl stop firewalld >/dev/null
systemctl disable firewalld >/dev/nulllog_info "配置SELinux..."
setenforce 0 >/dev/null
if ! grep -q "^SELINUX=disabled" /etc/selinux/config; thensed -i 's/^SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config
fi#创建虚拟用户(新增业务用户)log_info "创建虚拟用户列表..."
cat > "$VUSER_LIST" <<EOF
employeeA
employeeA@123
outsourceB
outsourceB@456
backupuser
Backup@789
oppic
oppic_2025
EOF#生成虚拟用户数据库log_info "生成认证数据库..."
db_load -T -t hash -f "$VUSER_LIST" "$VUSER_DB" >/dev/null
if [ $? -ne 0 ]; thenlog_error "数据库生成失败,请检查$VUSER_LIST格式!"exit 1
fi
chmod 600 "$VUSER_DB"#配置PAM认证log_info "配置PAM认证..."
mv /etc/pam.d/vsftpd{,.bak} >/dev/null 2>&1
cat > /etc/pam.d/vsftpd <<EOF
#%PAM-1.0
auth required pam_userdb.so db=/etc/vsftpd/vsftpd_login
account required pam_userdb.so db=/etc/vsftpd/vsftpd_login
EOF#创建系统映射用户log_info "创建虚拟用户主目录..."
mkdir -p "$VUSER_HOME"/{employeeA,outsourceB,oppic} $DATA_DIR $BACKUP_DIR
chmod 755 "$VUSER_HOME"
chown -R "$SYSTEM_USER":"$SYSTEM_USER" "$VUSER_HOME"log_info "创建系统映射用户..."
if ! id "$SYSTEM_USER" &>/dev/null; thenuseradd -d "$VUSER_HOME" -s /sbin/nologin "$SYSTEM_USER" >/dev/null 2>&1 || {log_error "用户$SYSTEM_USER创建失败,请检查权限!"exit 1}
fi#配置vsftpd主文件log_info "配置vsftpd主文件..."
cat > /etc/vsftpd/vsftpd.conf <<EOF
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_file=/var/log/xferlog
xferlog_std_format=YES
listen=YES
listen_ipv6=NO
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
guest_enable=YES
guest_username=$SYSTEM_USER
allow_writeable_chroot=YES
chroot_local_user=YES
user_config_dir=$VUSER_CONF_DIR
pasv_enable=YES
pasv_min_port=30000
pasv_max_port=30999
EOF#配置用户独立权限(新增权限管理)log_info "创建用户独立配置..."
mkdir -p "$VUSER_CONF_DIR"#员工A配置(可上传下载)cat > "$VUSER_CONF_DIR/employeeA" <<EOF
local_root=$DATA_DIR
write_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
download_enable=YES
file_open_mode=0666
EOF#外包B配置(仅上传)cat > "$VUSER_CONF_DIR/outsourceB" <<EOF
local_root=$DATA_DIR
write_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
download_enable=NO
cmds_deny=RETR
EOF#备份用户配置(只读)cat > "$VUSER_CONF_DIR/backupuser" <<EOF
local_root=$BACKUP_DIR
write_enable=NO
anon_upload_enable=NO
anon_mkdir_write_enable=NO
download_enable=NO
EOF#配置定时备份(新增备份功能)log_info "配置自动备份系统..."
cat > /usr/local/bin/ftp_backup.sh <<'EOF'
#!/bin/bash#备份配置BACKUP_SRC="/var/log"
FTP_SERVER="localhost"
BACKUP_USER="backupuser"
BACKUP_PASS="Backup@789"
BACKUP_DIR="/pub"#生成备份文件名BACKUP_FILE="logbackup_$(date +%Y%m%d_%H%M).tgz"#执行备份tar czf /tmp/${BACKUP_FILE} ${BACKUP_SRC}/*.log 2>/dev/null
if [ $? -ne 0 ]; thenecho "$(date) - 备份文件打包失败" >> /var/log/ftp_backup.logexit 1
fi#上传到FTPlftp -u ${BACKUP_USER},${BACKUP_PASS} ${FTP_SERVER} <<END
cd ${BACKUP_DIR}
put /tmp/${BACKUP_FILE}
bye
ENDif [ $? -eq 0 ]; thenecho "$(date) - 备份成功: ${BACKUP_FILE}" >> /var/log/ftp_backup.log
elseecho "$(date) - 备份上传失败" >> /var/log/ftp_backup.log
fi#清理临时文件rm -f /tmp/${BACKUP_FILE}#保留最近7天备份find ${BACKUP_DIR} -name "logbackup_*.tgz" -mtime +7 -delete
EOFchmod +x /usr/local/bin/ftp_backup.sh
echo "0 1 * * * root /usr/local/bin/ftp_backup.sh" > /etc/cron.d/ftp_backup#启动服务log_info "启动vsftpd服务..."
systemctl restart vsftpd >/dev/null 2>&1
if [ $? -ne 0 ]; thenlog_error "服务启动失败,请检查配置文件!"exit 1
fi
systemctl enable vsftpd >/dev/null#验证测试log_info "开始验证测试..."
FTP_SERVER_IP=$(hostname -I | awk '{print $1}')#测试员工A权限log_info "测试员工A权限..."
lftp -u employeeA,employeeA@123 ${FTP_SERVER_IP} <<END
cd /data/ftp
put /etc/hostname
get hostname /tmp/
ls
bye
END#测试外包B权限log_info "测试外包B权限..."
lftp -u outsourceB,outsourceB@456 ${FTP_SERVER_IP} <<END 2>&1 | grep "Access denied"
cd /data/ftp
get hostname
bye
END#测试备份功能log_info "执行首次备份测试..."
/usr/local/bin/ftp_backup.sh
if [ -f "${BACKUP_DIR}/logbackup_$(date +%Y%m%d)*.tgz" ]; thenlog_info "备份验证成功"
elselog_error "备份文件未生成,请检查配置!"
filog_info "
=== 部署完成报告 ===
FTP服务地址: ftp://${FTP_SERVER_IP}
数据存储目录: ${DATA_DIR}
备份存储目录: ${BACKUP_DIR}用户权限说明:1. 员工A (employeeA/employeeA@123)- 可上传下载文件- 访问路径: /data/ftp2. 外包B (outsourceB/outsourceB@456)- 仅可上传文件- 禁止下载操作3. 备份用户 (backupuser/Backup@789)- 仅限系统自动使用定时备份配置:执行时间: 每天凌晨1点备份日志: /var/log/ftp_backup.log保留策略: 保留最近7天备份
"

#!/bin/bash#Samba本地用户认证共享配置脚本#使用系统本地用户+组认证#保持DNS服务器配置#定义变量DOMAIN="daoyeniubi.com" # 保持域名配置
DNS_SERVER="192.168.135.160" # 替换为实际DNS服务器IP
SHARE_GROUPS=("manager" "market" "admin") # 需要创建的组
SHARE_USERS=( # 用户配置数组"john:manager""mike:market""admin:admin"
)#安装必要软件包yum install -y samba samba-client policycoreutils-python-utils#配置DNS指向cat > /etc/resolv.conf << EOF
search $DOMAIN
nameserver $DNS_SERVER
EOF#配置Samba主文件cat > /etc/samba/smb.conf << EOF
[global]workgroup = WORKGROUPsecurity = userpassdb backend = tdbsamprinting = cupsprintcap name = cupsload printers = yescups options = raw[shared]path = /data/sharevalid users = @userswritable = yesbrowseable = yescreate mask = 0664directory mask = 0775[manager]path = /data/managervalid users = @manager, @adminwritable = yesbrowseable = yescreate mask = 0664directory mask = 0775force group = manager[market]path = /data/marketvalid users = @market, @adminwritable = yesbrowseable = yescreate mask = 0664directory mask = 0775force group = market
EOF#创建系统用户和组for group in "${SHARE_GROUPS[@]}"; dogroupadd -f $group
donefor user_info in "${SHARE_USERS[@]}"; doIFS=':' read -ra user_data <<< "$user_info"user=${user_data[0]}group=${user_data[1]}useradd -M -s /sbin/nologin -G $group $userecho "为 $user 设置SMB密码:"smbpasswd -a $userdone#创建共享目录并设置权限mkdir -p /data/{share,manager,market}
chmod 2775 /data/share /data/manager /data/market
chown :manager /data/manager
chown :market /data/market
chown :users /data/share#配置SELinuxsetsebool -P samba_export_all_rw=1
semanage fcontext -a -t samba_share_t "/data/share(/.*)?"
semanage fcontext -a -t samba_share_t "/data/manager(/.*)?"
semanage fcontext -a -t samba_share_t "/data/market(/.*)?"
restorecon -Rv /data#防火墙配置firewall-cmd --permanent --add-service=samba
firewall-cmd --reload#重启服务systemctl restart smb
systemctl enable smb#验证命令提示echo "配置完成!验证步骤:"
echo "1. 检查共享列表: smbclient -L localhost -U%"
echo "2. 访问共享示例:"
echo " - 经理共享: smbclient //$(hostname)/manager -U john"
echo " - 市场共享: smbclient //$(hostname)/market -U mike"
echo " - 管理员测试: smbclient //$(hostname)/manager -U admin"
限制smb服务器磁盘规划,规划文件文件挂载及存放
#!/bin/bash
# Samba共享自动配置与验证脚本# 服务端配置部分
SERVER_IP=$(hostname -I | awk '{print $1}')
DOMAIN="samba.abc.com"
SHARE_USER_PASS="123456" # 设置统一密码,生产环境建议使用更安全的方式# 创建共享目录结构
mkdir -p /data/{manager,market}
echo "samba test." > /data/manager/sa.txt
cp /var/log/secure /data/market/# 设置权限
chmod 2775 /data/{manager,market}
chown :manager /data/manager
chown :market /data/market
restorecon -Rv /data# 创建系统用户和组
declare -A USER_GROUPS=(["john"]="manager"["mike"]="market"["admin"]="admin"
)for user in "${!USER_GROUPS[@]}"; dogroup=${USER_GROUPS[$user]}groupadd -f $groupif ! id -u $user &>/dev/null; thenuseradd -M -s /sbin/nologin -G $group $userfi(echo "$SHARE_USER_PASS"; echo "$SHARE_USER_PASS") | smbpasswd -a -s $user
done# 配置SELinux
setsebool -P samba_export_all_rw=1
semanage fcontext -a -t samba_share_t "/data/manager(/.*)?"
semanage fcontext -a -t samba_share_t "/data/market(/.*)?"
restorecon -Rv /data# 防火墙配置
firewall-cmd --permanent --add-service=samba
firewall-cmd --reload# 重启服务
systemctl restart smb
systemctl enable smb# 客户端验证指令生成
cat <<EOF==================== 客户端验证步骤 ====================1. Windows客户端访问:资源管理器地址栏输入:\\\\$DOMAIN\\manager使用凭证:- john 用户:用户名 john 密码 $SHARE_USER_PASS- admin 用户:用户名 admin 密码 $SHARE_USER_PASS应能看到 sa.txt 文件2. Linux客户端挂载:# 安装依赖sudo yum install -y cifs-utils# 创建挂载点sudo mkdir -p /opt/market# 临时挂载测试sudo mount -t cifs //$DOMAIN/market /opt/market \\-o username=mike,password=$SHARE_USER_PASS,uid=\$(id -u),gid=\$(id -g)# 查看文件ls -l /opt/market/secure# 持久化挂载(编辑/etc/fstab)://$DOMAIN/market /opt/market cifs credentials=/etc/samba/cred,uid=\$(id -u),gid=\$(id -g) 0 0创建凭据文件:echo -e "username=mike\\npassword=$SHARE_USER_PASS" | sudo tee /etc/samba/credsudo chmod 600 /etc/samba/cred3. 服务端状态检查:smbstatustestparm -s
EOF
samba脚本运行结果

服务器安全控制 加强系统账号安全 清理无用的账号,锁定长期不用的账号,锁定账号配置文件 设置用户密码的过期时间为90天 配置保持历史命令10条 配置闲置超时时间为600秒 加强系统引导和登录安全 为GRUB菜单设置密码,限制更改GRUB引导参数 禁止root用户从tty5、tty6登录
检测弱口令账号 使用John the Ripper检查所有服务器的弱口令 根据弱口令检测检测结果分别重设口令,提高口令复杂度
#!/bin/bash
# 服务器安全加固脚本 - 谨慎执行前请备份系统!# 检查是否为root权限
if [ "$(id -u)" != "0" ]; thenecho "错误:必须使用root权限运行此脚本!" >&2echo "请尝试 'sudo $0'"exit 1
fi# 记录日志
LOG_FILE="/var/log/security_harden.log"
exec > >(tee -a "$LOG_FILE") 2>&1
echo "安全加固开始时间: $(date)"#----------------------- 第一部分:系统账号安全 -----------------------
echo ">>> 正在加强系统账号安全..."# 1. 清理无用账号(示例:删除testuser,请根据实际情况修改)
UNUSED_ACCOUNTS="testuser guest demo" # 在此定义需删除的账户
for user in $UNUSED_ACCOUNTS; doif id "$user" &>/dev/null; thenecho "正在删除账户:$user"userdel -r "$user" 2>/dev/null || echo "删除失败:$user"fi
done# 2. 锁定长期未使用账号(示例:锁定olduser)
INACTIVE_ACCOUNTS="olduser" # 在此定义需锁定的账户
for user in $INACTIVE_ACCOUNTS; doif id "$user" &>/dev/null; thenecho "正在锁定账户:$user"passwd -l "$user"fi
done# 3. 锁定账户配置文件
echo "锁定系统账户配置文件..."
chattr +i /etc/passwd /etc/shadow /etc/group 2>/dev/null# 4. 设置密码过期策略
echo "配置密码过期时间为90天..."
sed -i 's/^PASS_MAX_DAYS.*/PASS_MAX_DAYS 90/' /etc/login.defs
sed -i 's/^PASS_MIN_DAYS.*/PASS_MIN_DAYS 1/' /etc/login.defs
awk -F: '($2 != "!") {system("chage --maxdays 90 "$1)}' /etc/shadow# 5. 历史命令保留10条
echo "export HISTSIZE=10" >> /etc/profile
echo "export HISTFILESIZE=10" >> /etc/profile# 6. 闲置超时600秒
echo "export TMOUT=600" >> /etc/profile
source /etc/profile#----------------------- 第二部分:引导和登录安全 -----------------------
echo ">>> 正在配置引导和登录安全..."# 1. 设置GRUB密码
read -rp "是否为GRUB设置密码?(y/n, 默认n): " grub_choice
if [[ $grub_choice =~ [Yy] ]]; thenecho "请设置GRUB密码:"grub-mkpasswd-pbkdf2 | tee /tmp/grub_hash.txtgrub_hash=$(awk -F': ' '/hash/{print $2}' /tmp/grub_hash.txt)[ -n "$grub_hash" ] && {cat << EOF > /etc/grub.d/40_custom
set superusers="admin"
password_pbkdf2 admin $grub_hash
EOFupdate-grub 2>/dev/null || grub2-mkconfig -o /boot/grub2/grub.cfgecho "GRUB密码已设置!"}
fi# 2. 禁止root登录tty5/tty6
sed -i '/^[^#].*tty5$/s/^/#/' /etc/securetty
sed -i '/^[^#].*tty6$/s/^/#/' /etc/securetty#----------------------- 第三部分:弱口令检测与修复 -----------------------
echo ">>> 正在检测弱口令..."# 1. 安装John the Ripper
if command -v apt &>/dev/null; thenapt install -y john
elif command -v yum &>/dev/null; thenyum install -y epel-releaseyum install -y john
fi# 2. 检测弱口令
unshadow /etc/passwd /etc/shadow > /tmp/passwd.db
echo "正在运行弱口令检测(可能需要时间)..."
john --format=crypt /tmp/passwd.db | tee /tmp/weak_passwords.txt
echo "检测结果已保存至:/tmp/weak_passwords.txt"# 3. 密码复杂度配置
echo "配置密码复杂度策略..."
if [ -f /etc/security/pwquality.conf ]; thensed -i 's/^# minlen =.*/minlen = 12/' /etc/security/pwquality.confsed -i 's/^# minclass =.*/minclass = 3/' /etc/security/pwquality.conf
fi#----------------------- 第四部分:其他安全加固 -----------------------
echo ">>> 正在执行其他安全加固..."# 1. SSH加固
echo "配置SSH安全策略..."
sshd_config="/etc/ssh/sshd_config"
cp $sshd_config $sshd_config.bak
sed -i 's/^#PermitRootLogin.*/PermitRootLogin no/' $sshd_config
sed -i 's/^PasswordAuthentication.*/PasswordAuthentication no/' $sshd_config
systemctl restart sshd# 2. 防火墙配置
if command -v ufw &>/dev/null; thenufw enable
elif command -v firewall-cmd &>/dev/null; thensystemctl start firewalldfirewall-cmd --reload
fi# 3. 系统更新
echo "正在更新系统..."
if command -v apt &>/dev/null; thenapt update && apt upgrade -y
elif command -v yum &>/dev/null; thenyum update -y
fi#----------------------- 完成提示 -----------------------
echo "安全加固已完成!请执行以下操作验证:"
echo "1. 重启服务器检查GRUB密码是否生效"
echo "2. 检查/etc/securetty是否已禁用tty5/tty6"
echo "3. 检查弱口令检测结果并手动重置密码:/tmp/weak_passwords.txt"
echo "4. 测试SSH密钥登录是否正常"
echo "详细日志请查看:$LOG_FILE"
相关文章:
Linux服务器组建与管理
#!/bin/bash #判断是否是root用户if [ "$USER" ! "root" ]; then echo "不是root用户,无法进行安装操作" exit 1 fi#关闭防火墙systemctl stop firewalld && systemctl disable firewalld && echo "防火墙已经关…...
程序化广告行业(48/89):DSP与外部平台对接的关键要点解析
程序化广告行业(48/89):DSP与外部平台对接的关键要点解析 大家好!在之前的博客中,我们逐步深入了解了程序化广告行业的诸多知识。一直以来,我都希望能和大家一起在这个领域探索,不断进步&#…...
设计模式 Day 2:工厂方法模式(Factory Method Pattern)详解
继 Day 1 学习了单例模式之后,今天我们继续深入对象创建型设计模式——工厂方法模式(Factory Method)。工厂方法模式为对象创建提供了更大的灵活性和扩展性,是实际开发中使用频率极高的一种设计模式。 一方面,我们将简…...
自动驾驶浪潮下,HMI 设计如何保障安全与便捷?
自动驾驶系统与 HMI 设计的关联性 自动驾驶系统涵盖了一系列复杂的传感器技术、算法以及执行机构。从激光雷达、摄像头等环境感知传感器,到用于处理海量数据的人工智能算法,再到控制车辆行驶的动力与转向执行系统,各部分协同工作,…...
瑞昱RTD2556QR显示器驱动芯片
一、概述 RTD2556QR芯片是由Realtek公司精心研发的一款高性能显示驱动芯片,专为满足现代显示设备对高分辨率、多功能接口及稳定性能的需求而设计。该芯片凭借其卓越的技术特性和广泛的应用领域,在显示驱动市场中占据重要地位。它集成了多种先进的功能模…...
复合缩放EfficientNet原理详解
1. 为什么复合缩放更高效? (1)单维度缩放的瓶颈 增加深度(层数): 更深的网络可以学习更复杂特征,但容易导致梯度消失/爆炸问题,且计算量随深度线性增长。 问题:深层网络…...
线程等待与唤醒的几种方法与注意事项
写在前面:无论是调用哪种等待和唤醒的方法,都必须是当前线程所持有的对象,否则会导致 java.lang.IllegalMonitorStateException 等并发安全问题。 以三个线程循环打印 XYZ 为例。 一、方法 1.1 Object 对象锁 可以通过 synchronized 对方…...
rustdesk 客户端使用
配置中继服务器 RustDesk 搭建-CSDN博客 配置客户端,服务端(控制方,被控方) 1.下载rustdesk.exe(windows为例) 2.完成后如下 3.配置...
react+antd封装一个可回车自定义option的select并且与某些内容相互禁用
需求背景 一个select框 现在要求可多选 并且原有一个any的选项 其他选项为输入后回车自己增加 若选择了any 则其他选项不可选择反之选择其他选项any不可选择 并且回车新增时也不可直接加入到选中数组只加入到option内 并且不可重复添加新内容 实现过程 <Form.Item …...
碳化硅 MOSFET三相逆变电路损耗新算法
基 于 碳 化 硅 MOSFET三相逆变电路损耗新算法 摘 要 提出了一种三相逆变电路功率开关器件损耗计算的新方法.为了达到将高频电力电子电路和实时仿真算 法 相 结 合 应 用 于 嵌 入 式 实 时 仿 真 平 台 的 目 的 ,针 对 工 程 应 用 中 逆 变 器 损 耗 计 算 的 实…...
增加等IO状态的唤醒堆栈打印及缺页异常导致iowait分析
一、背景 在之前的博客 在计算进程D状态持续时间及等IO的时间遇到的一处问题-CSDN博客 里,我们修复了一处在抓取D状态及等IO状态堆栈的监控程序的一处时间计算bug,在这篇博客里,我们进一步丰富监控程序,在进程iodelay被唤醒时&am…...
nodejs:midi-writer-js 将基金净值数据转换为 midi 文件
开放式基金是没有公布每日交易量的。 /funds/data/660008.csv 文件开头: date,jz,ljjz 2016-01-04,1.1141,1.1141 2016-01-05,1.1161,1.1161 2016-01-06,1.1350,1.1350 这是一个将开放式基金数据转换为 MIDI音乐的 js 程序示例。该程序将基金净值映射为 MIDI音符的…...
新能源汽车空调系统(R134A)性能评估(一)
国内外主流空调系统厂家:贝尔、德尔福、空调国际、法雷奥、电装、松芝、杰信、新电、豫新等 泛亚汽车的空调电子部是比较优秀的整车空调研发团队。 空调系统综合试验台架是一套由试验室、风量测定装置、空气调和器、空气温度测定装置、湿度测定装置、加热器试验辅助…...
Oracle 数据库中优化 INSERT INTO 操作的性能
在 Oracle 数据库中优化 INSERT INTO 操作的性能,尤其是在处理大批量数据时,可以通过以下方法显著提升效率。 使用直接路径插入(Direct-Path Insert) 通过 APPEND 提示绕过缓冲区缓存,直接写入数据文件,减…...
Ubuntu 22.04安装MongoDB:GLM4模型对话数据收集与微调教程
在Ubuntu 22.04安装MongoDB Community Edition的教程请点击下方链接进行参考: 点击这里获取MongoDB Community Edition安装教程 今天将为大家带来如何微调GLM4模型并连接数据库进行对话的教程。快跟着小编一起试试吧~ 1. 大模型 ChatGLM4 微调步骤 1.1 从 github…...
Java 中的继承与多态:面向对象编程的核心特性
继承和多态是面向对象编程中最重要的两个概念,它们使代码结构更加清晰、灵活,并极大地提高了代码复用性。本文将深入探讨 Java 中的继承与多态,帮助你更好地理解这些核心概念。 1. 继承 1.1 为什么需要继承 在实际编程中,我们经…...
可编程增益放大器(PGA)在智能传感器自调节系统中的角色
在电子电路设计中,放大器芯片作为信号处理的核心器件,其性能直接影响系统整体表现。然而面对运算放大器、功率放大器、仪表放大器等众多类型,工程师常陷入选型困惑。作为国内领先的半导体解决方案提供商,华芯邦深耕放大器芯片领域…...
微信登录、商品浏览前瞻
一.业务效果 二.所需技术...
浙大研究团队揭示电场调控5-HT1AR的分子机制
本期介绍的文章题为 “Structural Insight into the Inactive/Active States of 5‑HT1AR and Molecular Mechanisms of Electric Fields in Modulating 5‑HT1AR” 。近期发表于JCIM。通过分子动力学模拟,探究 5-羟色胺 1A 受体(5-HT1AR) 在非活性 / 活性状态的构象…...
RoboOS与RoboBrain:引领具身智能新时代的跨本体协作框架
摘要 2025年3月29日,智源研究院在中关村论坛的“未来人工智能先锋论坛”上发布了两项重要成果:跨本体具身大小脑协作框架RoboOS与开源具身大脑RoboBrain。这一创新技术使机器人能够实现跨场景多任务部署及跨本体协作,推动单机智能向群体智能…...
视频AI赋能水利行业生态治理,水电站大坝漂浮物实时监测与智能预警方案
水电站大坝周边水域垃圾漂浮物不仅影响水质,还可能对大坝设施运行、水生态环境造成威胁。传统依靠人工巡检的方式效率低、存在监测盲区,难以实时全面地掌握漂浮物情况。借助EasyCVR视频汇聚平台与TSINGSEE青犀AI算法中台构建智能化监测方案,能…...
SnapdragonCamera骁龙相机源码解析
骁龙相机是高通开发的一个测试系统摄像头的demo,代码完善,功能强大。可以配合Camera驱动进行功能联调。 很多逻辑代码在CaptureModule.java里。 CaptureModule有8000多行,包罗万象。 涉及到界面显示要结合CaptureUI.java 一起来实现。 Ca…...
Spring Boot 整合 RabbitMQ:注解声明队列与交换机详解
RabbitMQ 作为一款高性能的消息中间件,在分布式系统中广泛应用。Spring Boot 通过 spring-boot-starter-amqp 提供了对 RabbitMQ 的无缝集成,开发者可以借助注解快速声明队列、交换机及绑定规则,极大简化了配置流程。本文将通过代码示例和原理…...
SecureCRT常用命令
一、连接命令 1. telnet:使用Telnet协议连接到远程设备。 例如:telnet 192.168.1.1 会连接到IP地址为192.168.1.1的远程设备。 二、文件传输命令 2. put:上传文件到远程服务器。 例如:put C:\localfile.txt /remotefolder 将本地文…...
flink 分组窗口聚合 与 窗口表值函数聚合 的区别
警告:分组窗口聚合已经过时。推荐使用更加强大和有效的窗口表值函数聚合。 参考官方文档 在 Apache Flink 中,分组窗口聚合(Group Window Aggregation) 和 窗口表值函数聚合(Windowing TVF Aggregation)…...
阿里云Tair KVCache:打造以缓存为中心的大模型Token超级工厂
一、Tair KVCache 简介 Tair KVCache 是阿里云瑶池旗下云数据库 Tair 面向大语言模型推理场景推出的 KVCache 缓存加速服务。 随着互联网技术的演进与流量规模的激增,缓存技术逐渐成为系统架构的核心组件。该阶段催生了 Redis 等开源缓存数据库,阿里巴巴…...
通过TIM+DMA Burst 实现STM32输出变频且不同脉冲数量的PWM波形
Burst介绍: DMA控制器可以生成单次传输或增量突发传输,传输的节拍数为4、8或16。 为了确保数据一致性,构成突发传输的每组传输都是不可分割的:AHB传输被锁定,AHB总线矩阵的仲裁器在突发传输序列期间不会撤销DMA主设备…...
【JAVA】【疑难杂症解决!】org.springframework.transaction.UnexpectedRollbackException:
程序莫名其妙出现这个事务回滚错误,不显示具体错误信息!! 问题:前几天遇到一个问题,代码没有抛出我想要的带自定义提示消息的异常,却报了个这个,去搜了一下,大概原因如下: 因为我在方法上写了@Transactional注解,里边调用的service的方法上也写了@Transactional注解…...
[Effective C++]条款26:尽可能延后变量定义的出现时间
. 在C中,尽可能延后变量定义的出现时间,主要原因是为了提供代码的可读性,减少不必要的开销以及避免潜在的错误。 1、代码执行过程中抛出异常 如果在代码开头定义了变量,但在后续代码中抛出了异常,可能导致变量在未被使…...
如何在k8s中对接s3存储
github地址: https://github.com/majst01/csi-driver-s3 1.CSI for S3 这是用于 S3(或兼容 S3)存储的容器存储接口 (CSI)。它可以动态分配存储桶并通过Fuse mount将它们安装到任何容器中 2.状态 这仍处于试验阶段,不应在任何…...
