个人初始化 Linux 服务器的 SOP
在配置系统文件的时候我写下了这句话因为这个坑让我排查了若干小时: 所有的全局配置必须写在文件的前半部分。所有的Match规则必须、必须、必须扔到配置文件的绝对最末尾概要本文记录我初始化 Linux 服务器的标准作业程序SOP这并非通用指南仅作为个人快速部署环境的速查手册。重装操作系统重装有风险本文不为任何脚本的安全性背书请自行衡量并承担后果。如果条件允许请尽可能使用自定义 ISO 镜像手动安装。使用一键 DD 脚本对于不支持自定义 ISO 镜像的服务商使用一键 DD 脚本比较方便。开始前务必花费几分钟读下作者的说明文档这远比盲目粘贴命令重要。bin456789/reinstall支持重装的系统类型更多bohanwood/debi专注于纯净、精简的 Debian 系统环境以 Oracle ARM 机器安装 Debian 为例使用debi脚本的操作流程如下下载脚本curl-fLOhttps://raw.githubusercontent.com/bohanyang/debi/master/debi.shchmodx debi.sh重装配置sudo./debi.sh\--version13\--architecturearm64\--cloudflare\--userviamoe\--authorized-keys-url https://github.com/githubUserName.keys\--ssh-port22122参数说明--version 13指定 Debian 13代号Trixie--architecture arm64指定系统架构这里的arm64匹配 ARM 架构机器--cloudflare预设 Cloudflare 作为默认 DNS--user viamoe创建具有 sudo 权限的普通用户viamoe--authorized-keys-url https://github.com/githubUserName.keys导入 SSH 公钥实现无密码登录--ssh-port 22122更改默认 SSH 端口规避低级暴力扫描开始重装重启后机器将自动联网重装系统sudoreboot期间可通过 VNC 观察安装进度一般几分钟后新系统即可就绪。使用自定义 ISO 镜像若服务商支持上传自定义 ISO 镜像手动安装这是最为推荐的方式能让我们从源头掌控系统环境的纯净度。针对 Netcup 服务器的具体操作可参考Netcup 服务器安装自定义 ISO 镜像。完成重装后使用预设的用户凭据登录开始后续配置。配置用户赋予普通用户sudo权限方便后续使用和管理。# 切换到 root 用户su# sudo 免密码# 替换 dejavu 为实际用户名echodejavu ALL(ALL) NOPASSWD:ALL/etc/sudoers.d/dejavu# 设置权限chmod440/etc/sudoers.d/dejavuSSH 安全加固配置公钥登录# 退出 root 用户exit# 创建公钥目录mkdir-p~/.ssh# 粘贴 SSH 公钥vim~/.ssh/authorized_keys# 或者上传 SSH 公钥# ssh -i /path/to/your/ed25519_key usernameIP -p portchmod700~/.sshchmod600~/.ssh/authorized_keys优化 SSH 配置sudovim/etc/ssh/sshd_config重点修改以下配置# 修改默认 SSH 端口Port22122# 登录宽限时间# 超过 1 分钟不输入密码/密钥自动断开LoginGraceTime 1m# 禁止 root 用户直接登录PermitRootLogin no# 严格模式检查主目录权限StrictModesyes# 开启 SSH 公钥登录方式PubkeyAuthenticationyes# 禁止传统密码登录方式PasswordAuthentication no# 禁止空密码登录PermitEmptyPasswords no# 禁用键盘交互式认证防止通过 PAM 绕过密码限制KbdInteractiveAuthentication no# Debian 默认需要 yes否则可能会影响部分会话功能。UsePAMyes# 关闭 X11 转发X11Forwarding no# 保持 SSH 会话连接# 服务器每 60 秒发一次心跳包ClientAliveInterval60# 如果客户端 5 次没回应才断开ClientAliveCountMax5# 禁止 DNS 反向解析UseDNS no保持当前终端会话新开一个 SSH 连接确认正常否则回到保持的 SSH 会话中检查配置。# 检查 SSH 配置sudosshd-t# 使新的 SSH 配置生效sudosystemctl restart sshdIPv6 静态路由Netcup 服务器提供/64的 IPv6建议设置静态路由sudovim/etc/network/interfaces添加iface ens3 inet6 static address静态 IPv6 地址netmask64# Netcup network gatewaygateway fe80::1# 接受路由公告accept_ra2然后执行sudoipaddr flush dev ens3更换 Linux 内核推荐使用针对虚拟化优化、更加轻量和高效的 Cloud 内核。sudoaptinstall-ylinux-image-cloud-amd64重启加载新内核sudorebootuname-r# 输出6.12.63deb13-cloud-amd64清理旧内核# 列出已安装的内核包sudodpkg--list|greplinux-image# 输出示例ii linux-image-6.12.63deb13-amd646.12.63-1 amd64 Linux6.12for64-bit PCs(signed)ii linux-image-6.12.63deb13-cloud-amd646.12.63-1 amd64 Linux6.12forx86-64 cloud(signed)ii linux-image-amd646.12.63-1 amd64 Linuxfor64-bit PCs(meta-package)ii linux-image-cloud-amd646.12.63-1 amd64 Linuxforx86-64 cloud(meta-package)# 移除常规内核元包及具体版本请根据实际输出的版本号替换sudoaptpurge-ylinux-image-amd64 linux-image-6.12.63deb13-amd64# 更新引导sudoupdate-grub# 运行清理sudoaptautoremove--purge-y安装常用软件包按需安装基础软件包及常用应用程序。基本工具包sudoaptupdateaptupgradesudoaptinstall\apt-transport-https\build-essential\git\curl\wget\unzip\tmux\btop\bind9-dnsutils\tree\vim安装 Docker参考 Docker 官方文档 说明的步骤下列命令不保证时效性# 添加 Docker 官方的 GPG 密钥sudoapt-getupdatesudoapt-getinstallca-certificatescurlsudoinstall-m0755-d/etc/apt/keyringssudocurl-fsSLhttps://download.docker.com/linux/debian/gpg-o/etc/apt/keyrings/docker.ascsudochmodar /etc/apt/keyrings/docker.asc# 添加软件源echo\deb [arch$(dpkg --print-architecture)signed-by/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \$(./etc/os-releaseecho$VERSION_CODENAME)stable|\sudotee/etc/apt/sources.list.d/docker.list/dev/nullsudoapt-getupdatesudoapt-getinstalldocker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-pluginsudosystemctl statusdocker补充资料给 Docker 启用 IPv6 支持安装 Nginx同样地参考 Nginx 项目文档——在 Debian 上的 安装步骤sudoaptinstallcurlgnupg2 ca-certificates lsb-release debian-archive-keyring# 导入 GPG 密钥curlhttps://nginx.org/keys/nginx_signing.key|gpg--dearmor\|sudotee/usr/share/keyrings/nginx-archive-keyring.gpg/dev/null# 验证 GPG 密钥mkdir-m700~/.gnupg gpg --dry-run--quiet--no-keyring--import--import-options import-show /usr/share/keyrings/nginx-archive-keyring.gpgechodeb [signed-by/usr/share/keyrings/nginx-archive-keyring.gpg] \ http://nginx.org/packages/debianlsb_release-csnginx\|sudotee/etc/apt/sources.list.d/nginx.list# 设置仓库锁定优先使用 Nginx 官方提供的软件包echo-ePackage: *\nPin: origin nginx.org\nPin: release onginx\nPin-Priority: 900\n\|sudotee/etc/apt/preferences.d/99nginx# 安装 Nginxsudoaptupdatesudoaptinstallnginx# 启动 Nginxsudosystemctl start nginx使用自签 SSL/TLS 证书设置 Nginx 默认回退 (Fallback) 虚拟主机。# 准备目录sudomkdir-p/etc/nginx/certsudochmod700/etc/nginx/cert# 生成证书sudoopenssl req-x509-new-nodes-newkeyrsa:2048\-sha256\-days3650\-keyout/etc/nginx/cert/deny.key\-out/etc/nginx/cert/deny.pem\-subj/CXX/STDenied/LDenied/ODenied/CNinvalid.local\-addextsubjectAltNameDNS:invalid.local# 设置权限sudochmod600/etc/nginx/cert/deny.keysudochmod644/etc/nginx/cert/deny.pem新建虚拟主机配置文件sudovim/etc/nginx/conf.d/00-default.conf内容如下server{listen80default_server;listen[::]:80 default_server;server_name _;return444;}server{listen443ssl default_server;listen[::]:443 ssl default_server;server_name _;ssl_certificate /etc/nginx/cert/deny.pem;ssl_certificate_key /etc/nginx/cert/deny.key;ssl_protocols TLSv1.2 TLSv1.3;ssl_prefer_server_ciphers off;error_page497444/dev/null;return444;}重载 Nginx 配置sudonginx-tsudonginx-sreload设置 ZRAM 和 Swap合理配置 ZRAM 和 Swap平衡硬盘 I/O 性能和 CPU 开销。配置 ZRAMZRAM 通过在 RAM 中划分一块区域压缩速度远快于硬盘上的 Swap 空间。# 安装 zram-tools 管理工具sudoaptupdatesudoaptinstall-yzram-tools编辑 ZRAM 配置sudovim/etc/default/zramswap参数说明# 选择 zstd 算法最佳平衡压缩比和速度ALGOzstd# 分配 ZRAM 比例# 1GB RAM 建议 100%# 2~4GB RAM 建议 60%# 8GB RAM 以上建议 25%PERCENT70# 优先级 100确保系统优先使用 ZRAMPRIORITY100配置 SwapSwapfile 比 Swap 分区更为灵活# 创建 2GB 的 Swapfile# 1024 * 2 2048sudoddif/dev/zeroof/swapfilebs1Mcount2048statusprogress# 设置权限sudochmod600/swapfile# 格式化sudomkswap/swapfile# Swap 启用优先级低于 ZRAMsudoswapon--priority-2/swapfile# 启动时自动挂载echo/swapfile none swap sw,pri-2 0 0|sudotee-a/etc/fstab# 检查挂载sudomount-a系统内核调整根据物理 RAM 大小调整设置系统使用 Swap 的「积极性」。# 1GB RAM激进echovm.swappiness100|sudotee-a/etc/sysctl.conf# 2GB/4GB RAM积极echovm.swappiness60|sudotee-a/etc/sysctl.conf# 8GB RAM 以上保守echovm.swappiness10|sudotee-a/etc/sysctl.conf对于 2GB RAM 以下的机器应当更倾向于释放文件缓存echovm.vfs_cache_pressure50|sudotee-a/etc/sysctl.conf应用配置sudosysctl-p验证状态sudoswapon--showsudozramctlSSD Trim 优化如果 VPS/VDS 使用的是 NVMe SSD建议启用 Trim 自动优化。# 定时任务sudosystemctlenable--nowfstrim.timer并非所有服务商提供的 VPS/VDS 都支持 Trim可以验证下# DISC-MAX 列不为 0lsblk-DNAME DISC-ALN DISC-GRAN DISC-MAX DISC-ZERO sr000B 0B0zram004K 2T0vda0512B 2G0├─vda10512B 2G0└─vda20512B 2G0# 尝试手动触发sudofstrim-v/ /:434.4GiB(466435428352bytes)trimmedNTP 时区同步设置 UTC 时区无论服务器位于何处我都习惯将时区统一设置为 UTC世界协调时避免跨时区运维时产生的日志混乱和时间差纠纷是一个非常省心的「隐性福利」。sudotimedatectl set-timezone UTC使用 Chrony 同步时间与默认的 systemd-timesyncd 比Chrony 的精度和性能更佳。# 安装 Chrony 客户端sudoaptupdatesudoaptinstallchrony添加 NTP 服务器sudovim/etc/chrony/chrony.conf注释默认的pool及server行添加 Cloudflare NTP 节点server time.cloudflare.com iburst server time.cloudflare.com iburst server time.cloudflare.com iburst server time.cloudflare.com iburst启动 Chrony 服务sudosystemctl mask systemd-timesyncd.servicesudosystemctlenable--nowchrony验证同步状态chronyc sources-v配置 nftables 防火墙nftables 是 Linux 内核现代化的包过滤框架。在 Debian 13 中我们应该摒弃过时的 iptables 和 UFW直接拥抱原生且高效的 nftables。检查环境从 Debian 10 开始nftables 是默认安装的但通常处于未启用状态检查# 确保 nftables 已安装sudoaptupdatesudoaptinstallnftables-y# 默认 inactive 状态是正常的sudosystemctl status nftables若此前安装过 UFW建议卸载以免冲突sudoufw disablesudoaptpurge ufw-y理解配置在编写规则前只需掌握三个层级表Table规则的顶级容器链Chain绑定在网络钩子INPUT/FORWARD/OUTPUT上的规则集定义默认策略Drop 或 Accept规则Rule具体的匹配条件与行动开始使用以下配置是典型的「安全」服务器方案仅允许 Cloudflare CDN 回源访问 80/443 端口除 SSH 端口外全部切断。# 编辑配置文件sudovim/etc/nftables.conf语法很简单可以看注释#!/usr/sbin/nft -f# 刷新规则flush ruleset table inet filter{# # IP 集合 (Sets)# setcloudflare_v4{typeipv4_addr;flags interval;elements{173.245.48.0/20,103.21.244.0/22,103.22.200.0/22,103.31.4.0/22,141.101.64.0/18,108.162.192.0/18,190.93.240.0/20,188.114.96.0/20,197.234.240.0/22,198.41.128.0/17,162.158.0.0/15,104.16.0.0/13,104.24.0.0/14,172.64.0.0/13,131.0.72.0/22}}setcloudflare_v6{typeipv6_addr;flags interval;elements{2400:cb00::/32,2606:4700::/32,2803:f800::/32,2405:b500::/32,2405:8100::/32, 2a06:98c0::/29, 2c0f:f248::/32}}# # INPUT 链 (入站)# chain input{# 规则外流量拒绝typefilter hook input priority filter;policy drop;# 放行已建立连接ct state established, related accept# 丢弃无效包ct state invalid drop# 允许回环接口iifloaccept# 允许 IPv6 NDPip6 nexthdr icmpv6 icmpv6type{nd-neighbor-solicit, nd-neighbor-advert, nd-router-advert}accept# 允许 ICMP (速率限速)ipprotocol icmp limit rate4/second accept ip6 nexthdr icmpv6 icmpv6typeecho-request limit rate4/second accept# 允许 SSH 端口tcp dport22122accept# 仅限 Cloudflare IP 段访问 80/443ipsaddr cloudflare_v4 tcp dport{80,443}accept ip6 saddr cloudflare_v6 tcp dport{80,443}accept}# # FORWARD 链 (转发)# chain forward{# 规则外流量拒绝typefilter hook forward priority filter;policy drop;# 放行已建立连接ct state established, related accept# 丢弃无效包ct state invalid drop# 允许 Docker 出站 (覆盖默认网桥和自定义网桥)iifnamedocker0accept iifnamebr-*accept# 允许 Docker 容器间通信iifnamedocker0oifnamedocker0accept iifnamebr-*oifnamebr-*accept}# # OUTPUT 链 (出站)# chain output{# 默认允许所有出站typefilter hook output priority filter;policy accept;}}应用规则# 检查语法sudonft-c-f/etc/nftables.conf# 启动服务sudosystemctlenable--nownftables# Docker 重启后会自动注入规则sudosystemctl restart nftablessudosystemctl restartdocker# 测试 Docker 出站sudodockerrun--rmbusyboxping-c4dejavu.moe安装配置 Fail2ban# 安装 Fail2bansudoaptupdatesudoaptinstallfail2ban# 创建一个最小的 SSH 服务保护配置sudovim/etc/fail2ban/jail.local配置内容如下[DEFAULT]# 本机地址自动忽略防止误封自己ignoreip127.0.0.1/8 ::1# 封禁 1 天bantime1d# 在 10 分钟内累计失败即触发findtime10m# 触发封禁的失败次数阈值maxretry3# 自动 nftables 规则插入banactionnftables-multiport banaction_allportsnftables-allports[sshd]# 启用 SSH 保护enabledtrue# SSH 服务的监听端口务必正确匹配port22122# 使用 systemd 日志后端backendsystemd# 严格地匹配失败日志modeaggressive启动 Fail2ban 服务sudosystemctlenable--nowfail2bansudosystemctl restart nftablessudosystemctl restart fail2ban测试一下封禁# 封禁一个「黑户」sudofail2ban-clientsetsshd banip2400:6180:0:d2:0:2:9699:d000# 检查 nftables 规则中是否存在 f2b 动态表sudonft list ruleset|grepf2b检查 Fail2ban 配置# 巡查「监狱」sudofail2ban-client status# 查封禁 IPsudofail2ban-client status sshd至此一台纯净、安全的服务器已经准备就绪。Happy Hosting!另请参阅Cloudflare WAF 防护策略简易指南服务器使用 Cloudflare CDN 的最佳实践原文地址个人初始化 Linux 服务器的 SOP本文持续更新最新内容及相关资料请访问原文。

相关新闻

EasyExcel分批读取实战:海量Excel导入数据库的内存优化与性能调优

EasyExcel分批读取实战:海量Excel导入数据库的内存优化与性能调优

1. 从一次内存溢出说起:为什么单次全量读取Excel会翻车 很多人第一次处理Excel导入数据库的需求时,脑子里蹦出来的方案特别直接:用EasyExcel的 read 方法一把梭,把整个文件读成一个 List ,然后循环 insert 进数据…

2026/10/17 14:13:03 阅读更多 →
英文论文降AI率实战:不改变原意的语义级重构与工具选择

英文论文降AI率实战:不改变原意的语义级重构与工具选择

从第一篇英文论文终稿被查重系统旁的“AI生成可能性:偏高”标签贴上的那一刻起,大多数人的焦虑其实不是“我抄了没”,而是“我自己写的,怎么会被认成AI”。后来你会发现,问题往往出在行文方式上:长句太规整…

2026/10/17 14:12:02 阅读更多 →
VS Code插件配置避坑指南:15个前端插件安装与冲突排查

VS Code插件配置避坑指南:15个前端插件安装与冲突排查

简介:这份PDF资料面向前端开发者与VS Code初学者,系统梳理了15款高频实用插件,覆盖语言支持、代码补全、格式化与调试辅助等场景,帮助读者按需选装、提升编码效率与代码可读性。资源共1个PDF文件,约2.11MB,…

2026/10/17 14:12:02 阅读更多 →

最新新闻

深入理解 DOM NodeList:从基础到实战

深入理解 DOM NodeList:从基础到实战

1. 什么是 NodeListNodeList 是 DOM 中一个非常重要的集合类型,它表示一组节点的集合。当我们使用 document.querySelectorAll() 或 element.childNodes 等 API 时,返回的结果就是 NodeList。NodeList 与数组(Array)有相似之处&am…

2026/10/17 15:59:20 阅读更多 →
实测10款AI论文工具:从开题到答辩的辅助指南

实测10款AI论文工具:从开题到答辩的辅助指南

又到了一年论文季,后台和私信里全是问“有哪些真正能用的AI论文工具”的同学。去年我帮实验室带过不少本科生的毕业论文,自己也踩过不少坑。市面上的所谓“AI论文网站”鱼龙混杂,有真能提效的,也有纯粹割韭菜的。这篇东西不整虚的…

2026/10/17 15:59:20 阅读更多 →
Qt5兼容QFTP移植包:工业现场FTP文件传输实战方案

Qt5兼容QFTP移植包:工业现场FTP文件传输实战方案

简介:本资源是面向Qt初学者与跨平台开发者的QT5环境下FTP功能实现方案,解决QT5官方移除QFTP模块后无法直接使用FTP客户端API的实践难题。压缩包共8个文件(25KB),含4个C源文件(cpp)、3个头文件&a…

2026/10/17 15:59:20 阅读更多 →
华为云鲲鹏ECS三节点Hadoop集群搭建与OBS存储接入实战

华为云鲲鹏ECS三节点Hadoop集群搭建与OBS存储接入实战

简介:实验报告以华为云鲲鹏云环境为依托,完整记录在ECS与OBS上搭建Hadoop集群的全过程,面向高校大数据课程、云计算实训及刚接触分布式平台的初学者。内容从购买弹性云服务器和对象存储服务入手,详细说明AK/SK认证密钥获取、多节点…

2026/10/17 15:59:20 阅读更多 →
自适应滑模控制MATLAB仿真:抖振抑制与收敛性验证

自适应滑模控制MATLAB仿真:抖振抑制与收敛性验证

简介:本资源是一套面向控制工程专业学生与研究人员的自适应滑模控制MATLAB仿真实践包,聚焦空中机械臂等非线性不确定系统的鲁棒控制问题,适用于具备基础自动控制与MATLAB编程能力的学习者。压缩包共12个文件(7个m脚本实现控制器设…

2026/10/17 15:59:20 阅读更多 →
CSAPP第三版实验全攻略:从环境搭建到六大Lab避坑指南

CSAPP第三版实验全攻略:从环境搭建到六大Lab避坑指南

简介:《深入理解计算机系统》第三版配套实验包是一份面向计算机系统学习者的实践资源,适合正在阅读原书或准备系统掌握底层原理的读者。实验包围绕书中经典实验展开,覆盖汇编语言、内存管理、缓存模拟、进程控制、编译器构造与安全攻防等核心…

2026/10/17 15:58:19 阅读更多 →

日新闻

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

简介:《DeepSeek使用方法.pdf》是一份面向DeepSeek入门及进阶用户的完整使用指南,重点围绕V3与R1两款模型的能力差异与适用场景展开,帮助读者根据任务类型与成本选择合适的模型。资源共1个PDF文件,压缩包大小约311KB,篇…

2026/10/17 0:00:25 阅读更多 →
200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

简介:这是一份聚焦DeepSeek提示词优化的《200Deepseek润色指令》PDF文档,共收录两百余条可直接套用的润色指令,涵盖语法修正、风格统一、逻辑梳理、表达精炼等维度,并针对商务写作、学术论文、广告文案等场景给出差异化建议。文档…

2026/10/17 0:00:25 阅读更多 →
OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

简介:本资源是一份基于OpenCV的本科课程设计完整报告,面向计算机视觉初学者、图像处理学习者及高校通信/信息类专业学生,解决物体智能计数与检测结果结构化记录的实际问题。项目覆盖图像预处理、轮廓检测、边界框绘制、轨迹栏交互式参数调节、…

2026/10/17 0:00:25 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/16 21:35:51 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/17 1:44:59 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/16 15:04:24 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 21:54:38 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 3:49:43 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 14:23:36 阅读更多 →