我想知道echo
(命令,而不是shell内置)的系统调用是什么,所以我决定通过dtrace窥探它。具体来说,我使用了dtruss
。
考虑以下工作(跟踪sed
所做的所有系统调用):
sudo dtruss /usr/local/bin/sed 's/a/e/' <<< 'cat'
SYSCALL(args) = return
thread_selfid(0x0, 0x0, 0x0) = 470642 0
# and many more…
但如果我对echo
尝试相同的操作,我会得到以下结果:
sudo dtruss /bin/echo 'cat'
dtrace: failed to execute /bin/echo: unknown error
实际上:有许多命令,我会收到此错误。通用性是这些命令都在/bin
或/usr/bin
。
Brendan's blog建议可以对dtruss
等命令使用ls
(他的示例为sudo dtruss ls -l hfsslower.d
,其中hfsslower.d
是普通文本文件)。该博客文章发表于2011年,涉及Mac OS X.但我知道OS X从那时起就有各种安全增强功能。
难道我碰到了某种OS X安全性吗?我使用的是OS X 10.12 Sierra。
答案 0 :(得分:2)
我应该尝试搜索错误消息。
Looks like it is indeed System Integrity Protection
您无法再将DTrace附加到Mac上的“限制”进程。而«限制»我的意思是每个内置的实用程序,守护程序或应用程序。
我对这篇文章的解释是:
JavaFX
不足以将DTrace附加到内置可执行文件css
(这完全关闭了SIP,这是过度的,并且在你的安全性方面造成了一个缺口,但似乎是唯一的解决方案)