文件工具学习笔记(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 运维和故障分析上限。

相关推荐
q行2 小时前
MySQL学习日志--DQL和它的七大字句
数据库·学习·mysql
叱咤月海鱼鱼猫*2 小时前
MMORPG复习:框架设计
笔记
L.fountain2 小时前
图像自回归生成(Auto-regressive image generation)实战学习(三)
人工智能·深度学习·学习·回归
有谁看见我的剑了?2 小时前
ESXI 虚拟机文件组成学习
运维·学习·云计算
U-52184F692 小时前
CGAL 实战笔记:深入理解 2D 符合三角剖分与网格生成 (针对 CAM 开发)
笔记·算法
代码游侠2 小时前
应用——UDP 网络编程
linux·运维·开发语言·学习·算法
苦 涩2 小时前
考研408笔记之计算机组成原理(四)——指令系统
笔记·计算机组成原理·考研408
li星野2 小时前
打工人日报#20251223
笔记
张人玉2 小时前
WPF HTTPS 通信示例代码分析笔记
笔记·https·wpf