Linux网络管理实战:从底层原理到故障排查
接手一台新Linux服务器第一件事就是配网络。我见过太多人卡在这一步网卡明明起来了ping网关却时通时断DNS配了两处解析还是失败双线机房的路由莫名其妙走错业务流量全从一条链路出去另一条空转。这些问题本质上都是没有把Linux系统网络管理当成一套体系来理解。这篇文章想把底层原理、配置方法、常用命令、排查套路串成一条线一次聊透。适合刚入门Linux运维的年轻人也适合平时能用ifconfig、但遇到复杂问题就挠头的开发者看完你至少能自己搞定90%的日常网络管理需求。1. Linux网络管理的核心概念与底层逻辑1.1 从网卡到协议栈Linux网络栈的基本工作方式Linux网络管理表面上是在敲命令、改配置文件实际上是在和内核网络栈打交道。数据包的收发路径是网卡收到信号通过中断告诉内核内核把数据包从网卡驱动缓冲区拷贝到协议栈经过链路层、网络层、传输层的处理最后交给应用程序发送方向反过来。这个过程中每一层都有对应的工具和参数可以控制只是很多人只碰过最上层的几个命令。理解网络栈的关键在于“数据包怎么走”。我在排查问题时经常画一条虚拟的路径数据包进入网卡 → 经过qdisc排队规则 → 交给IP层做路由选择 → 查询路由表决定从哪个接口出去 → 如果是本机则交给上层协议 → 最终到socket队列。任何一个环节出了问题表象都是“不通”但排查的着眼点完全不一样。如果你对所有ping不通的网络问题都用同一套“重启网卡”的办法那基本很难成为资深运维。内核里还有一个非常重要的概念叫“网络命名空间”。容器技术全面流行之后命名空间成了Linux网络管理的必修课。每个命名空间拥有独立的网卡、路由表、防火墙规则和socket这让容器可以不干扰主机网络地运行。很多人在宿主机上明明能看到docker0网桥但容器里的eth0却不在宿主机ifconfig输出里就是因为容器处于独立命名空间。理解这一层以后排查容器网络问题会省很多力气。1.2 网络配置的持久化到底配置在了哪里大多数Linux发行版把网络配置放在不同位置这是新手最容易懵的地方。Debian/Ubuntu的传统方式是把配置写在/etc/network/interfacesCentOS/RHEL 7及之后版本则是一张网卡一个配置文件放在/etc/sysconfig/network-scripts/ifcfg-eth0而用了NetworkManager的桌面版会把配置集中在/etc/NetworkManager/system-connections/下。同一台机器可能同时存在多个配置源如果它们不一致就会出现“重启后配置丢失”或者“配置被覆盖”的怪像。我在给客户做系统初始化时第一件事就是确认这台机器用什么网络管理服务。运行systemctl status NetworkManager看它是否激活如果激活了手动改/etc/sysconfig/network-scripts/下的文件后还必须执行nmcli connection reload或者用nmcli connection modify来修改否则NetworkManager可能用自己的内部配置覆盖掉你的手工设置。这里有个实用技巧在最小化安装的服务器上我通常直接禁掉NetworkManager改用systemd-networkd或者纯静态配置文件管理这样行为更可预测出了问题也容易排查。1.3 为什么不能只靠ifconfig和route认识iproute2老牌命令ifconfig和route在Linux上已经半退休了它们默认不显示网卡的子接口、不显示策略路由只支持IPv4而且输出的信息在某些场景下根本不反映真实状态。而ip命令来自iproute2套件是当前内核网络管理的标准接口。ip addr替代ifconfigip route替代routeip link管理网卡状态ip netns管理命名空间ss替代netstat查看socket。这套命令直接和内核netlink接口通信看到的才是内核里的真实状态。我见过一个真实事故某运维用ifconfig改了IP地址看起来生效了但业务始终调用不上。最后发现ifconfig设置的是临时地址内核真正走流量的地址走的是另一条路径。换用ip addr add和ip route add之后问题立刻清楚。所以我的建议很直接新环境一律使用iproute2命令写文档、写脚本老命令只用来在人家的老机器上应急。这不是站队是内核网络管理的事实标准已经变了。2. 日常网络管理必备工具箱2.1 最常用的查看与排查命令日常维护中我高频使用的命令就那几个但每个都有自己的使用场景。ip -br addr一句话输出所有网卡的IP和状态适合快速扫一眼ip -s link查看每个接口的收发数据量、错误包、丢包是判断网线或对端设备问题的第一手资料ss -tunlp列出所有监听端口和对应进程排查端口冲突、端口没监听时非常好用ping和traceroute或者mtr负责连通性和路径探测。这些命令的输出很多人看过就忘我建议用一个朴素的“分层排查法”去读它们。先看链路层ip link里网卡是不是UP有没有carrier信号RX/TX有没有大量error。再看网络层ip addr里IP是否正确掩码网关是否匹配然后ip route看默认路由是否存在。接着看传输层ss -tuln看端口有没有监听防火墙有没有拦截。最后看应用层用curl或者telnet测试实际业务端口。这样从上到下每一步都能定位问题所在层而不是瞎猜。2.2 配置IP地址、路由、DNS的五种典型方式配置网络有五种常见路径临时命令、传统配置文件、NetworkManager管理、systemd-networkd、以及DHCP。临时命令适合调试重启即失效传统配置文件在不用NetworkManager的机器上最可靠NetworkManager用nmcli命令可以同时管理DPU、虚拟网卡和动态配置适合桌面和图形化环境systemd-networkd是轻量级选择配置简洁性能好DHCP用于自动获取IP但生产服务器一般建议手工指定静态IP避免IP变化导致服务不可用。我推荐一个稳妥的组合服务器上用传统配置文件或systemd-networkd配静态IP笔记本等经常切换网络的机器交给NetworkManager临时测试时用ip命令直接改测完立即恢复。具体到静态IP配置Debian/Ubuntu在/etc/network/interfaces里写auto eth0加iface eth0 inet staticCentOS在ifcfg-eth0里写BOOTPROTOnone、ONBOOTyes、IPADDR、NETMASK、GATEWAY。systemd-networkd则放在/etc/systemd/network/10-eth0.network里内容类似[Match] Nameeth0 [Network] Address192.168.1.10/24 Gateway192.168.1.1 DNS8.8.8.8配置完成后systemctl restart systemd-networkd再用networkctl status eth0检查。很多人忘了写[Match]段导致配置不生效这是最常见的新手坑。2.3 网卡绑定、桥接与vLAN的实战说明单网卡容易成为瓶颈和单点故障生产环境用到网卡绑定bonding、桥接bridge和VLAN子接口。Linux bonding支持7种模式最常用的是mode4802.3ad需要交换机支持LACP和mode1active-backup。配置双网卡绑定后一块网卡出故障时另一块无缝接管链路利用率也能提高。ip link add bond0 type bond mode 802.3ad可以创建绑定组再把物理网卡加入bond0。桥接最典型的使用场景是虚拟机或者容器。ip link add br0 type bridge创建网桥然后把物理网卡和虚拟网卡都接入br0虚拟机就像直接插在同一台交换机上一样。VLAN则配合ip link add link eth0 name eth0.100 type vlan id 100来配置一个物理网卡按标签分成多个逻辑网络适合多租户场景。这些高级配置建议用脚本保存因为重启后如果配置源没有被正确读取桥接和绑定组会丢这是我在生产环境里踩过最痛的坑——一次机房断电所有双网卡绑定变成单卡物理接口业务全断原因就是配置没写进持久化文件。3. 典型场景实操从零配置一台服务器的网络3.1 全新安装最小化系统后的网络初始化装完CentOS或Ubuntu Server后第一件事往往就是配IP。最小化系统没有图形界面你可能连编辑器的习惯都不一样了。我习惯先确认网卡名运行ip link看看是eth0还是ens33物理服务器的网卡名可能是eno1、enp3s0等花样这取决于udev规则和PCI槽位。确定网卡名后先临时加上IP做连通性验证ip addr add 192.168.1.10/24 dev eth0 ip link set eth0 up ip route add default via 192.168.1.1这一步能立刻证明网卡、线缆、交换机端口是否正常。如果能ping通说明物理链路没问题接下来才写持久化配置。很多新手通电后直接改配置文件结果连不上机器也不知道是配置语法错了还是网络根本没通所以我坚持“先临时后持久化”的顺序这个习惯在远程服务器上特别重要因为一旦配置错误你就会把自己锁在外面。3.2 配置静态IP与多网卡策略路由单网卡配静态IP很简单双网卡才是真正的考验。默认情况下Linux只有一张默认路由表两个网卡如果都配了网关ip route只会保留一条默认路由另一个网关不会生效。比如服务器有电信和联通两条链路想要让内网访问从电信走公众访问从联通走就必须用策略路由。策略路由的核心是“源地址路由”或“目标地址路由”需要操作多个路由表。一个常见做法是给每张网卡建独立路由表例如ip rule add from 192.168.2.10 table 100 ip route add default via 192.168.2.1 dev eth1 table 100 ip rule add from 192.168.1.10 table 200 ip route add default via 192.168.1.1 dev eth0 table 200ip rule判断数据包来源选择对应路由表。这类似现实生活中在路口看车牌决定走哪个闸口。持久化需要在配置文件里增加路由表定义例如CentOS中在/etc/iproute2/rt_tables里添加编号和名字再配合/etc/sysconfig/network-scripts/rule-eth0文件。策略路由如果配错最常见的现象是回包路径不对称ping时通时断用ip route get 8.8.8.8可以查看某个目标地址实际会走哪条路由这是排查不对称路由的利器。3.3 防火墙规则与网络管理的关系Linux网络管理绕不开防火墙因为很多“网络不通”其实是防火墙drop导致的。Netfilter是内核的防火墙框架iptables和nftables是对它的用户态工具。在CentOS 7以后firewalld是默认管理工具底层其实是nftables在Ubuntu上则是ufw封装了iptables。我建议至少掌握iptables和nftables的基本语法因为很多老服务器都是直接写iptables规则的。排查防火墙最直接的方法是用iptables -L -n -v或者nft list ruleset查看规则看有没有drop或REJECT规则。如果怀疑防火墙拦截可以临时设置一条放行所有规则的规则比如iptables -P INPUT ACCEPT进行验证确认是防火墙问题再精细化规则。需要注意千万不要在生产环境随意清空规则集除非你确定能远程恢复否则很可能把自己踢出服务器。我有一次只加规则没保存重启后规则丢了服务却因为默认策略变了而停止响应教训惨痛。所以改防火墙之前一定先备份规则文件改完立刻用iptables-save /etc/sysconfig/iptables持久化。4. 生产环境网络故障排查实录4.1 故障案例服务器ping不通但网卡显示UP一次客户报障内网一台应用服务器从监控平台看不到数据但服务器上ip link显示网卡是UP的。我远程登录上去第一步ip addr发现IP地址还在但ping 网关不通。初步判断是链路层的ARP问题于是抓包查看。抓包结果发现服务器不断发出ARP请求但没有设备响应而网关地址配置和交换机的实际地址有冲突。原来这台服务器是VMware虚拟机迁移后虚拟交换机的端口配置变了导致网段变了却没有同步修改IP。这种问题很难从服务器端单方面定位我建议用arping探测网关IP对应的MAC地址如果长时间看不到回复就要去检查交换机端口和虚拟网络配置。检查链路层的一个常用技巧是看ip -s link里的RX errors如果错误包持续增长说明网卡对接层面有问题。很多网卡显示UP只是代表驱动加载和链路协商成功不代表二层通信正常。4.2 故障案例DNS解析时灵时不灵DNS问题最让人头疼因为时好时坏。排查时先看/etc/resolv.conf里面写了哪些DNS服务器。很多桌面版本这个文件被NetworkManager接管你手动改了很快会被覆盖。我遇到过一个案例服务器上配置了10.0.0.2和8.8.8.8两个DNS偶尔解析慢甚至解析失败。用dig测试发现请求经常被发到内网DNS而内网DNS的上游解析不稳定。后来把内网DNS设为唯一服务器配置了options timeout:2 attempts:2问题立刻消失。DNS问题排查离不开dig和nslookup。dig trace可以看到递归查询的完整路径dig 8.8.8.8 example.com指定特定DNS服务器测试cat /etc/resolv.conf看配置。还有一个隐藏点/etc/nsswitch.conf里hosts: files dns的顺序也会影响解析如果files在前面且/etc/hosts里有过期条目就可能出现解析结果异常。在容器环境里/etc/resolv.conf还可能被Docker动态修改造成应用容器内解析不稳定排查时一定要把视角拉开。4.3 故障案例双网卡导致路由错乱一次业务系统访问数据库时快时慢数据库和应用部署在同一台物理机的两个不同命名空间里应用服务器通过一个内网地址访问数据库。我检查了应用服务器的路由表发现两条默认路由同时存在其中一条指向外部网关另一条指向内网。当去往数据库的流量命中错误路由后数据包会从错误的网关送出然后被丢弃或者绕行导致时延飘忽不定。清除多余默认路由只保留内网那条默认路由刷新ARP缓存应用立刻恢复。这个案例背后是典型的“默认路由冲突”。解决思路很明确同一台机器如果有多个网卡要访问多个网段要么用策略路由要么把非默认网段的静态路由写进表里但永远不要保留两条默认路由。日常巡检时我习惯用ip route检查默认路由数量超过一条就要警惕。4.4 故障排查速查表我把常见故障现象、可能原因、对应的排查命令整理成一张表格粘贴到自己的运维手册里也送给带过的实习生故障现象可能原因首选排查命令完全ping不通网卡未插线/未启用/IP配置错ip link、ip addr、pingping通但TCP端口不通防火墙拦截iptables -L -n -v、ss -tlnpDNS解析失败resolv.conf错/DNS上游异常dig 8.8.8.8、cat /etc/resolv.conf时通时断/丢包链路故障/双工协商/路由不对称mtr、ip -s link、ip route get网卡UP但无流量驱动问题/交换机关联错误ethtool eth0、ip -s link重启后配置丢失配置未持久化/被NetworkManager覆盖nmcli connection show、ip addr这张表不能替代经验但能帮你在慌乱时理出头绪。我的经验是网络故障排查一定要带着“分层”的思维去执行每次只查一层不要同时怀疑所有东西。5. 我踩过的坑与长期运维建议5.1 配置文件版本管理是救命稻草网络配置文件是服务器的命脉可惜很多人改完就忘。建议把所有网络相关的文件纳入版本管理/etc/network/interfaces、/etc/sysconfig/network-scripts/、/etc/systemd/network/、/etc/resolv.conf、/etc/hosts、/etc/nsswitch.conf还有你的防火墙规则文件。我自己用一套简单的git仓库来管理这些文件每次变更都提交日志出问题可以用git diff看到底改了什么回滚也就一条命令。别等线上炸了才想起这回事。5.2 小心NetworkManager与systemd-networkd的冲突一台机器上同时启用NetworkManager和systemd-networkd是典型事故源。虽然systemd-networkd和NetworkManager可以共存但如果两者都尝试管理同一个网卡配置会产生竞争。我在Ubuntu 20.04上遇到过手动改完/etc/netplan之后没有apply重启后NetworkManager接管了网卡静态IP全部失效。后来我的原则是一个系统只选一套网络管理方案。如果业务场景简单就用systemd-networkd如果桌面或者需要频繁切换网络就全部交给NetworkManager并且用nmcli来配绝不混用手工文件。5.3 工具选型建议传统命令与新命令的取舍虽然我一直强调用iproute2但也不能全盘否定传统命令。在没有ip命令的精简容器镜像里ifconfig可能也不存在但busybox里可能只有ifconfig。所以能同时掌握两套命令才能在极端环境里游刃有余。我的建议是日常管理和脚本编写用ip、ss应急救火时老命令也要能看懂。另外ping、traceroute、telnet、nc这些诊断工具最小化系统不一定默认安装建议装系统时就把iputils-ping、traceroute、netcat-openbsd、tcpdump、mtr都装好免得排查时才发现工具缺失。最后再分享一个小技巧给服务器做网络管理的任何变更前先用screen或tmux开一个会话在里面操作并预留一个“后门”登录窗口确保万一配置错误也不至于永久断连。生产环境里一个能帮你恢复网络的后台会话比什么命令都值钱。我自己把“永远保留一个可用后门”写进了运维铁律希望你也把它变成自己的习惯。

相关新闻

遥感图像语义分割实战:UNet模型从数据到改进的完整指南

遥感图像语义分割实战:UNet模型从数据到改进的完整指南

简介:这份毕业设计资源包围绕UNet神经网络在遥感图像语义分割中的应用展开,面向计算机视觉方向的高校学生与深度学习入门者,帮助其完成从模型搭建、训练到论文撰写的完整课题。包内共69个文件,以png图像、py源码、pyc缓存、tex论文…

2026/10/10 9:56:23 阅读更多 →
REA业务建模是什么?资源-事件-代理模型让你摆脱ER图困境

REA业务建模是什么?资源-事件-代理模型让你摆脱ER图困境

做业务系统建模这么久,有个词一直在我的书签里躺了很多年——rea。如果你是在 ER 图里挣扎到怀疑人生的开发者,或者被一堆“订单、库存、账户”之间永无止境的关联搞得头大的分析师,我强烈建议你花几分钟了解一下它。这不是什么新奇的前端框架…

2026/10/10 9:56:23 阅读更多 →
用文本DSL生成SVG架构图:设计一个轻量级图表引擎的实践

用文本DSL生成SVG架构图:设计一个轻量级图表引擎的实践

写开发文档、做方案汇报、梳理系统架构时,最折磨人的往往不是内容本身,而是“怎么把关系画清楚”。我去年试着做了一个轻量级的图表设计工具,核心思路是把“画图”这件事变成“写一段结构化文本”,再用程序自动生成对应的 SVG 图表…

2026/10/10 9:56:23 阅读更多 →

最新新闻

AD25零报错安装五步法:新手绕过系统依赖墙的实操指南

AD25零报错安装五步法:新手绕过系统依赖墙的实操指南

1. 为什么“零报错安装”在AD25上成了新手最焦虑的坎?Altium Designer 25(简称AD25)发布后,我陆续收到二十多条来自某高校电子工程实训课学员、某创客空间初学者、以及自学硬件设计的转行开发者的私信,问题高度一致&am…

2026/10/10 13:46:50 阅读更多 →
CleanCode AI编程标准代码生成器:从源头实现生成即规范

CleanCode AI编程标准代码生成器:从源头实现生成即规范

1. 为什么“生成即规范”是个值得死磕的方向写代码这件事,最怕的不是功能实现不了,而是实现完了之后没人敢动。我见过太多项目,第一版跑得挺欢,三个月后加个字段要在五个文件里改八处,改完还不敢上线。这种局面不是某一…

2026/10/10 13:46:50 阅读更多 →
开源轻量模型三线并进:安全、机器人、决策,2026 下半年的落地清单里藏着 GLiNER2.5-Decide

开源轻量模型三线并进:安全、机器人、决策,2026 下半年的落地清单里藏着 GLiNER2.5-Decide

开源轻量模型三线并进:安全、机器人、决策,2026 下半年的落地清单里藏着 GLiNER2.5-Decide 【免费下载链接】GLiNER2.5-Decide 项目地址: https://ai.gitcode.com/hf_mirrors/fastino/GLiNER2.5-Decide 2026 年 9 月的最后一个发布周&#xff0c…

2026/10/10 13:46:50 阅读更多 →
SpringBoot+微信小程序:网络安全科普系统论文转工程实战解析

SpringBoot+微信小程序:网络安全科普系统论文转工程实战解析

简介:面向微信小程序网络安全科普系统的开发需求,这份docx设计文档适用于毕业设计、课程作业或实际科普平台建设的学习者与开发者。系统采用Java语言、MySQL数据库、微信小程序及SpringBoot框架,构建了包含科普知识查阅、案例分析、在线评价交…

2026/10/10 13:46:50 阅读更多 →
Spring Boot核心配置解析:绑定、多环境与加密实践

Spring Boot核心配置解析:绑定、多环境与加密实践

很多Java开发者第一次用Spring Boot,体验到的第一个“幸福感”就是不用再手写一堆XML了,但紧接着,就会被application.yml里的缩进、绑定规则和多环境切换折腾几回。application.yml这个看似不起眼的文件,其实是整个Spring Boot项目…

2026/10/10 13:46:50 阅读更多 →
CSP第二题机器人模拟题复健指南:从手生到稳定AC

CSP第二题机器人模拟题复健指南:从手生到稳定AC

说实话,第38次CSP我是裸考去的。不是报名前不重视,而是那段时间确实被各种事挤占,连续三个月没碰过OJ。键盘一上手,最明显的感受不是“算法不会”,而是连最基本的边界判断都开始犹豫。第一题磕磕绊绊写完,心…

2026/10/10 13:45:46 阅读更多 →

日新闻

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

1. 从“卫星轨道分类”这个标题说起:为什么值得花时间搞懂第一次接触“卫星轨道分类”这个概念,很多人会觉得它离自己很远——不就是天上的星星怎么转吗?但如果你正在做航天任务规划、遥感数据接收、星座设计,甚至只是准备一场航天…

2026/10/10 0:00:39 阅读更多 →
Spring AOP 核心原理与实战:从概念到日志切面落地

Spring AOP 核心原理与实战:从概念到日志切面落地

1. 从一个真实痛点说起:为什么你的代码里到处都是重复逻辑刚入行那会儿,我写过一个用户管理模块,注册、登录、改密码、注销四个接口。每个接口里都塞了几乎一样的日志打印、参数校验、事务开启和提交。当时觉得没什么,能跑就行。直…

2026/10/10 0:00:40 阅读更多 →
Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

简介:这是一套面向计算机相关专业学生与项目实战学习者的Python数据采集与分析可视化完整项目,以Boss直聘岗位数据为对象,适合用作毕业设计、课程设计或期末大作业。资源包共38个文件,约246KB,以13个py源码文件为核心&…

2026/10/10 0:00:40 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

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

2026/10/10 11:14:25 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

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

2026/10/10 1:36:08 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

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

2026/10/10 11:14: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/10 5:23:50 阅读更多 →
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/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练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/10 10:38:42 阅读更多 →