首页/安全/取证与溯源速查/文件描述符与已删除文件恢复
Linux 取证135 条

文件描述符与已删除文件恢复

被删除但仍被进程占用的文件可以通过 /proc/<pid>/fd 取回内容,这是排查“删了但还在跑”的样本与日志的常用手段。

取证与溯源速查安全更新于 2026-10-13

文件描述符与已删除文件

在 Linux 上,文件被删除后只要还有进程持有它的句柄,内容就依然在磁盘上,可以通过 /proc/<pid>/fd/ 中的符号链接访问,链接目标末尾带 (deleted) 字样就是标志。这是处理“进程还在跑、文件已被删”情形的常规手段,常用于抢救被删的样本、日志与配置。

基本信息

路径/proc/<pid>/fd/<n>,符号链接指向真实的文件对象
删除标志链接目标末尾出现 (deleted) 即已删除但仍被占用
辅助命令lsof +L1 列出链接数为零、已被删除但仍打开的文件
导出方式cat 或 dd 把 fd 内容写到证据目录
权限要求读取其他用户进程的文件描述符需要 root

典型使用场景

  • 样本执行后自我删除,靠文件描述符取回程序本体继续分析
  • 日志或配置被删但服务未重载,抢救进程当前仍在使用的版本
  • 验证“该程序已删除”的说法,看进程是否仍持有对应句柄
  • 取出被覆盖前的旧版本,与磁盘上的新版本做哈希比对
  • 排查长期运行进程持有的异常文件,识别隐藏的读写行为

定位与导出

定位与导出
ls -l /proc/1234/fd | grep deleted                 # 找已删除但被占用的句柄
lsof -p 1234 +L1                                  # 另一视角:链接数为零的文件
cat /proc/1234/fd/3 > /mnt/evidence/deleted_fd3.bin   # 导出内容
sha256sum /mnt/evidence/deleted_fd3.bin            # 导出后立即固定哈希
ls -l /proc/1234/exe                              # 运行中的可执行体同样能这样取回

/proc 条目读法

条目含义用法
fd/<n>进程打开的文件描述符链接目标即实际文件,带 deleted 表示已删
exe进程对应的可执行文件被替换或删除后仍可导出运行中的版本
cwd进程的当前工作目录判断程序从哪个目录启动
maps映射的内存区域与库文件可见被删除的动态库与注入模块
对仍在写入的文件,导出的内容只代表导出那一瞬间的状态;要固定某个版本,先按业务流程降低写入频率,或直接在证据副本上操作,并在记录里写清导出时刻。
访问 /proc 会更新相关对象的访问时间,操作本身要在取证日志中留痕;导出体积大的文件时用 dd 指定块数并记下参数,避免一次读满把证据盘写爆。

易错点

  • 导出后没有立即计算哈希,进程继续写入导致样本状态无法固定
  • 现场未及时取文件描述符,进程退出后内容彻底不可得
  • 对大文件直接用 cat 读取,可能长时间阻塞或写满证据盘
  • 只盯着文件描述符,漏掉 /proc/<pid>/exe 与 maps 里被替换的可执行体

数据来源与参考

  • man 5 proc(/proc/pid/fd)
  • lsof 官方文档(+L1 选项)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌