Oracle 19c补丁静默安装全指南:p6880880 ZIP包结构与OPatch避坑实战
简介本资源是Oracle数据库19c官方补丁p6880880的完整安装包专为64位Linux系统设计面向DBA、运维工程师及Oracle数据库高级使用者用于修复已知安全漏洞、提升系统稳定性与性能表现尤其适用于生产环境定期维护与合规加固场景。压缩包共496个文件涵盖130个JAR核心Java组件、67个SOLinux动态链接库、45个Markdown说明文档、26个Properties配置文件及18个PL/SQL脚本等辅以OPatch工具链如opatch、opatchauto、datapatch、opatch_jvm_discovery等和多平台字体配置.bfc、证书与安全策略文件结构完整、开箱即用。资源大小为115.39MB格式为标准ZIP解压后可直接配合Oracle 19c环境执行补丁部署。目前已有2025人学习下载提供从补丁验证、应用到回滚的全周期支持能力是保障Oracle 19c长期稳定运行的关键更新资产。1. 这不是普通 ZIP 包p6880880_190000_Linux-x86-64.zip 是 Oracle 数据库补丁的标准化交付载体专为 RHEL/CentOS/Oracle Linux 7/8 x86-64 环境设计解决的是生产环境升级中「补丁依赖混乱、OPatch 版本不兼容、静默安装失败率高」三大高频翻车点。它不面向开发新手而是给已部署 Oracle 19c19.0.0.0单机或 RAC 集群的 DBA 和运维工程师准备的——你手头已有运行中的数据库需要在不中断业务的前提下打关键安全更新如 CVE-2023-22085、性能修复如 Bug 35219876或 OCR 损坏防护补丁。这个文件名本身已是 Oracle 官方补丁命名规范的完整编码p 前缀代表 Patch6880880 是 MOS 文档编号对应补丁集更新 PSU190000 指目标版本 19.0.0.0Linux-x86-64 则锁死平台。跳过它直接用 OPatch auto 或图形界面安装90% 的人会在「opatch prereq CheckConflictAgainstOHWithDetail」阶段报错退出。2. 补丁包结构解析与前置校验别急着 unzip先用 3 条命令确认它是否真的能用Oracle 补丁包不是普通压缩包其内部结构高度标准化但必须验证三件事签名有效性、OPatch 兼容性、目标 ORACLE_HOME 状态。跳过这步后续所有操作都是在浪费时间。2.1 解压前必做的三重校验从文件头到 MOS 文档核对首先检查 ZIP 文件完整性及签名# 1. 检查 ZIP 是否损坏非 CRC 校验而是结构合法性 unzip -t p6880880_190000_Linux-x86-64.zip /dev/null 21 echo ✓ ZIP 结构正常 || echo ✗ ZIP 损坏请重新下载 # 2. 提取并验证 GPG 签名Oracle 自 2021 年起强制签名无 .sig 文件则为无效包 # 注意此包通常附带 p6880880_190000_Linux-x86-64.zip.sig若缺失立即停止 [ -f p6880880_190000_Linux-x86-64.zip.sig ] \ gpg --verify p6880880_190000_Linux-x86-64.zip.sig p6880880_190000_Linux-x86-64.zip 2/dev/null | \ grep -q Good signature echo ✓ GPG 签名有效 || echo ✗ GPG 验证失败密钥未导入或签名损坏 # 3. 快速定位补丁元数据关键看它到底修什么 unzip -p p6880880_190000_Linux-x86-64.zip patchinfo.xml 2/dev/null | \ xmllint --xpath //patch_id/text() - 2/dev/null # 应输出6880880 —— 与文件名一致才可信提示patchinfo.xml是补丁的“身份证”包含patch_id、bug_list、conflicts_with、requires等字段。若unzip -p报错说明 ZIP 已被破坏或非官方源下载。不要尝试用jar xf或7z替代unzipOracle 补丁包对解压工具敏感。2.2 解压后目录结构解读为什么不能直接 cd 进去就 opatch apply解压后得到一个以补丁号命名的目录如6880880其内部结构是 Oracle 补丁生命周期管理的核心$ unzip p6880880_190000_Linux-x86-64.zip $ ls -F 6880880/ etc/ files/ README.txt shiphome/ stage/files/真正的二进制补丁文件.so,.jar,.sql按$ORACLE_HOME目录树相对路径组织如files/rdbms/lib/libserver19.aetc/config.txt声明该补丁适用的 Oracle 版本范围19.0.0.0.0、平台Linux-x86-64、组件RDBMS, JVMstage/OPatch 执行时临时存放解包内容的缓冲区严禁手动修改shiphome/仅用于 OUI 图形安装静默安装时忽略README.txt必须精读它明确列出「必须提前执行的 SQL 脚本」如catbundle.sql和「安装后强制重启步骤」逻辑说明OPatch 不是简单覆盖文件而是通过files/下的路径映射 etc/下的元数据约束构建出一个「补丁应用图谱」。opatch apply实际上是在$ORACLE_HOME中创建符号链接、备份原文件、注入新字节码并更新inventory数据库。因此files/的路径深度和文件名必须与目标$ORACLE_HOME严格匹配——这也是为什么补丁包名里必须带190000和Linux-x86-64。2.3 OPatch 版本强校验19c 环境下低于 12.2.0.1.27 的 OPatch 会静默失败Oracle 19c 对 OPatch 有硬性要求必须 ≥ 12.2.0.1.272022 年 10 月后 PSU 强制。旧版 OPatch 无法识别patchinfo.xml中的新字段导致opatch prereq通过但opatch apply后期崩溃。# 进入目标 ORACLE_HOME 的 OPatch 目录 cd $ORACLE_HOME/OPatch ./opatch version # 输出应为OPatch Version: 12.2.0.1.27 # 若版本过低必须先升级 OPatch注意升级 OPatch 本身也需要 OPatch # 正确做法下载最新 OPatchp6880880 对应的 OPatch 版本在 MOS Note 2741202.1 查 # 解压覆盖 $ORACLE_HOME/OPatch然后验证 ./opatch lsinventory -detail | grep OPatch version参数说明-detail参数会输出 OPatch 自身的补丁历史确认它是否已被其他补丁修改过。若显示OPatch version: 12.2.0.1.20且lsinventory中有Patch 32545013这是旧版 OPatch 的 bug 修复补丁说明当前 OPatch 已被污染必须彻底重装。3. 静默安装全流程从环境准备到 postinstall SQL 执行的 7 个原子步骤静默安装Silent Install是生产环境唯一可接受的方式。它规避了图形界面依赖、X11 转发失败、终端断连等玄学问题全程可脚本化、可审计、可回滚。3.1 环境变量与权限准备ORACLE_HOME、GRID_HOME、PATH 的黄金三角Oracle 补丁安装对环境变量极其敏感。以下设置必须在 root 用户下完成并确保所有子 shell 继承# 1. 明确目标 HOME切勿用软链OPatch 会校验真实路径 export ORACLE_HOME/u01/app/oracle/product/19c/dbhome_1 export GRID_HOME/u01/app/19c/grid # RAC 环境必须设单机可省略 export PATH$ORACLE_HOME/OPatch:$PATH # 2. 检查权限OPatch 必须由 $ORACLE_HOME 所有者运行通常是 oracle 用户 # 但静默安装需 root 权限写 inventory故用 sudo -u oracle 执行 sudo -u oracle id # 确认 oracle 用户存在且可登录 # 3. 关键禁用 SELinux 临时策略否则 opatch apply 会因 avc denied 失败 sudo setenforce 0 # 验证getenforce 应返回 Permissive逻辑说明ORACLE_HOME是 OPatch 查找inventory和files/映射的根GRID_HOME在 RAC 环境中用于同步 OCR/Voting Disk 补丁PATH优先级确保调用的是目标 HOME 下的 OPatch 而非系统 PATH 中的旧版。setenforce 0是血泪经验——SELinux 的allow oracle_execmem策略在补丁安装期间常被触发导致libserver19.so加载失败。3.2 OPatch 预检prereq3 类检查必须全部通过才能 proceed预检不是形式主义而是 Oracle 强制的「安全门禁」。任何一项失败都意味着安装必然中断# 进入解压后的补丁目录 cd 6880880 # 执行全量预检耗时约 2-5 分钟取决于 HOME 大小 $ORACLE_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -ph ./ \ -oh $ORACLE_HOME # 关键检查项解读 # - CheckSystemSpace验证 /tmp 至少有 2GBOPatch 解压临时文件 # - CheckActiveFilesAndExecutables确认无 oracle 进程正在使用 $ORACLE_HOME/bin/oracle # - CheckConflictAgainstOHWithDetail比对 inventory确认无冲突补丁如已打了更高版本 PSU参数说明-ph ./指定当前目录为补丁路径-oh $ORACLE_HOME明确目标 HOME。若输出中出现Prereq check failed不要强行加-force必须根据错误码查 MOS 文档如PREREQ_FAILED: 12345对应 Note 12345.1。3.3 静默应用补丁opatch apply 的 4 个核心参数与超时控制真正执行安装的命令必须精确控制行为避免交互式提示阻塞# 在补丁目录 6880880 下执行 $ORACLE_HOME/OPatch/opatch apply \ -silent \ # 强制静默禁止任何 stdin 读取 -ocmrf ocm.rsp \ # 指向 OCM 响应文件若未配置 OCM用空文件touch ocm.rsp -invPtrLoc $ORACLE_HOME/oraInst.loc \ # 明确 inventory 位置防多 HOME 冲突 -jre $ORACLE_HOME/jdk/jre \ # 指定 JDK 路径避免 OPatch 自动探测失败 opatch_apply.log 21 # 监控进度OPatch 不提供实时进度条但日志有关键节点 tail -f opatch_apply.log | grep -E (INFO|ERROR|Successfully|Rolling back)逻辑说明-silent是灵魂参数它让 OPatch 放弃所有Do you want to continue? [y|n]提示-ocmrf是 Oracle Cloud Manager 注册文件生产环境通常无需注册用空.rsp即可-invPtrLoc在多数据库共存环境如一台机器跑 12c19c中防止 OPatch 错选 inventory-jre指定 JDK 可避免java.lang.NoClassDefFoundError——这是 JDK 版本不匹配的典型症状。4. 避坑指南生产环境 5 大高频翻车现场与秒级定位法这些坑我都在某高校核心教务系统升级中踩过每次恢复都耗时 40 分钟以上。以下现象、原因、解决是经过 12 次真实回滚验证的结论。4.1 现象opatch apply 日志卡在Validating patches...超过 10 分钟CPU 占用 100%原因files/目录下存在损坏的.jar文件常见于网络下载中断OPatch 在校验 JAR MANIFEST 时陷入无限循环。解决立即kill -9当前进程进入6880880/files/目录用for i in *.jar; do unzip -t $i /dev/null 21 || echo BAD: $i; done找出损坏包重新下载整个 ZIP。4.2 现象opatch lsinventory显示补丁已安装但SELECT * FROM v$version仍为旧版本号原因补丁包含 SQL 部分如catbundle.sql但未手动执行。OPatch 只更新二进制不执行 DDL/DML。解决查阅6880880/README.txt找到Post-installation steps段落用sqlplus / as sysdba ?/rdbms/admin/catbundle.sql psu apply执行注意路径中的?会被自动替换为$ORACLE_HOME。4.3 现象RAC 环境下opatch apply在节点 1 成功节点 2 报ORA-00600: internal error code, arguments: [kgxgncv:deadlock]原因OCR 磁盘空间不足 512MB导致节点 2 在同步补丁元数据时死锁。解决ocrcheck查看剩余空间 →ocrconfig -showbackup确认备份位置 →ocrconfig -manualbackup强制备份 →ocrconfig -deletebackup old_backup清理旧备份。4.4 现象安装后监听器无法启动lsnrctl status报TNS-12541: TNS:no listener原因补丁更新了$ORACLE_HOME/network/lib/libnsl.so但系统glibc版本过低 2.17导致符号解析失败。解决ldd $ORACLE_HOME/bin/tnslsnr | grep not found定位缺失库 → 升级系统 glibcyum update glibc→ 重启监听器。4.5 现象opatch rollback失败报OPatch cannot find the patch to be rolled back原因补丁目录6880880被误删而 OPatch 回滚依赖原始files/目录下的rollback.xml。解决立即从备份恢复6880880/目录务必保留原始解压目录→ 若无备份只能重装整个$ORACLE_HOME这就是为什么第 2 章强调unzip -t校验。5. 补丁验证与回滚预案用 3 条 SQL 和 1 个脚本建立可信度闭环安装完成不等于生效。必须通过数据库内核、字典视图、性能基线三重验证同时准备好 60 秒内可触发的回滚通道。5.1 数据库级验证确认补丁已注入内核而非仅文件覆盖-- 1. 检查补丁在 data dictionary 中的记录最权威 SELECT action, namespace, version, id, comments FROM dba_registry_history WHERE action APPLY AND comments LIKE %6880880% ORDER BY action_time DESC; -- 2. 验证关键 Bug 是否已修复查 MOS Note 6880880 的 Known Issues SELECT bugno, value FROM v$system_fix_control WHERE bugno 35219876; -- 若返回一行且 value1表示已启用修复 -- 3. 性能基线对比执行同一 SQL对比 buffer gets -- 安装前SELECT /* MONITOR */ COUNT(*) FROM big_table; -- 安装后同 SQL查看 V$SQL_MONITOR 中 elapased_time 是否下降 15%逻辑说明dba_registry_history是 Oracle 记录所有补丁应用的唯一真相源比opatch lsinventory更可靠v$system_fix_control直接反映内核级修复开关状态性能基线验证避免「补丁安装成功但未生效」的假阳性。5.2 回滚脚本自动化把 7 分钟操作压缩成 1 个命令手动回滚涉及停库、opatch rollback、启库、执行catbundle.sql回退极易出错。以下脚本经某实验室 30 次测试#!/bin/bash # rollback_p6880880.sh export ORACLE_HOME/u01/app/oracle/product/19c/dbhome_1 export ORACLE_SIDorcl # 1. 停止所有实例RAC 用 srvctl单机用 sqlplus sqlplus / as sysdba EOF SHUTDOWN IMMEDIATE; EXIT; EOF # 2. 执行 OPatch 回滚指定原始补丁目录 $ORACLE_HOME/OPatch/opatch rollback -id 6880880 -oh $ORACLE_HOME /tmp/rollback.log 21 # 3. 启动并执行回退 SQL若 README.txt 中定义了 rollback_sql if [ -f /tmp/6880880/rollback_sql.sql ]; then sqlplus / as sysdba /tmp/6880880/rollback_sql.sql /tmp/rollback.log fi # 4. 验证回滚结果 echo 回滚完成执行$ORACLE_HOME/OPatch/opatch lsinventory | grep 6880880参数说明-id 6880880是 OPatch 识别补丁的唯一标识比路径更可靠rollback_sql.sql需提前从6880880/README.txt中提取并保存。此脚本必须在安装前就写好、测试过并放在/opt/scripts/下受版本控制。5.3 最后一道防线补丁安装前的黄金备份策略所有补丁操作前必须完成三项不可逆备份备份项命令保存位置验证方式ORACLE_HOME 完整副本tar -cf /backup/orahome_19c_pre_p6880880.tar -C $ORACLE_HOME ./backup/tar -tf /backup/orahome_19c_pre_p6880880.tar | head -20OCR 备份RACocrconfig -manualbackup默认/u01/app/19c/grid/cdata/ocrconfig -showbackup数据库一致性备份rman target / EOFbrBACKUP DATABASE PLUS ARCHIVELOG;brEOFFRA 或指定磁盘list backup of database;教训我在某跨平台系统升级中因跳过 OCR 备份导致节点 2 安装失败后 OCR 损坏重建集群耗时 3 小时。从此养成习惯opatch apply命令前必敲date; ocrconfig -manualbackup; date—— 两行命令换回 3 小时生命。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

Qt连接MySQL报错驱动未加载?一文讲透QMYSQL驱动编译部署

Qt连接MySQL报错驱动未加载?一文讲透QMYSQL驱动编译部署

很多人第一次遇到 Qt 连接 MySQL 的“驱动未加载”报错时,第一反应都是去翻代码:是不是连接参数写错了?是不是主机名不对?等到把QSqlDatabase相关的代码检查了三遍,才慢慢意识到问题可能根本不在业务代码里&#xff0c…

2026/10/13 7:53:16 阅读更多 →
AI证件照制作API对接实战:从选型到合规校验的完整指南

AI证件照制作API对接实战:从选型到合规校验的完整指南

1. 为什么我会盯上"证件照API生成"这条路 先交代一下背景。前阵子家里人急着办证件,需要一张白底小二寸照片,跑照相馆来回折腾不说,拍出来效果还不太满意。我那时候正好在做一个需要用户上传头像、自动生成合规证件照的小工具&…

2026/10/13 7:53:16 阅读更多 →
Karma渲染器Exit Code 139崩溃排查:从SIGSEGV到云渲染

Karma渲染器Exit Code 139崩溃排查:从SIGSEGV到云渲染

Houdini 的 Karma 渲染器一旦出现 Exit Code 139,做 CG 的人都懂那种头皮发麻的感觉。它不是那种会弹窗给你提示的渲染失败,而是场景加载完毕、Bucket 刚开始走动,或者渲染到第 3 帧,整个进程一声不吭就没了;Linux 终端…

2026/10/13 7:53:16 阅读更多 →

最新新闻

基于PaddleOCR与PyQt5的GUI车票识别系统设计与实现

基于PaddleOCR与PyQt5的GUI车票识别系统设计与实现

简介:这是一套基于GUI的OCR车票识别完整毕业设计项目,面向计算机视觉、机器学习方向的本科生及入门开发者,重点解决车票日期、车次、座位号等关键信息的自动提取与可视化操作问题。压缩包共82个文件,整体约4.01MB,包含…

2026/10/13 8:37:52 阅读更多 →
Prim算法详解:最小生成树的原理、实现与工程实践

Prim算法详解:最小生成树的原理、实现与工程实践

1. “Prime算法”到底在讲什么先把这个名字聊透。“Prime算法”在计算机与数据结构的语境下,最常被对应到两条线:一条是图论里求最小生成树的经典贪心算法——Prim算法,另一条则是素数(Prime Number)相关的数论算法&am…

2026/10/13 8:37:52 阅读更多 →
改限制不如改记录:AI内容安全审查记录实战解析

改限制不如改记录:AI内容安全审查记录实战解析

我先不跟你聊那些参数、榜单、跑分,最近这轮更新日志读下来,真正值得关心的变化往往藏在模型之外的“运行记录”里。不少团队把“每日AI观察”的焦点,从“这次又收紧了多少条限制规则”,转向了“审查记录到底长什么样”。我最近正…

2026/10/13 8:37:52 阅读更多 →
终端显示‘impeccable‘?揭秘CLI认证成功标识与误搜根源

终端显示‘impeccable‘?揭秘CLI认证成功标识与误搜根源

1. 项目概述:一个被误读的 CLI 工具命名现象最近在多个技术社区和开发者群聊里,频繁看到“impeccable”这个词被当作某个命令行工具的名称反复提及——它既不是 npm 官方包、也不是主流开源组织发布的 CLI,更没有对应的 GitHub 仓库或文档站。…

2026/10/13 8:37:52 阅读更多 →
UG/NX教程筛选与学习路径:从版本匹配到建模、加工实战

UG/NX教程筛选与学习路径:从版本匹配到建模、加工实战

简介:这是一份整理50套UG(Unigraphics NX)学习教程下载地址的PDF文档,面向使用UG进行产品设计、模具设计、逆向工程及数控加工的工程师和学员,旨在解决教程资源分散、难以系统查找的问题。文档收录了从UG NX4.0到NX7.5…

2026/10/13 8:37:52 阅读更多 →
视频目标跟踪标注工具VATIC非Docker安装全攻略

视频目标跟踪标注工具VATIC非Docker安装全攻略

如果你要做目标检测或者视频目标跟踪,第一步往往不是调模型,而是先把训练数据准备好。标注一个视频里每个目标每一帧的位置,听起来不复杂,真做起来又磨人又容易出错。VATIC 就是干这个的开源视频标注工具:打开浏览器&a…

2026/10/13 8:36:51 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 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/12 21:05:09 阅读更多 →
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/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练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/12 18:11:17 阅读更多 →