调试策略——如何知道哪个进程正在尝试修改文件?

调试策略——如何知道哪个进程正在尝试修改文件?

我有一个奇怪的错误,我正在使用的众多开发工具之一git reset HEAD在我的项目中发出了 a ,导致我失去了所有工作。我可以通过检查 git reflog 来确认这一点。

我一直在尝试使用排除过程来找出哪个工具是罪魁祸首,但这非常耗时。

我想知道是否有一种方法可以拦截对.git目录的所有写入,以查看哪个进程正在与其交互。这可以吗?

答案1

您可以使用 inotify 工具来监视该目录。然后检查lsof结果。现在的问题是,您想要什么事件 - 相应地进行调整,检查man inotifywait更多事件选项。我决定写入一个文件并创建一个:

 inotifywait -m -r -e modify -e create --format %w%f ~/.git  | 
 while read file ; do
    lsof ${file} 2>/dev/null
 done

现在,如果一个eg运行dd if=/dev/random of=/home/user/.git/test bs=1M count=10,你就会看到是谁干的。

相关内容