如何使git log的基础文件访问操作可见

时间:2014-08-20 22:04:06

标签: git logging dtruss

我想要查看由git lg -n3之类的内容运行引起的文件系统操作。我在Mac上。所以我想,好吧,让我们运行dtruss git lg -n3

不幸的是,这并没有给我预期的输出。我希望看到.git/objects处的某些文件的文件访问权限。

dtruss不是我要找的吗?

我应该补充一点,当我通过git log运行时,我也看不到dtruss的输出。如果我运行dtruss git,我至少会看到git命令概述的输出。我做错了吗?

更新

好的,原来这是dtruss如何处理多字命令git log的问题。如果我使用dtruss /usr/local/git/libexec/git-core/git-log,它会按预期工作。

我可以继续前进并运行dtruss /usr/local/git/libexec/git-core/git-log -n3 2>&1 | grep access并获得我想要的东西。所以唯一剩下的问题就是为什么我必须使用git-log的完整路径而不仅仅是git log命令。

2 个答案:

答案 0 :(得分:2)

在类似Linux(嵌入式或桌面式)的UNIXoid系统上,我喜欢使用inotify-tools来实现此目的,例如 inotifywait inotifywatch ,具体取决于我的确切目的。

编辑:我想知道为什么有人对我的回答进行了低估。 Inotify-tools是一组用于监视文件系统访问的专用工具,这就是所要求的。如果我的回答似乎不够好或不够相关,我会首先要求澄清请求澄清。谢谢。

答案 1 :(得分:2)

您可能想尝试strace。例如,这可能是您正在寻找的结果:

strace -q -f -e trace='open,stat' git log -n3

或者如果您真的想要所有文件系统访问

strace -q -f -e trace=file git log -n3

应该这样做。如果您不需要跟踪-f和其他可能执行的分叉进程所执行的操作,请删除less部分。像往常一样,man strace值得一读......