You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何识别exec创建的文件描述符对应命令及历史清空后的排查方法

文件描述符追踪相关问题

使用以下命令可创建文件描述符:

exec 77> /home/admin/somefile

但通过lsof查看时,仅能看到所属进程为bash:

admin@i-0a8158ef4cb3362f5:~$ lsof somefile 

COMMAND PID  USER   FD   TYPE DEVICE SIZE/OFF   NODE NAME

bash    811 admin   77w   REG  259,1        0 272875 somefile


admin@i-0a8158ef4cb3362f5:/proc/811$ ls -l fd
total 0
lrwx------ 1 admin admin 64 Aug 10 12:30 0 -> /dev/pts/0
lrwx------ 1 admin admin 64 Aug 10 12:30 1 -> /dev/pts/0
lrwx------ 1 admin admin 64 Aug 10 12:30 2 -> /dev/pts/0
lrwx------ 1 admin admin 64 Aug 10 12:30 255 -> /dev/pts/0
l-wx------ 1 admin admin 64 Aug 10 12:30 77 -> /home/admin/somefile

问题1:是否有办法找到创建该文件描述符的具体命令,而非仅显示bash?

  • 常规工具(如lsof、/proc/[pid]/fd)只能定位到持有文件描述符的进程(此处为bash),无法直接获取创建它的具体exec命令。因为exec是bash内置命令,执行后文件描述符属于bash进程本身,系统不会单独记录该描述符的创建命令。
  • 若要实现追踪,只能提前配置监控:
    • 启用auditd并添加规则,监控文件的打开操作或execve系统调用,可记录触发文件描述符创建的命令详情。
    • 在bash中提前开启调试模式(set -x),但此操作需事前配置,事后无法补做。

问题2:若有人执行该exec命令后清空了命令历史,如何确认该命令是否被执行?

可通过以下方式验证:

  • 检查目标进程的/proc/[pid]/fd目录:如示例所示,查看对应bash进程的fd目录,若存在指向目标文件的文件描述符(如示例中的77),则说明该进程确实打开了此描述符,结合场景可推断是exec命令创建。
  • 查看系统审计日志(若auditd已启用):若事前配置了审计规则,日志会记录该文件的打开操作、对应进程及用户信息,即使命令历史被清空,审计日志仍可提供证据。
  • 检查bash历史文件备份:部分系统会自动备份bash历史(如~/.bash_history~等隐藏备份文件),可查看这些备份是否有残留命令记录。
  • 结合文件和进程状态推断:若该文件描述符被后续操作使用过(如写入内容),可通过文件修改时间、内容,以及进程的活动时间间接推断命令是否执行。

内容的提问来源于stack exchange,提问作者Kavish Gour

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 13:47:38