2017-08-31 76 views
0

当我在终端,其通过运行其他脚本编译不同的东西的脚本运行的原因,它显示了一个错误,告诉我该文件XXX不存在。但是在我运行脚本之前就已经存在了。因此,我想知道哪些脚本/程序/进程删除了该文件来修复该错误。查找文件删除

我看着this但它并没有帮助我:我在缺失,而不是用户的原点寻找程序。此外,我正在使用的机器上不存在auditctl和iwatch。

请注意,我不感兴趣,what files are deleted(我完全知道)。

而且,我可以重新XXX再次运行该脚本。

如何简单找出是什么原因导致XXX删除?

+2

您可以将其写保护('chmod 440 XXX'),并查看是否有脚本投诉。你在用'make'吗? 'make'删除中间产品。 – sauerburger

+0

'chmod'不起作用,因为XXX实际上是一个符号链接,所以权限依然为'lrwxrwxrwx',并且该文件仍然被删除。我不认为XXX是Makefile的目标。我也在使用shell脚本。 – Codoscope

+0

我用一个普通文件替换了XXX来使用'chmod 440',但它仍然被删除。但是,当我运行第一个脚本时,我不使用'sudo'。 – Codoscope

回答

1

两种可能性浮现在脑海中如何调试shell脚本:

  1. 使用strace;你正在寻找的函数调用很可能是unlink()。从周围的呼叫中,您应该能够扣除从中调用删除的上下文。
  2. 打开命令回显set -x或shebang #!/bin/bash -x(对于Bash)和grep对于rm和也许unlink。然而,删除可能发生在某个称为某处的二进制文件中,在这种情况下,您将找不到任何这种方式。

输出重定向到一个文件,以使搜索更容易。