文件工具学习笔记(12.7):Sysinternals 文件工具实战总览与排障闭环

文件工具学习笔记(12.7):Sysinternals 文件工具实战总览与排障闭环

  • [文件工具学习笔记(12.7):Sysinternals 文件工具实战总览与排障闭环](#文件工具学习笔记(12.7):Sysinternals 文件工具实战总览与排障闭环)

文件工具学习笔记(12.7):Sysinternals 文件工具实战总览与排障闭环

适用人群:Windows 运维 / 桌面支持 / 安全 / 开发同学,已经看过本章前面 Strings / Streams / Junction / FindLinks / DU / PendMoves & MoveFile 的内容,希望把这些零散工具串成一套"发现问题 → 分析 → 处置 → 验证"的完整方法论。

你将在本篇收获:

  • 一张表重新统摄第 12 章所有工具的定位与差异
  • 若干典型场景下"选什么工具 + 怎么组合用"
  • 一套可复制的 Windows 磁盘/文件排障通用流程
  • 几个脚本化示例,帮助你把工具融入日常运维

一、工具全景:谁负责"看"、谁负责"动手"

先用一张总览表把第 12 章的文件工具再捋一遍:

工具 关键能力 主要针对的问题
Strings 提取文件中的可打印字符串 二进制文件里藏了什么?是否可疑?版本/路径线索?
Streams 查看/删除 NTFS 备用数据流 文件有没有挂 ADS?是否有隐藏内容?
Junction 创建/查看/删除 NTFS 目录联接 这个目录是不是重解析点?真实数据在哪?
FindLinks 查看文件的所有硬链接 这个文件有几个"别名"?删了一个是否还会存在?
DU 目录/驱动器空间占用分析 空间去哪儿了?是谁在吃磁盘?
PendMoves 列出重启后待执行的文件操作 哪些文件被安排为重启后删除/替换?安全不安全?
MoveFile 立即/重启后重命名/删除文件 正在使用的文件删不掉/换不了,如何"重启补刀"?

可以简单记成两个大类:

  • 分析类(只读为主):Strings、Streams、Junction、FindLinks、DU、PendMoves
  • 变更类(会修改系统):MoveFile(以及 Streams / Junction 的删除操作)

后续在实战场景里,我们会把这些工具按"先看清 → 再动手"的顺序组合起来用。


二、从"症状"出发:场景化选择工具

这里按真实日常里最常见的几类问题,给一套 "症状 → 工具优先级 → 典型动作" 的映射。

场景 1:磁盘快满了,不知道谁在吃空间

症状:

  • C 盘或某数据盘接近 100%,系统告警 / 应用报错
  • 用户只会说一句:"电脑/服务器空间满了,帮忙看看"

推荐工具链:

  1. DU:找出哪些目录/文件最大
  2. Junction / FindLinks:确认是不是被联接/硬链接"迷惑视觉"
  3. Strings / Streams:对少量可疑大文件做内容判断(确认是否能删)

粗略流程示例:

bat 复制代码
:: 1) 整盘概览
du C:\ -q -l 1

:: 2) 针对某个大目录,细化到子目录
du C:\Logs -q -l 2

:: 3) 若发现一个很大的目录,却怀疑是 Junction
junction C:\Logs

:: 4) 针对某个极大单文件,看看是否有可读信息
strings C:\Logs\huge.bin | more

场景 2:文件删不掉 / 提示"正在被使用"

症状:

  • 报错 "文件正在被另一程序使用""访问被拒绝"
  • 某个 EXE/DLL/日志文件始终无法删除或替换

推荐工具链:

  1. (可选)配合 Handle / Process Explorer 找出占用者
  2. 若无法停用:使用 MoveFile 安排重启后删除/替换
  3. 用 PendMoves 核对挂起操作是否写对

典型操作:

bat 复制代码
:: 安排重启后删除顽固文件
MoveFile C:\App\abc.dll ""

:: 安排重启后替换文件(先复制新文件)
copy C:\App\abc_new.dll C:\App\abc.tmp
MoveFile C:\App\abc.dll C:\App\abc.bak
MoveFile C:\App\abc.tmp C:\App\abc.dll

:: 查看当前挂起的重启操作
PendMoves

这里的关键点:

  • 永远在 MoveFile 之后用 PendMoves 看一眼,确认路径没写错
  • 对系统目录(尤其是 System32)格外谨慎,必要时提前备份 / 做快照

场景 3:怀疑有"隐藏内容"------流、链接、软重定向

症状:

  • 某个目录大小"看起来不大",但硬盘空间明显被占用
  • 安全排查时怀疑有人用 NTFS 特性藏东西
  • 删除一个文件后,发现其占用空间几乎没变化

推荐工具链:

  1. Streams:检查文件/目录是否存在 ADS(备用数据流)
  2. Junction:确认是否有目录联接指向其他路径
  3. FindLinks:检查文件是否有多个硬链接指向同一物理数据块

示例:

bat 复制代码
:: 检查整个目录树是否有 ADS
streams -s C:\Data

:: 查看某目录是否是 Junction
junction C:\Data\Logs

:: 查看某文件的所有硬链接
findlinks C:\Data\important.dat

场景 4:可疑二进制文件,想快速"窥一眼"

症状:

  • 某个 EXE/DLL/SYS 在进程列表或启动项中出现
  • 需要初步判断它是不是恶意/可疑组件

推荐工具链:

  1. Strings:提取内部字符串,辅助肉眼判断
  2. 配合 Sigcheck(第 9 章)、VirusTotal 等做更深入判断

示例:

bat 复制代码
:: 提取可打印字符串
strings -n 6 C:\temp\suspicious.exe > C:\temp\suspicious_strings.txt

关注内容:

  • 可疑 URL / IP
  • 可执行路径 / 版本号 / 编译时间
  • 明显与系统无关的功能性词汇

三、一套可复制的"文件/磁盘排障通用流程"

把上面场景汇总一下,可以整理出一套通用流程:

第一步:快速画像 ------ DU

  • 用 DU 确定"问题盘/问题目录"
  • 关注:
    • 增长最快的目录(配合时间观察)
    • 单个超大文件(日志、数据库、转储文件等)
  • 对"异常大的目录/文件"做结构层检查:
    • 目录是否是 Junction/挂载点,实际数据可能在其他盘
    • 文件是否有多个硬链接:删除一个"表面名字"不代表数据释放

第三步:内容抽样 ------ Strings / Streams

  • 表面看不懂的二进制大文件:
    • 用 Strings 抽样,看是否真的是业务数据(或可疑 payload)
  • 目录/文件 ADS 检查:
    • Streams -s 扫描目录树,必要时导出列表排查

第四步:制定处置动作 ------ MoveFile / 其他工具

  • 如果:
    • 文件可在当前会话安全删除/移动 → 直接处理
    • 文件正在被使用且短期无法停机:
      • 用 MoveFile 安排重启后删除/替换
      • 立刻用 PendMoves 校验计划
  • 高风险目录(系统目录 / 驱动 / 安全软件):
    • 强烈建议:
      • 事先备份
      • 做好变更记录与回滚方案

第五步:重启后验证 ------ DU 再次扫描

  • 重启后:
    • 再用 DU 对关键目录/盘做一次扫描,对比前后大小
    • 确认空间是否被释放,应用是否正常

四、示例:构建一个"空间急诊"小脚本

下面是一个简化版"空间急诊工具思路",你可以按需扩展成批处理或 PowerShell:

bat 复制代码
@echo off
setlocal

:: 1) 盘符参数检测
if "%~1"=="" (
  echo 用法: DiskQuickCheck.bat ^<DriveLetter^>
  echo 例如: DiskQuickCheck.bat C
  exit /b 1
)

set DRIVE=%~1:

echo ==========================
echo [1] 顶层目錄空間占用 - %DRIVE%\
echo ==========================
du %DRIVE%\ -q -l 1 | sort /R

echo.
echo ==========================
echo [2] Logs 目錄深度掃描 (若存在)
echo ==========================
if exist %DRIVE%\Logs (
  du %DRIVE%\Logs -q -l 2
) else (
  echo 未發現 %DRIVE%\Logs 目錄,略過
)

echo.
echo ==========================
echo [3] 懷疑有 ADS? 使用 Streams 手工檢查大文件所在目錄
echo ==========================
echo 請手工執行: streams -s ^<要檢查的目錄^>

echo.
echo ==========================
echo [4] 如需重啟後刪除文件,可使用:
echo MoveFile ^<FilePath^> ""
echo 然後用 PendMoves 檢查掛起操作
echo ==========================

endlocal

思路是帮自己/团队:

  • 固定检查步骤
  • 避免每次现场临时想命令,容易出错

你可以在此基础上接入:

  • 日志输出到文件
  • 记录 DU 扫描结果做历史对比
  • 结合计划任务定期跑"空间体检"

五、和前几章工具的联动

第 12 章本身只关注"文件与磁盘",但落地时经常要和前几章搭配使用,例如:

  • 和 Process Monitor(第 5 章) :
    • DU 找到"日志爆炸",Procmon 追是谁在疯狂写文件
  • 和 PsTools(第 7 章) :
    • 远程环境中,用 PsExec 远程跑 DU / Streams / MoveFile
  • 和 Sigcheck / Sysmon(第 9 章) :
    • Strings/Streams 看到可疑迹象,再用 Sigcheck 查签名 / 哈希
    • 用 Sysmon 监控可疑文件的创建/删除/重命名行为

最终目标是:

不仅知道"盘满了/删不掉",而是能回答 "谁干的、为什么、如何安全地改、改完是否恢复"。


六、学习与实战建议

  1. 每个工具单独玩一遍
    • 对着帮助参数(toolname -?)跑几次常用选项
    • 不要直接上生产,先在测试环境、虚拟机练手
  2. 给自己做一个"文件问题速查手册"
    • 左边写症状(盘满 / 删不掉 / 可疑文件)
    • 右边写对应工具和命令模板
  3. 避免野路子操作系统文件
    • 尽量通过官方卸载程序、服务管理、配置管理系统
    • MoveFile & PendMoves 用在你能控制、能回滚的范围内
  4. 和团队共享经验
    • 把本章工具的使用经验写成 Wiki / Runbook
    • 包括:案例、截图、命令、before/after 的 DU 截图

七、小结

本章的 Sysinternals 文件工具,更像是一套"瑞士军刀":

  • Strings / Streams / Junction / FindLinks → 让你看清楚 文件与文件系统背后的真实结构与内容
  • DU → 让你快速找到 资源消耗的热点
  • PendMoves / MoveFile → 让你能在 现实约束(文件被占用 / 无法停机)下安全地完成变更

掌握它们,你在面对"磁盘告警、文件顽固、内容可疑"这些常见问题时,就不会只剩下重装系统这一招,而是有一整套成体系的排障策略和工具组合。

接下来,如果你愿意,可以用一两台测试机做几个"模拟事故"(比如刻意制造大日志、顽固 DLL、Junction 迷惑等),把这套流程实操走一遍,就会发现这些看起来"琐碎"的小工具,其实非常能提升你的 Windows 运维和故障分析上限。

相关推荐
Rabitebla11 小时前
【Linux 底层原理】进程(十):进程等待详解---从僵尸进程到 wait、waitpid 与 status
linux·c++·笔记·学习·visual studio
小lu飞12 小时前
2026小红书小工具怎么制作:纯前端 ZIP 打包、沙箱限制与笔记挂载流程
前端·笔记·ai·ai编程
无心水16 小时前
24、系统架构师论文写作专题 核心考点与学习笔记
笔记·学习·系统架构·架构师·安全架构·软考架构师·软考系统架构设计师
蒸蒸yyyyzwd16 小时前
邓明 Agent 系统面试-意图识别学习笔记
笔记·学习
Zhao-Jichao19 小时前
AI Prompting for Everyone 课程笔记 - P21 总结 Conclusion
人工智能·笔记
欢欢李19 小时前
【LTE L3 笔记 05】LTE同步信号
笔记·无线通信·物理层·lte·空口协议
La Pulga21 小时前
【FreeRTOS源码学习笔记】空闲任务与阻塞延时
笔记·mcu·学习·嵌入式·freertos·实时操作系统
蒸蒸yyyyzwd21 小时前
秋招学习笔记 day106
笔记·学习
小李不想当小白1 天前
WDG看门狗(STM32标准库学习笔记)
笔记·stm32·单片机·嵌入式硬件·学习·嵌入式
欢欢李1 天前
【LTE L3 笔记 04】LTE帧结构
笔记·无线通信·物理层·lte·空口协议