【发布时间】:2013-11-18 16:33:44
【问题描述】:
我正在使用 dtrace 记录所有被删除的文件。
是否有可能找出符号链接目标是什么(如果它是符号链接)?我想输出符号链接文件名和目标文件名以备日后需要恢复链接。
我想出的一个解决方案是使用 dtrace "system" 函数来调用我自己的程序,该程序将打印出符号链接目标: system("myprogram %s") 其中 %s 是我要为其打印目标的符号链接的全名。
这工作正常(它是一个非常短的 C 程序并且可以完成这项工作) - 但是有没有办法直接通过 dtrace 获取信息,因为我们正在处理文件,所以我们应该能够查找符号链接目标?
我查看了 fileinfo_t 结构,但它没有符号链接目标: http://docs.oracle.com/cd/E18752_01/html/817-6223/chp-io-args.html#chp-io-fileinfo
到目前为止,这是我的脚本: 这是在 Solaris 10 中。(这是探测 fop_remove 而不是 syscall::unlink 并且其原因是能够在用户没有在调用 rm 时指定目录的情况下获取符号链接目录)。
#!/usr/sbin/dtrace -s
#pragma D option quiet
fbt::fop_remove:entry
{
self->dir = stringof(args[0]->v_path);
self->file = stringof(args[1]);
}
fbt::fop_remove:return
/self->file != NULL/
{
printf("%s/%s\n", self->dir, self->file);
self->file = 0;
self->dir = 0;
}
谢谢!
【问题讨论】:
标签: solaris solaris-10 dtrace