我通过将可执行文件复制到每个节点、运行它并将输出复制回服务器节点来手动运行集群中的程序。突然,我注意到参与所有此过程的文件正在被一致删除,并且我无法找出我在哪里执行此操作,或者至少找不到哪个脚本正在删除它。
这与SO中的问题有关:https://stackoverflow.com/questions/23608486/how-to-find-which-process-removing-a-directory-in-linux
但请注意,在这里我可以复制这个问题。我没有管理员权限,因此无法使用,auditd
但我可以根据需要重复该过程。有趣的是,我只是尝试更改文件的权限,但它不断消失。
我不期待任何神奇的事情
$ please tell me who did
但我很高兴听到关于如何尝试解决这个问题的聪明想法。
顺便说一句,我问管理员是否有任何进程可能会删除该文件,他说这是不可能的。
注意:我最初在 SO 中发布了此内容,但被标记为离题
编辑:好的,从我使用 Mark Plotnick 建议所看到的来看strace
,我看到首先调用了文件的编译gcc
位置。.c
然后有一个lstat
可执行文件。然后它出现在具有取消链接 PID 的execve
调用上:/usr/bin/ld
5980 execve("/usr/bin/ld", ["/usr/bin/ld", "-plugin", "/cm/local/apps/gcc/6.3.0/libexec"..., "-plugin-opt=/cm/local/apps/gcc/6"..., "-plug in-opt=-fresolution=/tmp/cc"..., "-plugin-opt=-pass-through=-lgcc", "-plugin-opt=-pass-through=-lgcc_"..., "-plugin-opt=-pass-through=-lc", "-plugin-opt=-pass-through=-lgcc", "-plugin-opt=-pass-through=-lgcc_"..., "--eh-frame-hdr", "-m", "elf_x86_64", "-dynamic-linker", "/lib64 /ld-linux-x86-64.so.2", "-o", "MY/EXECUTABLE/BEING/DELETED", "/lib/../lib64/crt1.o", "/lib/../lib64/crti.o", "/cm/local/apps/gcc/6.3.0/lib/g cc"..., "-L/cm/shared/apps/slurm/17.02.2/"..., "-L/cm/local/apps/gcc/6.3.0/lib/g"..., "-L/cm/local/apps/gcc/6.3.0/lib/g"..., "-L/lib/../lib 64", "-L/usr/lib/../lib64", "-L/cm/shared/apps/slurm/17.02.2/"..., "-L/cm/shared/apps/slurm/17.02.2/"..., "-L/cm/local/apps/gcc/6.3.0/lib/g "..., "/tmp/ccdL3Sax.o", "-lm", "-lgcc", "--as-needed", ...], [/* 39 vars */]) = 0
进而:
5980 stat("MY/EXECUTABLE/BEING/DELETED", {st_mode=S_IFREG|0755, st_size=17392, ...}) = 0
5980 lstat("MY/EXECUTABLE/BEING/DELETED", {st_mode=S_IFREG|0755, st_size=17392, ...}) = 0
5980 unlink("MY/EXECUTABLE/BEING/DELETED") = 0
5980 open("MY/EXECUTABLE/BEING/DELETED", O_RDWR|O_CREAT|O_TRUNC, 0666) = 3