我有应用程序,在运行时生成有趣的中间输出到./tmp目录.
执行结束时,将删除此目录.
我怎样才能保留它的内容?
执行结束时,将删除此目录.
我怎样才能保留它的内容?
我系统上没有uid 0.
因此,我无法拦截(阻止取消链接)任何I / O操作.
目前我正在停止这个应用程序和它的cp内容.
应用程序是静态编译的,因此共享库LD_PRELOAD无济于事.
应用程序使用的**./ ** tmp文件夹与任何env变量无关.
谢谢你的回复.
它可以使用TMPDIR或TEMPDIR环境变量的值.您可以尝试将其设置为其他目录,并查看程序是否使用该目录.也许这是一个配置设置.
如果您能够以非root用户身份删除/ tmp目录或其中的所有内容,那么您的权限似乎是错误的.
我在我的系统上拥有的权限是:
drwxr-xr-x 26 root root 4096 2009-10-14 12:00 / drwxrwxrwt 27 root root 12288 2009-10-19 16:10 /tmp
/目录只允许root删除顶级目录,而/ tmp上的粘滞位只允许所有者删除/ tmp中自己的文件.显然,你需要root来纠正这些问题.
假设它使用unlink函数删除文件,您可以创建一个预加载的小型共享库,它会覆盖系统取消链接功能.
创建unlink.c包含:
int unlink(const char *pathname) { return 0; } int unlinkat(int dirfd,const char *pathname,int flags) { return 0; }
我们也会覆盖unlinkat函数,以防它使用它.
你现在可以运行:
% gcc unlink.c --shared -o unlink.so % file unlink.so unlink.so: ELF 64-bit LSB shared object,x86-64,version 1 (SYSV),dynamically linked,not stripped % touch foo % LD_PRELOAD=./unlink.so rm foo % ls foo foo