文件工具学习笔记(12.7):Sysinternals 文件工具实战总览与排障闭环
- [文件工具学习笔记(12.7):Sysinternals 文件工具实战总览与排障闭环](#文件工具学习笔记(12.7):Sysinternals 文件工具实战总览与排障闭环)
-
- 一、工具全景:谁负责"看"、谁负责"动手"
- 二、从"症状"出发:场景化选择工具
-
- [场景 1:磁盘快满了,不知道谁在吃空间](#场景 1:磁盘快满了,不知道谁在吃空间)
- [场景 2:文件删不掉 / 提示"正在被使用"](#场景 2:文件删不掉 / 提示“正在被使用”)
- [场景 3:怀疑有"隐藏内容"------流、链接、软重定向](#场景 3:怀疑有“隐藏内容”——流、链接、软重定向)
- [场景 4:可疑二进制文件,想快速"窥一眼"](#场景 4:可疑二进制文件,想快速“窥一眼”)
- 三、一套可复制的"文件/磁盘排障通用流程"
-
- [第一步:快速画像 ------ DU](#第一步:快速画像 —— DU)
- [第二步:结构确认 ------ Junction / FindLinks](#第二步:结构确认 —— Junction / FindLinks)
- [第三步:内容抽样 ------ Strings / Streams](#第三步:内容抽样 —— Strings / Streams)
- [第四步:制定处置动作 ------ MoveFile / 其他工具](#第四步:制定处置动作 —— MoveFile / 其他工具)
- [第五步:重启后验证 ------ DU 再次扫描](#第五步:重启后验证 —— DU 再次扫描)
- 四、示例:构建一个"空间急诊"小脚本
- 五、和前几章工具的联动
- 六、学习与实战建议
- 七、小结
文件工具学习笔记(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%,系统告警 / 应用报错
- 用户只会说一句:"电脑/服务器空间满了,帮忙看看"
推荐工具链:
- DU:找出哪些目录/文件最大
- Junction / FindLinks:确认是不是被联接/硬链接"迷惑视觉"
- 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/日志文件始终无法删除或替换
推荐工具链:
- (可选)配合 Handle / Process Explorer 找出占用者
- 若无法停用:使用 MoveFile 安排重启后删除/替换
- 用 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 特性藏东西
- 删除一个文件后,发现其占用空间几乎没变化
推荐工具链:
- Streams:检查文件/目录是否存在 ADS(备用数据流)
- Junction:确认是否有目录联接指向其他路径
- FindLinks:检查文件是否有多个硬链接指向同一物理数据块
示例:
bat
:: 检查整个目录树是否有 ADS
streams -s C:\Data
:: 查看某目录是否是 Junction
junction C:\Data\Logs
:: 查看某文件的所有硬链接
findlinks C:\Data\important.dat
场景 4:可疑二进制文件,想快速"窥一眼"
症状:
- 某个 EXE/DLL/SYS 在进程列表或启动项中出现
- 需要初步判断它是不是恶意/可疑组件
推荐工具链:
- Strings:提取内部字符串,辅助肉眼判断
- 配合 Sigcheck(第 9 章)、VirusTotal 等做更深入判断
示例:
bat
:: 提取可打印字符串
strings -n 6 C:\temp\suspicious.exe > C:\temp\suspicious_strings.txt
关注内容:
- 可疑 URL / IP
- 可执行路径 / 版本号 / 编译时间
- 明显与系统无关的功能性词汇
三、一套可复制的"文件/磁盘排障通用流程"
把上面场景汇总一下,可以整理出一套通用流程:
第一步:快速画像 ------ DU
- 用 DU 确定"问题盘/问题目录"
- 关注:
- 增长最快的目录(配合时间观察)
- 单个超大文件(日志、数据库、转储文件等)
第二步:结构确认 ------ Junction / FindLinks
- 对"异常大的目录/文件"做结构层检查:
- 目录是否是 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 监控可疑文件的创建/删除/重命名行为
最终目标是:
不仅知道"盘满了/删不掉",而是能回答 "谁干的、为什么、如何安全地改、改完是否恢复"。
六、学习与实战建议
- 每个工具单独玩一遍
- 对着帮助参数(
toolname -?)跑几次常用选项 - 不要直接上生产,先在测试环境、虚拟机练手
- 对着帮助参数(
- 给自己做一个"文件问题速查手册"
- 左边写症状(盘满 / 删不掉 / 可疑文件)
- 右边写对应工具和命令模板
- 避免野路子操作系统文件
- 尽量通过官方卸载程序、服务管理、配置管理系统
- MoveFile & PendMoves 用在你能控制、能回滚的范围内
- 和团队共享经验
- 把本章工具的使用经验写成 Wiki / Runbook
- 包括:案例、截图、命令、before/after 的 DU 截图
七、小结
本章的 Sysinternals 文件工具,更像是一套"瑞士军刀":
- Strings / Streams / Junction / FindLinks → 让你看清楚 文件与文件系统背后的真实结构与内容
- DU → 让你快速找到 资源消耗的热点
- PendMoves / MoveFile → 让你能在 现实约束(文件被占用 / 无法停机)下安全地完成变更
掌握它们,你在面对"磁盘告警、文件顽固、内容可疑"这些常见问题时,就不会只剩下重装系统这一招,而是有一整套成体系的排障策略和工具组合。
接下来,如果你愿意,可以用一两台测试机做几个"模拟事故"(比如刻意制造大日志、顽固 DLL、Junction 迷惑等),把这套流程实操走一遍,就会发现这些看起来"琐碎"的小工具,其实非常能提升你的 Windows 运维和故障分析上限。