【问题标题】:Find the reason of a file deletion查找文件删除的原因
【发布时间】:2017-08-31 08:11:45
【问题描述】:

当我在终端中运行一个通过运行其他脚本来编译不同内容的脚本时,它会显示一个错误,告诉我文件 XXX 不存在。但它在我运行脚本之前就存在了。因此,我想找出是什么脚本/程序/进程删除了该文件以修复错误。

我查看了this,但它没有帮助我:我正在寻找删除源的程序,而不是用户。此外,我使用的机器上不存在 auditctl 和 iwatch。

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

另外,我可以重新创建 XXX 以再次运行脚本。

如何简单找出导致XXX删除的原因?

【问题讨论】:

  • 你可以让它写保护(chmod 440 XXX),看看是否有脚本抱怨。你在用make吗? make 删除中间产品。
  • chmod 不起作用,因为 XXX 实际上是一个符号链接,所以权限保持lrwxrwxrwx 并且文件仍然被删除。我不认为 XXX 是 Makefile 的目标。我也在使用 shell 脚本。
  • 我已将 XXX 替换为常规文件以在其上使用chmod 440,但仍将其删除。然而,当我运行第一个脚本时,我没有使用sudo
  • 您必须将所有者和组设置为root 以防止用户进行非sudo 访问。
  • 使用chattr +i 而不是chmod 440

标签: linux


【解决方案1】:

想到如何调试 shell 脚本有两种可能性:

  1. 使用strace;您正在寻找的函数调用很可能是unlink()。从周围的调用中,您应该能够推断出调用删除的上下文。
  2. 使用set -x 或shebang #!/bin/bash -x(用于Bash)和grep 为rmunlink 打开命令回显。但是,删除可能发生在某处调用的某个二进制文件中,在这种情况下,您将无法通过这种方式找到任何内容。

将输出重定向到文件以便于搜索。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-05
    • 2014-04-24
    • 1970-01-01
    • 2012-12-15
    • 2019-11-01
    相关资源
    最近更新 更多