Мне было интересно, какие системные вызовы сделаны echo
(команда, а не встроенная оболочка), поэтому я решил отследить ее через dtrace. В частности, я использовал dtruss
.Почему я не могу отследить системные вызовы, сделанные `/ bin/echo`?
Считает, что следующие работы (трассировка всех системных вызовов, сделанные 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.