深入理解Linux sync命令:从延迟写入到数据落盘
1. 为什么需要sync先看懂内核的延迟写入机制1.1 数据进入page cache之后发生了什么在Linux日常维护里sync大概是看起来最不起眼的一个命令。它不像top、ps那样天天见执行起来往往一秒不到就回到提示符很多刚接触Linux的人甚至会怀疑它是不是什么都没干。但如果你曾经在拷贝完一个几GB的文件后直接拔掉U盘结果镜像损坏、配置丢失你就会明白这个命令背后藏着Linux存储机制里非常关键的一环——延迟写入。默认情况下Linux下所有对文件和块设备的写入都不是直接落到磁盘上的。当你的进程调用write()把数据交给内核内核会先把这些数据放进page cache页缓存标记为脏页然后立刻返回——从应用的角度看写入已经完成了。真正把脏页刷到磁盘的动作由内核的writeback机制在后台异步完成。触发写回的条件主要有三个脏页占总内存的比例超过了dirty_background_ratio阈值脏页在内核里停留的时间超过了dirty_expire_centisecs的设定有人主动调用了sync、fsync这类同步接口。这个过程跟我们平时理解的写文件有本质区别。你可以把page cache想象成一个大型中转仓库write()只是把货物送进仓库至于什么时候装车发往目的地是另一套流程在管。应用层看到write()返回只代表货物已经进仓不代表已经安全到达目的地。很多丢数据事故的核心就在这个时间差里你看到拷贝完成的提示以为数据已经稳稳落在硬盘或U盘上实际上它还停留在内存的page cache里。一旦拔设备、断电、内核崩溃这部分来不及写回的数据就彻底丢了。1.2 sync到底解决了哪个环节的隐患sync命令的作用就是强制触发一次内核的writeback流程把所有处于脏状态的文件系统缓冲真正写到磁盘。它本身并不复杂本质上就是一次系统调用把数据落盘的时机从内核觉得合适的时候提前到我明确要求的时候。从这个角度理解sync解决的问题其实非常清晰它让用户态可以主动掌控数据持久化的关键时刻。移动存储手动移除前、系统即将断电前、大批量写入完成后这些场景都需要一个确定性的数据已经落盘节点。系统里没有sync你就只能依赖内核的异步写回节奏而那个节奏是为整体吞吐优化的不是为你单个操作的安全服务的。这里有个常见误解值得先纠正很多人以为sync是万能保险执行了sync数据就一定安全了。实际上sync能保证的是内核已经把所有待写回的数据交给了存储设备设备是否真的把它们放进了稳定的存储介质内核无法约束。这个边界在后面的问题排查部分会详细展开先说结论sync是必要动作但不是充分条件。1.3 sync、fsync、fdatasync的定位差异涉及数据落盘经常被混在一起说的还有另外两个系统调用fsync和fdatasync。三者的定位差异在实际使用中非常关键。sync是全局级别的同步把所有已挂载文件系统上排队的缓冲数据全部写回不针对某个具体文件。命令行敲sync执行的就是这一层操作。fsync是文件级别的同步只针对你指定的单个文件确保这个文件的数据以及必要的元数据都落盘。文件大小、修改时间这类信息如果没写回掉电后可能文件内容是对的但文件看起来是坏的。fdatasync更轻量只同步文件的数据部分不保证元数据落盘适合那些只关心内容、不关心文件属性的场景。实操上最常见的误用是在程序里改了某个文件后调用sync去全量刷新。这样确实能达到目的但会让所有无关文件的脏数据也一起被刷盘性能开销大。正确做法是在代码里针对具体文件调fsync或者fdatasync命令行手动维护时才用sync做全局同步。另外内核还提供了一组dirty_开头的参数控制异步写回的节奏。我整理了一份常用的检查项方便对照理解内核参数常见默认值含义/proc/sys/vm/dirty_writeback_centisecs500writeback线程周期性唤醒间隔单位百分之一秒/proc/sys/vm/dirty_expire_centisecs3000脏页在缓存中超过该时间必须被写回/proc/sys/vm/dirty_background_ratio10脏页占内存比例超过该值后台开始异步写回/proc/sys/vm/dirty_ratio20脏页占比达到该值时新的写入会被阻塞直到写回跟上这些参数直接决定了内核默认的写回节奏。如果你发现sync命令执行后很久才返回往往不是sync本身慢而是脏页积压太多或者存储设备写入速度太慢。学会看/proc/meminfo里的Dirty和Writeback字段能直观了解当前系统里还有多少数据没有落到磁盘这个技巧在后面的排查章节会详细说。2. sync命令基础用法与参数逐个拆解2.1 最简单也是最常见的用法什么都不带直接敲在终端里敲sync回车这是最经典的用法。不带任何参数时sync会让内核把当前所有已挂载文件系统上的缓冲数据全部写回磁盘执行完成后返回。对于大多数日常场景这一个动作就足够了。现代GNU coreutils版本的sync命令完整用法是sync [选项] [文件]...不带文件时对所有文件系统做全局同步。后面跟了文件路径时行为变成只对这些文件执行类似fsync的操作这属于更精细的控制。有个细节需要注意不同发行版上sync二进制所属的软件包不同。绝大多数Linux发行版的sync来自coreutils但一些精简系统或者嵌入式环境用的是busybox自带的版本。busybox的sync实现非常简单基本只支持无参数调用。如果你的脚本需要跨环境跑最好先确认目标机器上sync支持哪些选项否则在核心脚本里遇到不认识的参数导致失败排查起来很折腾。2.2 带文件路径和参数时的行为差异当sync后面跟了文件路径行为会发生变化。核心参数就几个我逐个说下实际用途。-d--data参数只同步文件数据不等待元数据落盘。适合的场景是你往U盘里拷了一个大镜像最关心的是文件内容本身已经写完。元数据比如修改时间、权限属性这类信息不落盘对后续读取基本没有影响用-d可以少等一点时间。-f--file-system参数同步包含指定文件的整个文件系统。它和全局sync的区别在于全局sync是刷所有挂载的文件系统-f只刷你指定的那一个影响范围更小也更快。如果你创建了一批新目录、改了权限这些东西不落盘会导致下次挂载后文件系统的目录项看起来异常这时候用-f把整个文件系统刷一遍更稳妥。-s--sync参数的行为接近fdatasync只同步文件数据本身。和--io这种特殊用途参数不同-s在日常运维里偶尔能用到但和-d的实际效果重叠度比较高大多数场景下选-d或-f就够了。这几个参数的选择逻辑简单归纳就是只关心文件内容用-d或-s关心整个文件系统的一致性用-f懒得区分并且想要最全面直接不带参数。2.3 不同环境下的版本兼容问题版本兼容是写脚本时最容易被坑的地方。老系统的sync命令可能不支持-d、-f这些参数而新环境里这些参数正常。我自己的经验是在脚本里如果只是要全局刷盘别犹豫直接用不带参数的sync这是最通用、最保险的写法。如果确实需要精细控制脚本开头先执行sync --help确认参数支持情况再决定后续分支。另外sync命令有没有输出正常执行时一句话都没有静默返回。这个特点有时候会让人心慌总感觉没反应是不是卡住了。实际上没有输出就是最好的结果意味着命令已经成功执行完毕所有排队的数据都已经进入写回流程。3. 实操场景所有需要手动sync的时刻3.1 拔U盘、移动硬盘前不要只靠umount命令行环境下移除移动存储标准的完整流程是先确认设备状态再sync然后umount最后拔设备。lsblk sync umount /mnt/usb有些人觉得umount本身就带刷盘动作所以sync多余。umount确实会刷新文件系统缓冲但这里有个现实问题如果文件系统处于busy状态umount会直接报target is busy卸载失败你连卸载时自动刷盘的机会都没有。手动先sync的好处是数据落盘这个动作已经完成了后续无论umount是否成功都不会出现数据在内存里、设备已经拔掉这种最坏局面。现代桌面文件管理器里的安全移除按钮其实内部已经把sync和umount串好了这也是为什么图形界面弹出设备比命令行直接拔更安全。但如果你习惯用命令行管理存储或者需要写自动化的挂载卸载脚本这个流程必须刻进肌肉记忆。3.2 大文件拷贝完成后如何确认数据真正落盘往慢速设备拷贝大文件最容易让人误判完成。你执行cp拷贝一个20GB的镜像命令几乎瞬间返回这不代表拷贝真的完成了只代表数据已经全部进了page cache。真正落盘的过程由writeback线程在后台默默执行和你的cp命令已经没有关系。标准做法是拷贝完执行一次sync等命令自然返回。sync执行的时间长短直接反映了有多少脏数据、存储设备写得多快。如果sync等了几十秒说明之前确实有大量数据只停留在缓冲区里sync正在履行它真正的职责。这里分享一个小技巧往U盘这类慢速设备批量拷贝文件时可以分阶段sync。比如每拷贝500MB左右就手动sync一次而不是等所有文件拷贝完才刷。这样做的好处是一旦中途设备出问题、有人误拔、系统崩溃损失的数据量被限制在最后一段不至于全军覆没。缺点是频繁sync会打断连续写入的流水线整体吞吐会降一些。文件总量不大时无所谓动辄几十GB的迁移任务建议分批sync。3.3 关机、重启与脚本中的sync插入位置现代systemd管理的系统正常关机流程里已经包含了文件系统刷新理论上不需要你手动sync。但有一种情况我遇到过某个服务还在持续写日志关机流程虽然会停止服务再卸载文件系统但在停止服务的过程中如果出现了卡顿日志数据滞留在缓冲区里的时间可能比预期更长。在脚本里如果需要触发关机或重启我的习惯是在调用shutdown前先执行syncsync shutdown -h now先sync再shutdown关机开始时系统里已经没有需要刷盘的数据整个关机流程走起来会更快。尤其在内存里积压了大量脏页的机器上这个顺序能让重启时间缩短不少。部署类脚本里同理凡是涉及修改配置、写关键文件、随后马上重启的场景重启前放一条sync是低成本高收益的保险动作。虽然正常流程里重启命令本身会负责刷盘但多一层保障少一分焦虑尤其适合线上环境。3.4 程序开发中代替sync的正确函数如果你在写程序而不是敲命令别在代码里调用sync命令那是效率极低的做法。正确选择是fsync或者fdatasync系统调用只针对需要保证持久性的具体文件做同步。Python里的例子import os fd os.open(/path/to/config, os.O_WRONLY) os.write(fd, data) os.fsync(fd) os.close(fd)fsync会阻塞到该文件数据真正写回磁盘才返回这是写配置文件、写数据库日志这类场景的标准操作。需要注意的是fsync保证的是文件内容落盘不保证文件系统层面的目录项也落盘。如果你新建了一个文件想让目录项也可靠持久化需要对父目录也执行一次fsync这在极端断电场景下才有意义。经常有人问数据量不大是不是不需要fsync取决于你能接受的丢数据窗口。对大多数应用来说掉电丢最后几毫秒的数据可以接受但如果你写的是数据库或者交易记录fsync就是硬性要求没有讨价还价的余地。4. 典型工作流dd烧录、卸载设备和文件系统维护中的sync4.1 dd写盘后必须sync的原因与操作自制启动盘、烧录系统镜像是dd加sync出现频率最高的场景。很多人dd完看到records in/out的输出就急着拔U盘这是典型的翻车现场。dd的写操作和cp一样同样先进page cache。dd命令返回只代表数据已经交付给内核不代表已经写进U盘的存储颗粒。立刻拔设备轻则镜像损坏无法启动重则文件系统结构写到一半。正确的流程sudo dd ifsystem.iso of/dev/sdx bs4M statusprogress sudo syncsync返回后再拔设备镜像才算真正写到U盘上。有个细节值得说明这里dd的目标是块设备/dev/sdx而不是分区文件但写入的数据依然会被内核缓存。有些发行版在dd之后弹出提示请安全移除设备其实内部做了同步处理但命令行环境没有这个自动动作必须自己sync。4.2 一个完整的移动设备安全移除流程整理一个我自己的标准操作序列适用于任何需要手动移除的移动存储设备。第一步用lsof或者fuser检查有没有进程还在占用设备的文件lsof /mnt/usb第二步执行sync等提示符重新出现这是数据落盘的关键节点。第三步执行umount /mnt/usb确认没有报target is busy。第四步再执行一次sync。这一步在umount成功的情况下不是必须的因为umount本身会刷盘。但如果umount因为某些原因失败了这一步至少保证数据已经安全落盘后续强制移除设备也不会丢数据。第五步确认设备没有挂载后才可以拔下设备。这套流程看起来繁琐实际执行起来不到十秒钟。我在生产环境一直这么操作移动硬盘和U盘的数据一次都没出过问题。4.3 mkfs、挂载和fstrim操作中的sync配合创建文件系统之后比如mkfs.ext4刚刚执行完要不要先sync再挂载我在实际中遇到过mkfs返回后马上挂载偶尔出现设备无法识别的奇怪报错排查到最后发现是文件系统超级块没有完全落盘。重新sync后一切恢复正常。这种情况在内存压力大、系统同时跑着大量IO任务的机器上更容易出现。mkfs本身会做一定程度的同步但繁忙系统上这种内部同步的保障力度是不够的。凡是mkfs、分区调整这类操作前后各补一条sync属于成本几乎为零、收益很明显的规范化动作。SSD的TRIM操作也值得注意。fstrim把未使用块标记为可回收的信息需要落盘才有持久意义官方也建议在fstrim完成后配合sync使用确保TRIM状态真正持久化。虽然绝大多数时候fstrim自己会处理好但脚本里加一条sync没有坏处还能让整个流程的一致性更好把握。5. 常见问题与排查技巧实录5.1 sync执行后长时间不返回怎么办遇到sync长时间卡住先判断是正常还是异常。最常见的原因是数据量大存储设备写入速度慢。机械硬盘和低端U盘刷大量脏页时的真实写入速度可能只有几十MB/s几个GB的脏数据刷下来耗时几十秒很正常。这时候别急着按CtrlC让它跑完。实在担心卡死另开一个终端看磁盘状态iostat -x 1观察目标磁盘的写入速率指标是否还在持续增长。只要写速率在动说明sync正在工作只是还没完成。如果sync已经卡了十几分钟磁盘写入速度却是零这才需要警惕。可能是存储设备固件陷入异常状态或者硬件连接有问题。这时候建议先检查设备是否还在线再考虑其他排查方向。5.2 sync返回了数据还是丢了的深层原因这是最让人困惑的问题。sync返回说明内核已经把数据交给了存储设备但没有任何机制保证设备真的把它们放下了。很多消费级硬盘、U盘自带写缓存收到内核的flush命令后为了性能表现可能直接回复OK实际上数据还在设备内部的缓存里没有落到盘片或者NAND颗粒上。设备固件觉得我可以我能保证内核也就信了。遇到这种情况sync救不了你。应对思路有两个方向一是选择靠谱的存储设备重要数据不要放在劣质U盘上二是重要数据建立多副本机制不要把单条命令当作数据安全的唯一防线。理解了这层边界你对sync的期待会更合理——它负责的是内核到设备之间的交付设备内部的可靠性由硬件决定。5.3 sync和drop_caches的先后顺序把sync和释放内存缓存的操作搞混是新手常踩的坑。echo 3 /proc/sys/vm/drop_caches这条命令用于清空页面缓存、目录项缓存等内存占用但它不会主动把脏数据写回磁盘。准确地说drop_caches是在写回完成后才释放对应缓存。如果你直接执行drop_caches而忽略sync脏页虽然最终还是会被写回但依赖的是内核异步机制时机不可控。正确的清理顺序是sync echo 3 /proc/sys/vm/drop_caches先让所有数据落盘再清缓存。这个顺序记牢了能避免很多清理了内存缓存之后数据反而丢了的诡异问题。5.4 通过/proc/meminfo观察脏页的实战方法想直观看到系统里还有多少数据没写盘最直接的就是看下面两个字段cat /proc/meminfo | grep -E Dirty|WritebackDirty表示当前脏页大小Writeback表示正在写回但还没完成的部分。如果Dirty长期保持高位说明写入压力大或者存储设备跟不上了。配合watch命令实时观察watch -n 1 grep -E Dirty|Writeback /proc/meminfo做一个简单的实验最能理解sync的作用往U盘里拷贝一个大文件拷完立刻看Dirty值你会发现这个数值很大。然后执行sync再回来看Dirty值已经归零。这个过程比任何文档都直观建议所有学Linux的人都亲手试一次。5.5 关于sync的五个常见误区把几个高频误区整理成一张自查表遇到问题可以对照排查常见认知实际情况拷贝完成等于数据写入磁盘只是写入page cache是否落盘取决于writeback机制umount之前不需要sync建议先sync再umount防止umount失败时数据仍未落盘sync执行一定很慢只有脏数据量大时才慢平时几乎瞬间完成sync能保证物理落盘只能保证交给设备无法对抗硬件写缓存撒谎程序里用sync命令就够单文件场景应该用fsync/fdatasync全盘sync效率低最后再分享一个我在实际使用中的体会sync这个命令最大的价值不在于它本身的复杂度而在于它逼着你理解Linux存储栈里缓冲这一层。以前我折腾小设备经常因为图省事直接断电导致配置文件丢失、分区表异常。后来养成习惯凡是修改分区、烧录镜像、拷贝大文件操作结束必然手动sync一次翻车概率大幅下降。对于正在学Linux的朋友建议别只在教程里认识sync。拿一个U盘实际拷贝一个大文件拷完先看/proc/meminfo里的Dirty值再执行sync你会对这个命令的运作逻辑建立起非常清晰的感知。和sync同一体系的还有fsync在编程中的应用、writeback内核参数调优这些内容更适合单独展开写等这个系列往深处走的时候可以继续聊。

相关新闻

前端导出Excel/CSV实战:从字符串拼接、Blob到大数据量性能优化

前端导出Excel/CSV实战:从字符串拼接、Blob到大数据量性能优化

1. 从一次数据交付事故说起:为什么前端导出不是“调个库”那么简单去年年底,我帮一个做运营后台的朋友处理过一个挺典型的烂摊子。他们的系统里有一个订单明细页,运营同事每天要把当天的数据导出来做二次分析。最初的做法是后端提供一个接口&…

2026/10/16 4:28:20 阅读更多 →
模板代码异常处理全攻略:从编译拦截到渲染降级

模板代码异常处理全攻略:从编译拦截到渲染降级

模板代码的异常处理,说难不难,说简单也不简单。我接过不少以模板渲染为核心的项目,从批量邮件通知、自动化报表到页面静态化,几乎每个项目在跑起来之后,第一波线上问题全出在模板这一层——变量名拼错、字段为空、循环…

2026/10/16 4:27:20 阅读更多 →
嵌入式MCU加密库实战:从算法选型到安全实现与避坑指南

嵌入式MCU加密库实战:从算法选型到安全实现与避坑指南

做嵌入式开发这些年,但凡接触过设备固件升级、数据透传、产线认证这类需求的,最后几乎都会撞上同一个问题:在资源受限的MCU上跑加解密,怎么跑才能兼顾速度、内存和安全性。我前面负责一个数据采集终端项目,要在主控芯片…

2026/10/16 4:27:20 阅读更多 →

最新新闻

Coder 平台深度解析:环境即代码与云端开发环境搭建指南

Coder 平台深度解析:环境即代码与云端开发环境搭建指南

1. 从“coder”这个标题说起:它到底指什么“coder”这个词,放在今天的技术语境里,含义比五年前宽泛了太多。早些年,它基本就是“写代码的人”的代称,跟 programmer、developer 混着用。但现在你搜“coder”&#xff0c…

2026/10/16 5:08:31 阅读更多 →
带权区间调度问题详解:从贪心失效到动态规划最优解

带权区间调度问题详解:从贪心失效到动态规划最优解

1. 先说这道题的含金量算法设计与分析课程里,习题6.3这种编号,往往卡在一个很微妙的位置——前几章刚讲完分治和贪心,后面紧接着就是动态规划,而6.3恰好就是让你把前两种思维揉碎了再重新拼起来的转折点。我当年做这道题的时候&am…

2026/10/16 5:08:31 阅读更多 →
SVM与神经网络工程选型决策指南:小样本、低延迟、高可解释场景实战

SVM与神经网络工程选型决策指南:小样本、低延迟、高可解释场景实战

/* 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 5:08:31 阅读更多 →
基于MP2642GR-Z与dsPIC30F4013的2S电池均衡设计与实现

基于MP2642GR-Z与dsPIC30F4013的2S电池均衡设计与实现

/* 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 5:08:31 阅读更多 →
2020团体程序设计天梯赛复盘:从模拟到压轴的易错点全解析

2020团体程序设计天梯赛复盘:从模拟到压轴的易错点全解析

2020年那届团体程序设计天梯赛,我是真没想到自己最后会坐在电脑前,以线上方式打完全程。更没想到的是,比赛结束后对照榜单复盘,我发现自己丢的分里,有将近三分之一不是"不会做",而是"会做但…

2026/10/16 5:08:31 阅读更多 →
C++十进制转十六进制:从手写算法到标准库全解析

C++十进制转十六进制:从手写算法到标准库全解析

/* 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 5:07:31 阅读更多 →

日新闻

个人 AI Agent 平台接入 TaoToken:统一 Key 与 API 通道的配置大纲

个人 AI Agent 平台接入 TaoToken:统一 Key 与 API 通道的配置大纲

/* 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 0:00:05 阅读更多 →
信号与系统频域分析作业解题指南

信号与系统频域分析作业解题指南

1. 作业背景与核心要求解析信号与系统作为电子信息类专业的核心基础课,其作业设计往往直接关联课程的核心知识框架。2026年春季第六次作业的布置,通常对应着课程进展到频域分析的关键阶段。根据常规教学进度推测,本次作业可能涉及以下核心内容…

2026/10/16 0:00:05 阅读更多 →
Django MVT实战:从零构建图书借阅系统,彻底搞懂Model-View-Template分层

Django MVT实战:从零构建图书借阅系统,彻底搞懂Model-View-Template分层

1. 从一个"四不像"的练手项目说起如果你已经看完了Django的官方教程前几章,跟着敲完了投票应用,大概会有一种"我好像会了,又好像什么都不会"的割裂感。教程里每个知识点都是拆开的——这一章讲模型,下一章讲视…

2026/10/16 0:00:05 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/15 13:48:15 阅读更多 →

月新闻

我发现了一个新思路:用 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/15 0:14:36 阅读更多 →
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/15 9:49:14 阅读更多 →