我想要查看由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
命令。
答案 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
值得一读......