个人主页杨利杰YJlio❄️个人专栏《Sysinternals实战教程》 《Windows PowerShell 实战》 《WINDOWS教程》 《IOS教程》《微信助手》 《锤子助手》 《Python》 《Kali Linux》《那些年未解决的Windows疑难杂症》让复杂的事情更简单让重复的工作自动化文件工具总览12.0一文看懂 Strings / Streams / Junction / FindLinks / DU / PendMoves / MoveFile1. 问题背景文件问题不是“删不掉”这么简单2. 七大文件工具先认全看内容、看链接、看体积、看队列3. Strings 与 Streams一个看明文一个看隐藏数据流3.1 Strings从二进制里提取可见字符串3.2 Streams扫描 NTFS 备用数据流4. Junction 与 FindLinksNTFS 里的路径魔术4.1 Junction目录联接与路径迁移4.2 FindLinks硬链接关系查询5. DU磁盘空间体检快速找出空间大户6. PendMoves 与 MoveFile重启后才能动的文件交给它俩6.1 PendMoves查看待执行文件操作6.2 MoveFile安排重启后移动或删除7. 组合实战文件排障不要只会单点工具7.1 磁盘突然爆满7.2 顽固文件 / 驱动删不掉7.3 可疑样本初步分析8. 常见坑与现场建议9. 总结文件工具的核心是“看清文件系统的隐藏关系”1. 问题背景文件问题不是“删不掉”这么简单做 Windows 桌面运维、服务器排障、安全分析或者开发调试时经常会遇到一些看起来很普通、但背后机制并不简单的问题。比如某个文件明明看起来不大但目录空间异常某个目录像普通文件夹实际却指向另一个磁盘某个 DLL 当前删不掉只能等重启某个可疑 EXE 不知道里面有没有 URL、命令、配置路径某个文件看起来干净实际可能挂了 NTFS 备用数据流。这些问题如果只靠资源管理器很容易看不透。Sysinternals 文件工具这一组解决的就是这些“文件系统表面看不出来”的问题。这一组工具的核心价值不是替代资源管理器而是帮你看见资源管理器看不到的东西。比如字符串、备用数据流、重解析点、硬链接、真实磁盘占用、重启后待执行的文件操作。这张图展示的是 Sysinternals 七大文件工具的整体分工Strings、Streams、Junction、FindLinks、DU、PendMoves、MoveFile 分别对应内容、链接、体积和重启队列几个方向。从图中能看出这七个工具不是零散工具而是可以按排障视角归类Strings 和 Streams 用来看内容Junction 和 FindLinks 用来看 NTFS 路径关系DU 用来看磁盘空间PendMoves 和 MoveFile 用来看或安排重启后的文件操作。建议先把这七个工具当成一套“文件系统诊断工具箱”来理解。单个工具当然能用但真正实战时经常是组合使用。2. 七大文件工具先认全看内容、看链接、看体积、看队列在正式拆工具前先把这七个工具放到一张表里。初学时不要先纠结参数细节先记住每个工具“负责看什么”。工具作用关键词典型用途strings提取可见字符串从 EXE / DLL / SYS 中找 URL、API、命令、错误信息streamsNTFS 备用数据流扫描和清理 ADS发现隐藏数据junction目录联接 / 重解析点查看和创建目录级路径重定向findlinks硬链接查询找出多个路径是否共用同一文件实体du目录空间统计找出磁盘空间大户定位异常增长目录pendmoves查看重启后文件队列查看 PendingFileRenameOperations 等待执行项movefile安排重启后移动 / 删除删除当前被占用的顽固文件或驱动残留可以把它们粗暴分成四类Sysinternals 文件工具看内容看链接看体积看重启队列Strings提取可见字符串Streams扫描 ADS 数据流Junction目录联接FindLinks硬链接查询DU目录占用统计PendMoves查看待执行操作MoveFile安排重启后移动/删除不要把这些工具当成“清理软件”乱用。尤其是 Streams 的 -d、Junction 的删除操作、MoveFile 的重启后删除都可能影响业务路径或系统文件。企业环境里更要先看、再判断、最后才动手。推荐原则是先只读扫描再导出证据再决定是否修改。这也是企业桌面支持和服务器运维最基本的安全边界。3. Strings 与 Streams一个看明文一个看隐藏数据流Strings 和 Streams 可以放在一起理解因为它们都属于“看文件内容”的工具。区别是Strings 看二进制文件里能直接提取出来的可见字符串Streams 看 NTFS 文件上挂着的备用数据流。Strings 更偏样本粗分析、逆向辅助、关键字检索Streams 更偏 NTFS 取证、安全排查和隐藏数据发现。这张图展示的是 Strings 与 Streams 的区别左边从二进制文件中提取 URL、API、ERROR、CONFIG 等可见字符串右边展示同一个文件下挂载多个 NTFS 备用数据流。从图中能看出Strings 像是在二进制文件里“捞明文情报”Streams 像是在 NTFS 文件后面检查有没有“隐藏夹层”。这两个工具都不会替你完成完整分析但能迅速告诉你这个文件是否值得继续深挖。Strings 适合先扫一遍“它说了什么”Streams 适合检查“它还藏了什么”。3.1 Strings从二进制里提取可见字符串strings.exe 的作用很直接在文件中扫描可打印字符串把肉眼可读的信息拉出来。对 EXE、DLL、SYS、BIN 这类文件尤其常用。在安全排查里你可以先用 Strings 看看样本里有没有域名、URL、命令、API、配置路径、错误信息。它不能替代逆向但可以作为第一轮粗筛。strings.exe sample.dll如果输出太多可以配合 findstr 过滤 URL、协议或关键字strings.exe -n 6 sample.exe | findstr /i http https ftp api cmd powershell如果是 PowerShell 场景可以批量扫目录下的 EXE 和 DLLGet-ChildItem.-Recurse-Include*.exe,*.dll|ForEach-Object{strings.exe$_.FullName|Select-StringCompanyName|http|api|token}实战里建议配合关键词过滤使用 Strings。直接把全部输出肉眼看一遍效率很低也容易被噪音淹没。不要因为 Strings 没看到可疑字符串就认为文件一定安全。很多样本会加壳、混淆、加密字符串Strings 只能作为第一层粗分析。3.2 Streams扫描 NTFS 备用数据流streams.exe 专门用于扫描 NTFS Alternate Data Streams也就是备用数据流。简单理解一个文件除了主数据流还可以挂其他命名数据流。这些内容在普通资源管理器里通常不明显。最常见的 ADS 是下载文件附带的 Zone.Identifier它记录文件来源区域信息。安全排查里更需要关注可疑脚本、配置、二进制内容是否被挂在 ADS 中。streams.exe -s C:\suspect_dir如果确认某个目录里的 ADS 没有业务价值可以使用删除参数streams.exe -s -d C:\suspect_dir不要在业务目录、应用目录、用户数据目录里随手执行 streams -d。少数应用可能真的使用 ADS 存放元数据。正确做法是先扫描、导出、确认再清理。安全排查时建议先导出 Streams 结果保留证据链。尤其是可疑样本目录、下载目录、临时目录、用户配置目录先看清再动手。4. Junction 与 FindLinksNTFS 里的路径魔术Junction 和 FindLinks 都和 NTFS 链接关系有关但它们看的不是同一种东西。Junction 主要看目录联接也就是某个目录路径看起来在这里实际可以通过重解析点指向另一个位置。FindLinks 则是硬链接查询用来确认多个路径是否指向同一个文件实体。这张图展示的是 Junction 与 FindLinks 的核心差异左边是目录联接把 C:\OldPath 重定向到 D:\NewPath右边是多个路径共享同一个文件实体。从图中能看出Junction 解决的是目录路径重定向FindLinks 解决的是硬链接关系查询。前者更像“访问旧路径时透明转到新目录”后者更像“几个文件名其实指向同一个底层文件实体”。Junction 看的是目录级路径映射FindLinks 看的是文件级实体关系。这两个概念如果混了磁盘排查和备份排查很容易误判。4.1 Junction目录联接与路径迁移junction.exe 常见用途是做目录迁移。比如某个老程序死写 C:\OldPath但你想把真实数据放到 D 盘就可以用 Junction 做一个目录联接。junction.exe C:\OldPath D:\NewPath查看某个路径下的 junctionjunction.exe C:\删除联接本身junction.exe -d C:\OldPath删除 Junction 时要确认你删的是联接本身不是目标目录。虽然 junction -d 的设计是删除联接但在不熟悉路径关系时仍然要先确认当前路径到底是什么。另一个大坑是备份工具递归扫描。如果备份软件不识别 reparse point可能会沿着联接反复扫描导致备份体积异常、扫描耗时异常甚至形成循环。4.2 FindLinks硬链接关系查询findlinks.exe 用于查询某个文件的所有硬链接路径。硬链接的特点是多个文件名可以指向同一个文件实体底层内容只有一份。findlinks.exe C:\Windows\System32\notepad.exe它适合处理两类问题一类是空间排查确认多个路径是否其实共用同一个文件另一类是安全排查确认某个可疑文件是否通过硬链接伪装到其他路径。排查空间异常时不要看到多个路径就简单认为占用了多份空间。先看是否存在硬链接关系。硬链接不是快捷方式。删除其中一个路径不代表底层内容一定消失。只有所有硬链接都被删除文件内容才真正释放。5. DU磁盘空间体检快速找出空间大户磁盘空间报警是桌面支持和服务器运维里非常高频的问题。普通做法是打开资源管理器一层层点文件夹看大小。但这种方式很慢也不适合批量巡检。du.exe 的价值就是快速递归统计目录占用并按照层级输出空间使用情况。它适合回答一个很实际的问题到底是谁在吞磁盘这张图展示的是 DU 的磁盘空间体检思路通过目录占用排行找出日志、缓存、备份、安装包、临时文件等空间大户。从图中能看出DU 的输出思路很适合做空间排行。磁盘总容量、已使用、可用空间以及各类目录占用比例都可以转化为巡检数据。对企业桌面运维来说这比手工点目录更可复盘。DU 的核心价值是把“感觉哪个目录大”变成“有数据的目录排行”。查看当前目录下一层子目录占用du.exe -q -l 1 .统计某个目录并导出 CSVdu.exe -c -l 3 C:\Data C:\Temp\disk_usage.csv如果想快速定位 C 盘空间大户可以先从浅层扫描开始du.exe -q -l 1 C:\再对可疑目录深入du.exe -q -l 2 C:\Users du.exe -q -l 2 C:\ProgramData du.exe -q -l 2 C:\Windows推荐先浅层扫描再逐层深入。不要一上来就对整个盘做深层递归尤其是在服务器、机械硬盘、网络盘或者用户数据量很大的环境里。看到目录大不等于可以直接删。日志、缓存、备份、安装包、用户数据、系统组件都要分开判断。删除前必须确认业务影响和回退方式。6. PendMoves 与 MoveFile重启后才能动的文件交给它俩Windows 上经常会遇到文件当前被占用无法删除或移动。尤其是 DLL、SYS 驱动、服务相关文件、安全软件残留、卸载残留正在运行时通常删不掉。Windows 处理这类问题的一种方式是把文件移动或删除操作写入重启后执行队列。系统在下次启动早期文件还没被锁定时完成操作。PendMoves 和 MoveFile 正好是一组PendMoves 用来看队列里有什么MoveFile 用来安排下次重启移动或删除。这张图展示的是 PendMoves 与 MoveFile 的工作流文件当前被占用操作写入待执行队列系统重启后完成删除或移动。从图中能看出PendMoves 更偏查看MoveFile 更偏安排。一个负责检查“重启后准备干什么”一个负责把“下次重启要做什么”写进去。这类工具处理的是重启时机而不是强行杀进程。它适合当前无法释放文件占用、但可以通过重启早期完成清理的场景。6.1 PendMoves查看待执行文件操作pendmoves.exe 用来查看当前系统中排队等待重启后执行的文件重命名、移动或删除操作。pendmoves.exe它的价值在于排查为什么卸载后还提示需要重启为什么某个文件一直等重启清理是否有可疑路径被安排到下次启动时处理在安全排查和卸载残留排查中PendMoves 很适合作为证据查看工具。它能让你知道队列里是否存在异常路径。6.2 MoveFile安排重启后移动或删除movefile.exe 可以安排某个文件在下次重启时被移动或删除。安排下次重启删除文件movefile.exe C:\Path\locked.dll 安排下次重启移动文件movefile.exe C:\Old\driver.sys C:\Quarantine\driver.sysMoveFile 是高风险工具。路径写错可能导致系统组件、驱动或业务文件在重启后被删除。执行前必须确认路径、文件用途、回退方案。推荐流程是先用 Handle / Process Explorer 确认占用再决定是否使用 MoveFile最后用 PendMoves 验证队列。能不能文件无法删除或移动确认是否被进程占用能否安全停止进程停止进程后正常处理使用 MoveFile 安排重启处理使用 PendMoves 检查队列重启后验证结果7. 组合实战文件排障不要只会单点工具这七个工具真正有价值的地方不是单个命令而是组合判断。文件系统问题往往不是一个维度能解释清楚的。空间异常可能和 Junction、硬链接有关删不掉可能和占用、待执行队列有关可疑文件可能既要看字符串也要看 ADS。7.1 磁盘突然爆满先用 DU 找空间大户再判断目录里是否有链接、重解析点或隐藏数据。磁盘告警DU 找 TOP 目录Junction 检查重解析点FindLinks 检查硬链接Streams 检查 ADS输出清理建议推荐先定位空间来源再判断是否可以清理。不要看到大目录就直接删尤其是 Windows、ProgramData、Users、业务数据盘。7.2 顽固文件 / 驱动删不掉这类问题先看占用再看能否停服务或进程最后才考虑 MoveFile。Handle / Process Explorer → 确认占用 MoveFile → 安排重启后删除或移动 PendMoves → 验证队列是否写入 重启 → 验证文件是否处理完成不要把 MoveFile 当成“万能删除器”。它只是安排重启后操作是否应该删除仍然要靠你判断。7.3 可疑样本初步分析对可疑样本可以先用 Strings 找 URL、命令、API再用 Streams 看是否存在隐藏数据流。如果样本落地后无法删除再结合 MoveFile 处理。否是可疑文件Strings 提取明文过滤 URL / API / 命令Streams 检查 ADS是否当前无法删除隔离或删除MoveFile 安排重启处理安全排查里工具输出最好保存下来。命令结果、文件路径、时间点、哈希、队列状态都属于证据链。8. 常见坑与现场建议第一Streams 不要直接全盘删除 ADS。ADS 不一定都是恶意内容部分软件可能使用它存储元数据。先扫描后判断。第二Junction 不要和普通目录混淆。备份、同步、统计空间时要识别 reparse point否则可能造成循环扫描或体积误判。第三FindLinks 查出来的多个路径不代表多份空间。硬链接多个路径共享同一文件实体不要简单按路径数量估算空间。第四DU 只告诉你哪里大不告诉你能不能删。空间排查和清理决策是两件事。第五MoveFile 路径必须核对。重启后执行的操作不好现场拦截路径写错就是事故。第六PendMoves 结果要结合上下文判断。正常软件更新、驱动安装、卸载程序都可能写入待执行队列不要看到队列就直接判定异常。企业现场建议保留一份操作记录执行了什么命令、针对什么路径、输出是什么、是否修改系统状态。这样后续复盘和交接都更稳。涉及系统目录、业务目录、安全样本、驱动文件时原则是先备份、先截图、先导出结果再执行修改动作。9. 总结文件工具的核心是“看清文件系统的隐藏关系”Sysinternals 这七个文件工具表面看都是小命令实际覆盖了 Windows 文件系统排障里的几个关键视角文件内容、隐藏数据流、路径链接、磁盘占用、重启后操作队列。如果只记一个结论那就是这些工具不是为了让你更快删除文件而是为了让你更准确地判断文件问题的本质。建议把它们按四类记忆Strings / Streams 看内容Junction / FindLinks 看链接DU 看体积PendMoves / MoveFile 看重启队列。这个框架记住后后面拆单个工具会更容易。真正成熟的文件排障不是看到问题就立刻清理而是先建立证据链它在哪里、占多少、是否隐藏、是否链接、是否被占用、是否排队等待重启。判断清楚后再决定是否删除、迁移、隔离或保留。 返回顶部点击回到顶部