Ubuntu虚拟机常见问题排查与性能优化指南
1. 问题全景为什么你的Ubuntu虚拟机总在“闹脾气”如果你刚在VMware或VirtualBox里装好Ubuntu正摩拳擦掌准备大干一场结果虚拟机要么卡在开机界面要么桌面一片漆黑要么连最基本的apt update都报错那种感觉就像新车刚开出4S店就抛锚了。别急着怀疑人生这几乎是每个Linux新手和开发者的必经之路。虚拟机环境下的Ubuntu本质上是一个运行在“套娃”环境里的系统它既要依赖宿主机的硬件虚拟化支持又要管理好自身的虚拟硬件驱动和软件源配置任何一个环节的“水土不服”都会导致上述问题。今天我们就来把这些烦人的“小脾气”一个个拆解清楚让你不仅能快速修复更能理解背后的原因下次遇到类似问题可以自己当医生。从网络热词来看大家的问题高度集中在几个方面系统启动失败卡LOGO、黑屏、软件包管理瘫痪apt报错以及性能体验糟糕开机慢、运行卡。这三个问题看似独立实则环环相扣。启动失败可能是图形界面或内核模块的问题apt无法使用根源往往在于网络配置或软件源而开机缓慢则可能与虚拟硬件设置和后台服务有关。我们接下来就按这个逻辑从外到内、从现象到本质把解决方案和避坑指南一次性讲透。2. 开机黑屏或卡住从GRUB到桌面的层层排查当你满怀期待点击启动看到的却不是熟悉的登录界面而是一个闪烁的光标、一片漆黑或者Ubuntu的LOGO定格在那里时间仿佛停止了。这种情况最让人焦虑。别慌我们按顺序来。2.1 第一步进入恢复模式与检查日志绝大多数桌面启动问题都可以在系统启动的早期阶段介入解决。首先你需要中断正常的启动流程进入恢复模式。重启虚拟机并长按Shift键在虚拟机启动初期在VMware或VirtualBox的窗口获得焦点时立即长按键盘上的Shift键。这会调出GRUB引导菜单。如果没出现可能是启动速度太快你可以在虚拟机设置里在“电源”或“启动”选项中找到“在启动时显示引导菜单”并勾选强制显示GRUB。选择“Advanced options for Ubuntu”在GRUB菜单中用方向键选择这一项回车。选择带(recovery mode)的内核接下来你会看到多个内核版本选择其中一个后面标有(recovery mode)的选项回车进入。恢复模式提供了一个最小化的根环境并给出了一个菜单。这里有几个关键选项root直接以root权限进入命令行终端。这是最强大的操作入口。dpkg尝试修复破损的软件包。如果你是在安装某个软件或更新后无法启动优先尝试这个。grub更新GRUB引导加载程序。如果是因为内核更新后GRUB配置未更新导致的问题可以试试。network启用网络。这在后续需要下载修复包时有用。system-summary查看系统概要和日志有助于初步判断问题。首先我强烈建议选择root选项进入命令行。进去之后第一件事就是查看启动日志这是诊断的金矿。# 查看本次启动的日志从本次开机到现在的所有内核及系统日志 journalctl -b # 查看更详细的、与图形界面Display Manager相关的日志 journalctl -b | grep -i gdm\|lightdm\|sddm\|xorg\|wayland # 查看系统启动过程中的错误信息优先级为err及以上 journalctl -b -p err通过日志你可能会发现诸如“Failed to start GNOME Display Manager”、“nouveau驱动超时”、“磁盘空间不足”等明确错误。记下这些关键词。2.2 第二步图形界面服务与驱动问题修复如果日志指向显示管理器GDM、LightDM或显卡驱动可以尝试以下操作。常见场景一显卡驱动冲突尤其是NVIDIA在恢复模式的root终端下如果你之前安装过第三方驱动如NVIDIA驱动它可能与开源驱动nouveau冲突。# 1. 首先彻底禁用nouveau驱动这是一个临时措施用于排除问题 echo -e blacklist nouveau\noptions nouveau modeset0 | sudo tee -a /etc/modprobe.d/blacklist-nouveau.conf sudo update-initramfs -u # 2. 如果你安装了NVIDIA驱动但有问题可以尝试卸载它回到开源驱动 sudo apt purge *nvidia* sudo apt autoremove sudo apt install --reinstall xserver-xorg-video-nouveau # 3. 重新生成初始内存盘 sudo update-initramfs -u -k all常见场景二桌面环境或显示管理器损坏有时是GNOME Shell或显示管理器本身出了问题。# 重新安装显示管理器以GDM为例Ubuntu默认 sudo apt update sudo apt install --reinstall gdm3 ubuntu-desktop # 如果你用的是其他桌面如KDE Plasma # sudo apt install --reinstall sddm plasma-desktop # 重新配置显示管理器 sudo dpkg-reconfigure gdm3常见场景三用户目录下的配置文件损坏.Xauthority文件或GNOME配置损坏也可能导致登录后黑屏。# 在恢复模式的root终端下你需要挂载你的用户目录并操作 # 假设你的根分区已挂载在 / 用户目录在 /home/你的用户名 cd /home/你的用户名 # 重命名或删除可能出问题的配置文件重启后会生成新的 mv .Xauthority .Xauthority.bak mv .config/monitors.xml .config/monitors.xml.bak # 多显示器配置 # 谨慎操作如果怀疑是GNOME配置问题可以重命名整个.gconf或.config/dconf目录这是核选项 # mv .config/dconf .config/dconf.bak完成上述任何一组操作后执行reboot命令重启看是否能正常进入桌面。2.3 第三步虚拟机特定设置检查如果系统层面检查无误问题可能出在虚拟机配置上。显存分配进入虚拟机设置关闭状态下检查“显示”或“显卡”选项。确保为虚拟机分配了足够的显存例如对于1080p桌面至少分配128MB推荐256MB或以上。同时务必勾选“启用3D加速”。对于Ubuntu 22.04及以后的版本其GNOME桌面严重依赖3D加速关闭此选项几乎必然导致登录后黑屏或卡顿。图形控制器在VMware中尝试将图形控制器从“自动检测”改为“SVGA 3D”。在VirtualBox中确保图形控制器是“VBoxSVGA”或“VMSVGA”对于Linux Guest并启用3D加速。VBoxVGA驱动较老对新版Ubuntu支持不佳。UEFI/BIOS固件尝试切换虚拟机的固件类型。例如在VMware中将“固件类型”从UEFI改为BIOS或反之。有时GRUB在某种固件下会有兼容性问题。注意修改虚拟机硬件设置尤其是固件类型前最好先为虚拟机创建一个快照。从BIOS切换到UEFI可能导致系统无法启动需要修复引导。3. apt命令失灵网络、源与锁文件的终极修复能开机进入命令行或恢复模式但sudo apt update却报出一堆Could not resolve ‘archive.ubuntu.com‘或Failed to fetch的错误甚至提示Could not get lock /var/lib/dpkg/lock-frontend这意味著你的软件包管理系统“断粮”了。修复apt是让系统恢复健康的基础。3.1 网络连通性诊断虚拟机与宿主机的桥梁首先确认最基本的网络是否通畅。在虚拟机终端执行# 1. 检查是否获取到了IP地址 ip addr show # 或使用老命令 ifconfig # 2. 测试与网关和外部网络的连通性 ping -c 4 8.8.8.8 # 测试是否能访问外网IP ping -c 4 archive.ubuntu.com # 测试是否能解析并访问软件源域名如果ping 8.8.8.8不通问题在虚拟机网络配置或宿主机网络。检查虚拟机网络连接模式在虚拟机设置中最常见的是“NAT模式”虚拟机共享宿主机IP上网和“桥接模式”虚拟机会获得一个与宿主机同网段的独立IP。对于大多数上网需求NAT模式最简单可靠。确保你没有设置为“仅主机模式”或“网络断开”。重启虚拟机网络服务sudo systemctl restart systemd-networkd或sudo netplan apply取决于你的网络管理工具。检查宿主机防火墙偶尔宿主机防火墙如Windows Defender防火墙会阻止虚拟机的虚拟网卡通信可以尝试暂时禁用宿主机防火墙测试。如果ping 8.8.8.8通但ping archive.ubuntu.com不通问题在DNS解析。# 检查DNS服务器配置 cat /etc/resolv.conf # 应该能看到 nameserver 设置例如 8.8.8.8 或 192.168.x.x # 如果没有或不对可以临时修改重启网络后可能失效 echo nameserver 8.8.8.8 | sudo tee /etc/resolv.conf echo nameserver 8.8.4.4 | sudo tee -a /etc/resolv.conf # 永久修改DNS需要编辑Netplan或NetworkManager配置以Netplan为例 sudo nano /etc/netplan/*.yaml # 在对应网络接口下添加 nameservers: addresses: [8.8.8.8, 8.8.4.4] # 保存后应用sudo netplan apply3.2 软件源配置替换与更新网络通了之后就是软件源的问题。虚拟机安装时默认的源可能因为地域网络问题访问缓慢或不可用。备份并编辑源列表sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup sudo nano /etc/apt/sources.list替换为国内镜像源这是解决apt慢或失败的最有效方法。将文件内所有http://archive.ubuntu.com和http://security.ubuntu.com的网址替换为国内镜像站地址例如阿里云、清华、中科大源。阿里云镜像将archive.ubuntu.com替换为mirrors.aliyun.com清华镜像将archive.ubuntu.com替换为mirrors.tuna.tsinghua.edu.cn中科大镜像将archive.ubuntu.com替换为mirrors.ustc.edu.cn例如替换后的一行看起来像这样deb http://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse提示你可以直接搜索“Ubuntu 版本号 镜像源”复制完整的sources.list内容替换整个文件但要注意版本代号如22.04是jammy必须匹配。更新软件包列表sudo apt update如果还有少量错误可能是某些PPA源或特定源无法访问可以暂时注释掉在行首加#/etc/apt/sources.list.d/目录下非必要的源文件。3.3 锁文件与进程冲突清理战场当你看到Could not get lock /var/lib/dpkg/lock-frontend这样的错误时说明有另一个apt或dpkg进程正在运行可能是上次更新意外中断导致的僵尸进程。# 1. 查找并杀死占用锁的进程 sudo lsof /var/lib/dpkg/lock-frontend sudo lsof /var/lib/dpkg/lock # 找到进程ID (PID) 后使用 kill -9 PID 强制结束 # 2. 如果找不到进程直接删除锁文件这是最后的手段 sudo rm /var/lib/dpkg/lock-frontend sudo rm /var/lib/dpkg/lock sudo rm /var/cache/apt/archives/lock # 3. 重新配置dpkg并修复可能的损坏 sudo dpkg --configure -a sudo apt install -f # 修复依赖关系完成这些步骤后再运行sudo apt update sudo apt upgrade应该就能看到顺畅的下载进程了。4. 虚拟机开机与运行缓慢性能调优实战解决了“不能用”的问题我们再来解决“不好用”的问题。虚拟机开机慢如牛车桌面反应迟钝这极大影响开发效率。优化主要从虚拟硬件分配和系统内部设置两方面入手。4.1 虚拟硬件配置给足“粮草”关闭虚拟机在虚拟机管理软件中进行如下设置处理器CPU核心数不要吝啬。如果你的宿主机是4核8线程给虚拟机分配2个核心或2个处理器每个1核是合理的起点。对于开发编译等任务可以给到宿主机逻辑核心数的一半。虚拟化引擎VMware中务必勾选“虚拟化Intel VT-x/EPT或AMD-V/RVI”。这是硬件辅助虚拟化能大幅提升CPU虚拟化效率。同时可以勾选“虚拟化CPU性能计数器”和“虚拟化IOMMU”。内存这是影响性能最明显的因素之一。Ubuntu桌面版至少分配4GB4096MB8GB或以上体验会流畅很多。确保不要超过宿主机可用内存的70%并避免使用“动态内存”或“气球驱动”除非你很清楚其影响固定分配能获得更稳定的性能。硬盘控制器类型优先选择NVMe或SCSI控制器而不是IDE。SCSI性能远优于IDE。磁盘类型选择“拆分虚拟磁盘为多个文件”便于迁移但对性能无影响。关键是预分配磁盘空间选择“立即分配所有磁盘空间”或“固定大小”这能避免磁盘动态增长带来的碎片和性能开销但会一次性占用宿主机大量空间。固态硬盘直通如果宿主机是SSD确保虚拟磁盘文件.vmdk或.vdi存放在SSD分区上这是提升IO性能最简单有效的方法。显卡如前所述分配足够显存256MB并开启3D加速。4.2 系统内部优化关闭“无用功”进入Ubuntu系统后进行以下系统级优化禁用不必要的启动服务很多服务并不需要在虚拟机中运行。# 使用systemd-analyze分析启动耗时 systemd-analyze blame # 查看哪些服务拖慢了启动例如 snapd相关的服务、蓝牙、打印服务在虚拟机中可能不需要 sudo systemctl disable snapd.service snapd.seeded.service # 如果你不用Snap包 sudo systemctl disable bluetooth.service sudo systemctl disable cups.service cups-browsed.service # 打印机服务 # 禁用后下次启动就不会加载它们了调整Swappiness值这个值0-100表示系统有多“积极”地使用交换分区swap。在内存充足的虚拟机中频繁使用swap反而会拖慢速度因为磁盘IO慢。# 查看当前值 cat /proc/sys/vm/swappiness # 通常默认是60。对于有足够内存的虚拟机可以降低到10或更低 sudo nano /etc/sysctl.conf # 在文件末尾添加一行 vm.swappiness10 # 保存退出并立即生效 sudo sysctl -p使用更轻量的显示管理器可选如果你不需要完整的GNOME动画效果可以尝试安装lightdm替代gdm3它更轻量。sudo apt install lightdm sudo dpkg-reconfigure lightdm # 选择lightdm作为默认显示管理器安装VMware Tools或VirtualBox Guest Additions这绝对是性能提升的关键一步这些增强工具提供了专用的显卡驱动、鼠标集成、共享文件夹、时间同步和优化的内存管理。VMware在VMware菜单中点击“虚拟机” - “安装VMware Tools”然后在Ubuntu内挂载并安装ISO中的工具。VirtualBox在设备菜单中选择“安装增强功能”然后在Ubuntu内挂载并运行VBoxLinuxAdditions.run。 安装后重启你会感受到鼠标移动更跟手、显示分辨率自适应、文件拖放和剪贴板共享都变得可用整体性能也有提升。5. 防患于未然建立稳定的虚拟机使用习惯解决了眼前的问题我们更应该建立好的习惯避免问题反复发生。快照是你的“时光机”在进行任何重大系统更改如升级内核、安装新驱动、添加重要PPA之前务必为虚拟机创建一个快照。一旦操作失败你可以瞬间回滚到健康状态这是虚拟机最大的优势之一。定期更新但谨慎升级定期运行sudo apt update sudo apt upgrade保持系统安全和小幅更新。但对于跨大版本的系统升级如20.04升22.04建议在升级前创建完整克隆或备份因为升级过程在虚拟环境中可能遇到更多意外。分离个人数据与系统利用虚拟机的“共享文件夹”功能将你的项目代码、文档等重要数据存放在宿主机的一个目录中然后在虚拟机内挂载使用。这样即使虚拟机系统完全崩溃你的核心数据也是安全的。选择合适的发行版变体如果你对桌面特效要求不高纯粹用于开发或学习可以考虑安装Ubuntu Server版然后根据需要安装轻量级桌面如XFCE或LXQt。或者直接使用对资源更友好的发行版如XubuntuXFCE桌面或LubuntuLXQt桌面它们在虚拟机中运行起来会更加轻快。虚拟机里的Ubuntu就像一个新家刚开始需要一番布置和调试水管网络、电路驱动、装修桌面都可能出点小问题。但一旦把这些关键点理顺了它就能成为一个极其稳定、高效的开发或学习环境。记住遇到问题先看日志从网络和源这些基础服务查起然后调整虚拟机配置最后优化系统内部。这套组合拳下来绝大多数“常见病”都能药到病除。

相关新闻

Agent规划模式实战:解放重复if‑else式开发

Agent规划模式实战:解放重复if‑else式开发

文章目录 前言一、规划模式到底是个啥?二、一个真实的案例:墨镜客服Agent三、它到底是怎么干活的?四、这玩意好在哪?五、但凡事都有个"但是"六、工具设计:少即是多,但太少就是灾难七、未来已来&a…

2026/10/13 4:53:38 阅读更多 →
微信小程序数据可视化终极指南:3分钟掌握ECharts图表开发

微信小程序数据可视化终极指南:3分钟掌握ECharts图表开发

微信小程序数据可视化终极指南:3分钟掌握ECharts图表开发 【免费下载链接】echarts-for-weixin 基于 Apache ECharts 的微信小程序图表库 项目地址: https://gitcode.com/gh_mirrors/ec/echarts-for-weixin 还在为微信小程序中的数据展示而烦恼吗&#xff1f…

2026/10/13 14:18:53 阅读更多 →
嵌入式开发中的定点数运算:Q格式解析与加法实战指南

嵌入式开发中的定点数运算:Q格式解析与加法实战指南

1. 项目概述:从浮点到定点的思维转换在嵌入式开发、数字信号处理(DSP)或者一些对计算效率要求极高的场景里,我们常常会听到“定点数”这个词。你可能已经习惯了在PC上用float或double进行各种数学运算,觉得这理所当然。…

2026/10/14 10:19:03 阅读更多 →

最新新闻

rsync远程文件同步实战:增量算法、参数避坑与自动化备份方案

rsync远程文件同步实战:增量算法、参数避坑与自动化备份方案

rsync远程文件同步这事儿,我是被逼着认真研究的。之前负责一个模拟项目X的数据分发,每天要把一批几百GB的日志从生产目录同步到另一台备份服务器。一开始图省事用scp全量拷贝,结果磁盘I/O和带宽吃紧,同步窗口越拉越长,…

2026/10/14 21:41:36 阅读更多 →
GitHub私有仓库协作保姆级教程:从邀请协作者到权限配置与故障排查

GitHub私有仓库协作保姆级教程:从邀请协作者到权限配置与故障排查

先说结论:直接把私有仓库的地址发给对方,并不会让“配合一起开发”自动发生。很多人第一次操作是在仓库页面上复制了一个https://github.com/你的用户名/仓库名.git发给同事,结果对方点开是个404,或者 clone 之后 push 被拒绝。这…

2026/10/14 21:41:36 阅读更多 →
FusionCompute 8.0.0 部署实战:从解压到纳管的避坑指南

FusionCompute 8.0.0 部署实战:从解压到纳管的避坑指南

简介:FusionCompute_Installer-8.0.0.zip 面向企业级虚拟化平台的学习者与运维人员,提供华为 FusionCompute 8.0.0 的完整安装与部署组件,帮助读者搭建资源池化、自动化运维的云计算基础设施环境。压缩包共 327 个文件,约 270.58M…

2026/10/14 21:41:36 阅读更多 →
SYNBO CLUB预上线解读:KOL冷启动的底层逻辑与运营策略

SYNBO CLUB预上线解读:KOL冷启动的底层逻辑与运营策略

SYNBO CLUB 的预上线消息一出,我所在的运营圈子里已经有人在讨论:全球 KOL 抢滩入驻,这阵仗比很多产品正式上线还热闹。我做了多年用户增长和社区冷启动,看到这类标题第一反应其实是警惕——预上线阶段终于被越来越多人重视是好事…

2026/10/14 21:41:36 阅读更多 →
Paged.js 实战:浏览器端生成印刷级 PDF 的分页控制与避坑指南

Paged.js 实战:浏览器端生成印刷级 PDF 的分页控制与避坑指南

简介:这是一份面向前端开发者的 paged.js 系统教程资源,聚焦如何用 JavaScript 将 HTML 内容转换为带优雅分页效果的 PDF 文档,适合需要在浏览器端生成高质量打印或导出文档的开发者学习。压缩包共 32401 个文件,约 40.16MB&#…

2026/10/14 21:41:36 阅读更多 →
深入解析 docker-ce 中 google.golang.org/genproto:Go 生成的 Protobuf 与 gRPC API 包

深入解析 docker-ce 中 google.golang.org/genproto:Go 生成的 Protobuf 与 gRPC API 包

容器运行时云原生 【免费下载链接】docker-ce :warning: This repository is deprecated and will be archived (Docker CE itself is NOT deprecated) see the https://github.com/docker/docker-ce/blob/master/README.md :warning: 项目地址: https://gitcode.co…

2026/10/14 21:40:34 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 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/13 22:01:27 阅读更多 →
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/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练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/14 7:53:34 阅读更多 →